<?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">
    <service>
      <inputQueue endpoint="TopLevelTaeQueue" brokerURL="${DefaultBrokerURL}" prefetch="0"/>
      <topDescriptor>
        <import location="../descriptors/analysis_engine/SimpleTestCasMultiplierAggregateWithRemoteMultiplier2.xml"/>
      </topDescriptor>
      <analysisEngine async="true">
        <scaleout numberOfInstances="1"/>
        <delegates>
        
		  <remoteAnalysisEngine key="TestMultiplier">
            <inputQueue brokerURL="${DefaultBrokerURL}" endpoint="TestMultiplierQueue"/>
            <casMultiplier poolSize="3" 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>
          </remoteAnalysisEngine>
			
          <remoteAnalysisEngine key="NoOp">
            <inputQueue brokerURL="${DefaultBrokerURL}" endpoint="NoOpAnnotatorQueue"/>
            <serializer method="xmi"/>
            <asyncAggregateErrorConfiguration>
              <getMetadataErrors maxRetries="0" timeout="0" errorAction="disable"/>
              <processCasErrors maxRetries="0" timeout="0" continueOnRetryFailure="false" thresholdCount="1" thresholdWindow="0" thresholdAction="terminate"/>
              <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
            </asyncAggregateErrorConfiguration>
          </remoteAnalysisEngine>

	    </delegates>
        <asyncPrimitiveErrorConfiguration>
          <processCasErrors thresholdCount="0" thresholdWindow="0" thresholdAction="terminate"/>
          <collectionProcessCompleteErrors timeout="0" additionalErrorAction="terminate"/>
        </asyncPrimitiveErrorConfiguration>
      </analysisEngine>
    </service>
  </deployment>
</analysisEngineDeploymentDescription>
