<?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>MeetingFinder CPE</name>
  <description>Deploys Meeting Finder Aggregate as an asynchronous collection processing engine.</description>
  
  <deployment protocol="jms" provider="activemq">
      <service>
        <inputQueue endpoint="MeetingFinderQueue" brokerURL="tcp://localhost:61616"/>
        <topDescriptor>
         <import location="../descriptors/meetingFinder/MeetingFinderAggregate.xml"/> 
        </topDescriptor>
        <analysisEngine>
          <delegates>
            <analysisEngine key="CollectionReader">
              <casMultiplier poolSize="2"/>
            </analysisEngine>
            <analysisEngine key="TokenAndSentence">
              <asyncAggregateErrorConfiguration>
                <processCasErrors maxRetries="0" timeout="100000" continueOnRetryFailure="false" thresholdCount="100" thresholdWindow="9" thresholdAction="terminate"/>
              </asyncAggregateErrorConfiguration>
            </analysisEngine>
          </delegates>
        </analysisEngine>
      </service>
  </deployment>

</analysisEngineDeploymentDescription>
