<?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/TypeSystemMergeTestAggregate.xml"/>
      </topDescriptor>
      <analysisEngine>
        <delegates>
        
          <analysisEngine key="TestMultiplier">
	        <casMultiplier poolSize="5"/> 
          </analysisEngine>

          <remoteAnalysisEngine key="GovOffReco" remoteReplyQueueScaleout="1">
	                  <inputQueue endpoint="GovOfficialRecognizerQueue" brokerURL="${DefaultBrokerURL}"/>
	                  <serializer method="xmi"/>
                      <asyncAggregateErrorConfiguration>
                            <getMetadataErrors maxRetries="3" timeout="5000" errorAction="continue" />
                            <processCasErrors maxRetries="0" timeout="5000" thresholdCount="1" thresholdAction="terminate" />
                      </asyncAggregateErrorConfiguration>
          </remoteAnalysisEngine>

          <remoteAnalysisEngine key="PersonTitleReco" remoteReplyQueueScaleout="1">
	                  <inputQueue endpoint="NamesAndPersonTitlesQueue" brokerURL="${DefaultBrokerURL}"/>
	                  <serializer method="xmi"/>
                      <asyncAggregateErrorConfiguration>
                            <getMetadataErrors maxRetries="3" timeout="5000" errorAction="continue" />
                            <processCasErrors maxRetries="0" timeout="5000" thresholdCount="1" thresholdAction="terminate" />
                      </asyncAggregateErrorConfiguration>
          </remoteAnalysisEngine>

          <remoteAnalysisEngine key="TokenSentenceReco" remoteReplyQueueScaleout="1">
	                  <inputQueue endpoint="TokenSentenceRecognizerQueue" brokerURL="${DefaultBrokerURL}"/>
	                  <serializer method="xmi"/>
                      <asyncAggregateErrorConfiguration>
                            <getMetadataErrors maxRetries="3" timeout="5000" errorAction="continue" />
                            <processCasErrors maxRetries="0" timeout="5000" thresholdCount="1" thresholdAction="terminate" />
                      </asyncAggregateErrorConfiguration>
          </remoteAnalysisEngine>
          
        </delegates>
      </analysisEngine>
    </service>
  </deployment>
  
</analysisEngineDeploymentDescription>