#!/bin/tcsh
# 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$ 
#

set DIR = `dirname $0`
cd $DIR
set DIR_PATH = `pwd`

if ( $#argv != 1 ) then
        echo "Usage: $0 <port>"
        exit 1
else
        java -Djava.ext.dirs=../lib \
        org.apache.oodt.cas.resource.system.extern.XmlRpcBatchStub \
        -Dorg.apache.oodt.cas.pge.task.metkeys.legacyMode="true" \
        -Dorg.apache.oodt.cas.pge.task.status.legacyMode="true" \
        --portNum $1&
endif
