<?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></description>
  
  <deployment protocol="jms" provider="activemq">
    <casPool numberOfCASes="5"/>
    <service>
      <inputQueue endpoint="TopLevelTaeQueue" brokerURL="${DefaultBrokerURL}" prefetch="1"/>
      <topDescriptor>
        <import location="../descriptors/analysis_engine/TopLevelAggregate.xml"/>
      </topDescriptor>
      <analysisEngine>
        <delegates>
        
          <analysisEngine key="FirstLevelTestMultiplier">
	        <casMultiplier poolSize="5"/> 
          </analysisEngine>

          <analysisEngine key="SecondLevelAggregateCM" async="true">
            <casMultiplier poolSize="25" initialFsHeapSize="20000"/>
	        <delegates>
          		<analysisEngine key="ThirdLevelAggregateCM" async="true">
	                <casMultiplier poolSize="25" initialFsHeapSize="20000"/>
		            <asyncAggregateErrorConfiguration>
        		    	<getMetadataErrors maxRetries="0" timeout="60000" errorAction="terminate"/>
              			<processCasErrors maxRetries="0" timeout="0" continueOnRetryFailure="false" thresholdCount="0" thresholdWindow="0" thresholdAction="terminate"/>
              			<collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
            		</asyncAggregateErrorConfiguration>
          		</analysisEngine>
	        </delegates>
            <asyncAggregateErrorConfiguration>
              <getMetadataErrors maxRetries="0" timeout="60000" errorAction="terminate"/>
              <processCasErrors maxRetries="0" timeout="0" continueOnRetryFailure="false" thresholdCount="0" thresholdWindow="0" thresholdAction="terminate"/>
              <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
            </asyncAggregateErrorConfiguration>
          </analysisEngine>
			
        </delegates>
      </analysisEngine>
    </service>
  </deployment>
  
</analysisEngineDeploymentDescription>
