<?xml version="1.0" encoding="UTF-8"?>
  <!--
   ***************************************************************
   * 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.
   ***************************************************************
   -->
   
<analysisEngineDeploymentDescription xmlns="http://uima.apache.org/resourceSpecifier">
  <name>Top Level TAE</name>
  <description/>
  <version/>
  <vendor/>
  <deployment protocol="jms" provider="activemq">
    <casPool numberOfCASes="5" initialFsHeapSize="2000000"/>
    <service>
      <inputQueue endpoint="TopLevelTaeQueue" brokerURL="${DefaultBrokerURL}" prefetch="1"/>
      <topDescriptor>
        <import location="../descriptors/analysis_engine/SimpleTestAggregateWithMergedTypes.xml"/>
      </topDescriptor>
      <analysisEngine async="true">
        <scaleout numberOfInstances="1"/>
        <casMultiplier poolSize="0" initialFsHeapSize="2000000"/>
        <delegates>
          <analysisEngine key="TestMultiplier" async="false">
            <scaleout numberOfInstances="1"/>
            <casMultiplier poolSize="5" initialFsHeapSize="2000000"/>
            <asyncAggregateErrorConfiguration>
              <getMetadataErrors maxRetries="0" timeout="0" errorAction="terminate"/>
              <processCasErrors maxRetries="0" timeout="0" continueOnRetryFailure="false" thresholdCount="0" thresholdWindow="0" thresholdAction="terminate"/>
              <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
            </asyncAggregateErrorConfiguration>
          </analysisEngine>
          <analysisEngine key="SimpleAnnotator" async="false">
            <scaleout numberOfInstances="1"/>
            <asyncAggregateErrorConfiguration>
              <getMetadataErrors maxRetries="0" timeout="0" errorAction="terminate"/>
              <processCasErrors maxRetries="0" timeout="0" continueOnRetryFailure="false" thresholdCount="1" thresholdWindow="0" thresholdAction="terminate"/>
              <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
            </asyncAggregateErrorConfiguration>
          </analysisEngine>
        </delegates>
        <asyncPrimitiveErrorConfiguration>
          <processCasErrors thresholdCount="0" thresholdWindow="0" thresholdAction="terminate"/>
          <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
        </asyncPrimitiveErrorConfiguration>
      </analysisEngine>
    </service>
  </deployment>
</analysisEngineDeploymentDescription>
