#!/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.    

$JAVA_HOME/bin/java -Djava.ext.dirs=../lib \
        -Djava.util.logging.config.file=../etc/logging.properties \
        -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl \
        org.apache.oodt.cas.pge.PGETask --metadata ../etc/examples/WorkflowMgrInput/pcs-pge-dyn-metadata.met \
        --config ../etc/examples/WorkflowMgrInput/pcs-pge-task-workflow.properties \
        --instanceClass org.apache.oodt.cas.pge.StdPGETaskInstance
