<!--

    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:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">


    <broker xmlns="http://activemq.apache.org/schema/core"
            brokerName="${broker-name}"
            dataDirectory="${data}"
            start="false">

        <persistenceAdapter>
            <kahaDB directory="${data}/kahadb"/>
        </persistenceAdapter>

        <plugins>
            <jaasAuthenticationPlugin configuration="karaf" />
            <authorizationPlugin>
              <map>
                <authorizationMap groupClass="org.apache.karaf.jaas.boot.principal.RolePrincipal">
                  <authorizationEntries>
                    <authorizationEntry queue=">" read="admin" write="admin" admin="admin"/>
                    <authorizationEntry topic=">" read="admin" write="admin" admin="admin"/>
                    <authorizationEntry topic="ActiveMQ.Advisory.>" read="admin" write="admin" admin="admin"/>
                  </authorizationEntries>
                </authorizationMap>
              </map>
            </authorizationPlugin>
        </plugins>

        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="64 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="100 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="50 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
        </transportConnectors>
    </broker>

    <bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616?jms.dispatchAsync=false&amp;jms.xaAckMode=1"/>
        <property name="userName" value="karaf" />
        <property name="password" value="karaf" />

    </bean>

    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.XaPooledConnectionFactory">
        <property name="connectionFactory" ref="activemqConnectionFactory"/>
    </bean>

    <!-- Define the activemq Camel component so we can integrate with the AMQ broker -->
    <bean id="activemq" class="org.apache.camel.component.jms.JmsComponent"
          depends-on="pooledConnectionFactory">
        <property name="connectionFactory" ref="pooledConnectionFactory"/>
        <property name="cacheLevel" value="0"/>
    </bean>

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route id="queueToDbTransacted">
            <from uri="activemq:queue:camel_in"/>
            <to uri="activemq:queue:camel_out"/>
        </route>
    </camelContext>


</beans>
