<!--
    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.
-->
<!-- 
    BY DEFAULT, PLEASE DO NOT EDIT OR REMOVE THOSE SYSTEM PROPERTY VALUES LIKE ${activemq.*}, SERVER RUNTIME WILL SET THEM FOR YOU 
    THE ACTIVEMQ XML CONFIGURATION FILE WILL BE SAVE IN THE FOLDER /VAR/ACTIVEMQ/CONF/${ACTIVEMQ.BROKERNAME}.XML
    THE DATA FOLDER WILL BE /VAR/ACTIVEMQ/DATA/${ACTIVEMQ.BROKERNAME}/
-->


<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://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd   
  http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <!-- Allows us to use system properties as variables in this configuration file-->
    <bean class="org.apache.geronimo.activemq.GeronimoPropertyPlaceholderConfigurer">
         <property name="locations">
            <!--<value>file://${activemq.home}/conf/credentials.properties</value>-->
            <value>${activemq.geronimo.home.url}/var/config/config-substitutions.properties</value>
         </property>
    </bean>

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="${activemq.brokerName}" tmpDataDirectory="${activemq.data}/tmp_storage" useShutdownHook="false" start="false">

        <!--
            Configure per-destination policies on the broker. The policies
            below limit the memory that any destination can use to 128mb. For 
            more information, see:

            http://activemq.apache.org/per-destination-policies.html
        -->
        <destinationPolicy>
          <policyMap>
            <policyEntries>
              <policyEntry queue=">" memoryLimit="128mb" />
              <policyEntry topic=">" memoryLimit="128mb" />
            </policyEntries>
          </policyMap>
        </destinationPolicy>
    
        <!-- 
            The managementContext is used to configure how ActiveMQ is exposed in 
            JMX. By default, ActiveMQ uses the MBean server that is started by 
            the JVM. For more information, see: 

            http://activemq.apache.org/jmx.html 
        -->
        <managementContext>
            <managementContext createConnector="false"/>
        </managementContext>

        <!-- 
            The network connectors are used to create a network of brokers. For 
            more information, see: 
            
            http://activemq.apache.org/networks-of-brokers.html 
        -->
        <!--networkConnectors-->
          <!--
              This connector automatically discovers the other brokers using
              IP multicast. Such discovery is possible only because the 
              openwire transport connector is advertised via the default IP
              multicast group. For more information on multicast, see: 
                
              http://activemq.apache.org/multicast-transport-reference.html

            <networkConnector name="default-nc" uri="multicast://default"/>
            -->

            <!-- 
            Example of a static configuration. For more information, see:
                             
            http://activemq.apache.org/static-transport-reference.html

            <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)"/>
            -->
        <!--/networkConnectors-->

        <!-- 
            Configure message persistence for the broker. The default persistence
            mechanism is the AMQ store (identified by the amqPersistenceAdapter). 
            For more information, see: 
            
            http://activemq.apache.org/persistence.html 
        -->
        <persistenceAdapter>
            <amqPersistenceAdapter syncOnWrite="false" directory="${activemq.data}" maxFileLength="20 mb"/>
        </persistenceAdapter>

        <!-- 
            Configure the following if you wish to use journaled JDBC for message 
            persistence. 

        <persistenceAdapter>
            <journaledJDBC dataDirectory="${activemq.home}/data/${activemq.brokerName}" dataSource="#postgres-ds"/>
        </persistenceAdapter>
        -->

        <!-- 
            Configure the following if you wish to use non-journaled JDBC for message 
            persistence.
  
        <persistenceAdapter>
            <jdbcPersistenceAdapter dataSource="#postgres-ds"/>
        </persistenceAdapter>
        -->

        <!-- 
            The sslContext can be used to configure broker-specific SSL properties.
            For more information, see: 
            
            http://activemq.apache.org/how-do-i-use-ssl.html 

        <sslContext>
            <sslContext keyStore="file:${activemq.home}/conf/${activemq.brokerName}/broker.ks" 
                keyStorePassword="password" 
                trustStore="file:${activemq.home}/conf/${activemq.brokerName}/broker.ts" 
                trustStorePassword="password"/>
        </sslContext>
        -->
        
        <!--  
            The systemUsage controls the maximum amount of space the broker will 
            use before slowing down producers. 

            In general, these three configuration items are in place to limit the
            amount of space the broker will use to hold and store messages.  Below
            is actual breakdown of where they're each used in ActiveMQ 5.1:

            * The memoryUsage is used by JMX, destinations, some cursors, the AMQ
              store, the journal
            * The storeUsage is not used anywhere other than JMX
            * The tempUsage is used by JMX and the FilePendingMessageCursor

            The best recommendation is to set the memoryUsage to a setting that is
            appropriate for holding all the messages you need to be in memory at
            any given time. This is used for pending messages, topics with
            inactive durable subscribers and queues with slow consumers. I've
            bound it beneficial to utilize the memoryUsage setting in conjunction
            with a memoryLimit attribute on the policyEntry element for a
            destination.
            
        -->
        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="512 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb" name="foo"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>


        <!-- 
            The transport connectors expose ActiveMQ over a given protocol to
            clients and other brokers. For more information, see: 
            
            http://activemq.apache.org/configuring-transports.html 
        -->
        <transportConnectors>
            <!--
            <transportConnector name="openwire" uri="tcp://${ServerHostname}:${* + ${PortOffset}}" />            
            <transportConnector name="openwire2" uri="tcp://${ServerHostname}:${* + ${PortOffset}}" discoveryUri="multicast://default"/>
            <transportConnector name="ssl" uri="ssl://${ServerHostname}:${* + ${PortOffset}}"/>
            <transportConnector name="stomp" uri="stomp://${ServerHostname}:${* + ${PortOffset}}"/>            
            -->
        </transportConnectors>

    </broker>

    <!--
       Lets deploy some Enterprise Integration Patterns inside the ActiveMQ Message 
       Broker. For more details see:
      
       http://activemq.apache.org/enterprise-integration-patterns.html
    
    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
     -->
     <!--</camelContext>-->

        <!-- You can use a <package> element for each root package to search for Java routes 
        <package>org.foo.bar</package>
        -->

        <!-- You can use Spring XML syntax to define the routes here using the <route> element 
        <route>
            <from uri="activemq:example.A"/>
            <to uri="activemq:example.B"/>
        </route>
    </camelContext>
    -->

    <!--
    ** Lets configure some Camel endpoints
    **
    ** http://activemq.apache.org/camel/components.html
    -->

    <!-- 
        Uncomment to create a command agent to respond to message based admin 
        commands on the ActiveMQ.Agent topic. For more information, see: 
        
        http://activemq.apache.org/command-agent.html

    <commandAgent xmlns="http://activemq.apache.org/schema/core" brokerUrl="vm://localhost" username="${activemq.username}" password="${activemq.password}"/>
    -->


    <!-- 
        An embedded servlet engine for serving up the Admin console and other demos. 

    <jetty xmlns="http://mortbay.com/schemas/jetty/1.0">
        <connectors>
            <nioConnector port="8161"/>
        </connectors>

        <handlers>
            <webAppContext contextPath="/admin" resourceBase="${activemq.home}/webapps/admin" logUrlOnStart="true"/>
            <webAppContext contextPath="/demo" resourceBase="${activemq.home}/webapps/demo" logUrlOnStart="true"/>
            <webAppContext contextPath="/fileserver" resourceBase="${activemq.home}/webapps/fileserver" logUrlOnStart="true"/>
        </handlers>
    </jetty>
    -->

    <!-- 
        This xbean configuration file supports all the standard Spring XML 
        configuration options such as the following bean definitions. 
    -->

    <!-- Postgres DataSource Sample Setup -->
    <!--
    <bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
      <property name="serverName" value="localhost"/>
      <property name="databaseName" value="activemq"/>
      <property name="portNumber" value="0"/>
      <property name="user" value="activemq"/>
      <property name="password" value="activemq"/>
      <property name="dataSourceName" value="postgres"/>
      <property name="initialConnections" value="1"/>
      <property name="maxConnections" value="10"/>
    </bean>
    -->

    <!-- MySql DataSource Sample Setup -->
    <!--
    <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
      <property name="username" value="activemq"/>
      <property name="password" value="activemq"/>
      <property name="maxActive" value="200"/>
      <property name="poolPreparedStatements" value="true"/>
    </bean>
    -->

    <!-- Oracle DataSource Sample Setup -->
    <!--
    <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>
      <property name="username" value="scott"/>
      <property name="password" value="tiger"/>
      <property name="maxActive" value="200"/>
      <property name="poolPreparedStatements" value="true"/>
    </bean>
    -->

    <!-- Embedded Derby DataSource Sample Setup -->
    <!--
    <bean id="derby-ds" class="org.apache.derby.jdbc.EmbeddedDataSource">
      <property name="databaseName" value="derbydb"/>
      <property name="createDatabase" value="create"/>
    </bean>
    -->

</beans>
