<?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>Room Number Annotator</name>
  <description>Deploys the Room Number Annotator Primitive AE</description>
  
  <deployment protocol="jms" provider="activemq">
    <service>
      <inputQueue endpoint="RoomNumberAnnotatorQueue" brokerURL="${defaultBrokerURL}"/>
      <topDescriptor>
       <import location="../../descriptors/tutorial/ex2/RoomNumberAnnotator.xml"/> 
      </topDescriptor>
    </service>
  </deployment>

</analysisEngineDeploymentDescription>
