#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE.txt file distributed with
# this work for additional information regarding copyright ownership.  The ASF
# licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# License for the specific language governing permissions and limitations
# under the License.    
#
# $Id$


if [ -z $JAVA_HOME ] ; then
	JAVA_HOME=/path/to/java/home
else
	JAVA_HOME=${JAVA_HOME}
fi

export JAVA_HOME

$JAVA_HOME/bin/java \
        -Djava.ext.dirs=../lib \
        -Dorg.apache.oodt.cas.resource.properties=../etc/resource.properties \
        -Djava.util.logging.config.file=../etc/logging.properties \
        -Dorg.apache.oodt.cas.cli.action.spring.config=../policy/cmd-line-actions.xml \
        -Dorg.apache.oodt.cas.cli.option.spring.config=../policy/cmd-line-options.xml \
        org.apache.oodt.cas.resource.system.XmlRpcResourceManagerClient $*
