# 
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE 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.
# 
description                     DUCC raw text sample application
driver_descriptor_CR            org.apache.uima.ducc.sampleapps.DuccJobTextCR
process_descriptor_CM           org.apache.uima.ducc.sampleapps.DuccTextCM
process_descriptor_AE           ${OPENNLP_HOME}/desc/OpenNlpTextAnalyzer.xml
process_descriptor_CC           org.apache.uima.ducc.sampleapps.DuccCasCC
process_memory_size             4
process_pipeline_count          8
process_jvm_args                -Xmx3G -XX:+UseCompressedOops -Djava.util.logging.config.file=${MyAppDir}/ConsoleLogger.properties -Duima.datapath=${OPENNLP_HOME}/models
scheduling_class                normal
working_directory               ${MyAppDir}
log_directory                   ${MyAppDir}/logs
process_per_item_time_max       10
classpath                       ${MyAppDir}/lib/*:${UIMA_HOME}/lib/*:${OPENNLP_HOME}/lib/*
driver_descriptor_CR_overrides  BlockSize=100000 SendToLast=true InputDirectory=${MyInputDir} OutputDirectory=${MyOutputDir}
process_descriptor_CC_overrides UseBinaryCompression=true
wait_for_completion
cancel_on_interrupt

