<?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>Simple Annotator</name>
  <description>Deploys the Simple Annotator Primitive AE</description>
  
  <deployment protocol="jms" provider="activemq">
    <casPool numberOfCASes="5" initialFsHeapSize="500"/> 
    <service>
      <inputQueue endpoint="NoOpAnnotatorQueue2" brokerURL="${DefaultBrokerURL}" prefetch="1"/>
      <topDescriptor>
       <import location="../descriptors/analysis_engine/SimpleAnnotator.xml"/> 
      </topDescriptor>
      <analysisEngine>
      <asyncPrimitiveErrorConfiguration>
           <!-- <processCasErrors thresholdCount="4" thresholdWindow="10" thresholdAction="terminate" /> -->
           <collectionProcessCompleteErrors additionalErrorAction="terminate" />
      </asyncPrimitiveErrorConfiguration>
      </analysisEngine>
    
      
    </service>
  </deployment>

</analysisEngineDeploymentDescription>
