<!--
    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.
-->

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
    ">

  <context:annotation-config />


  <bean id="cf" class="org.apache.activemq.ActiveMQConnectionFactory">
      <property name="brokerURL" value="failover:(tcp://localhost:61616)"/>
  </bean>

  <bean id="pooledCf" class="org.apache.activemq.pool.PooledConnectionFactory">
      <!-- match maxConnections to the number of routes that share the connection factory -->
      <property name="maxConnections" value="10"/>
      <!-- match maximumActive (which is active sessions) >=  concurrentConsumers in the MLC -->
      <property name="maximumActiveSessionPerConnection" value="1"/>
      <property name="connectionFactory" ref="cf"/>
  </bean>

  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <!-- set cf - so that inbound and outbound endpoints share the connection pool and transacted session -->
    <property name="connectionFactory" ref="pooledCf" />
    <property name="transacted" value="true" />
    <property name="concurrentConsumers" value="1" />

  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/spring" id="camel-queue-transporter">
    <route id="move-route">
      <from uri="activemq:queue:from" />
      <to uri="activemq:queue:to" />
    </route>
  </camelContext>

</beans>
