<?xml version="1.0" encoding="UTF-8"?>

<!-- $Id: oracle-jbossmq-service.xml,v 1.1.4.6 2003/06/02 19:40:56 ejort Exp $ -->

<server>

  <!-- ==================================================================== -->
  <!-- JBossMQ Configuration which uses a Oracle DataSource to store it's   -->
  <!-- persistent message.                                                  -->
  <!-- The OracleDS must be deployed for this example to work               -->
  <!-- ==================================================================== -->

  <!-- ==================================================================== -->
  <!-- Invocation Layers                                                    -->
  <!-- ==================================================================== -->
  <!--
     | InvocationLayers are the different transport methods that can
     | be used to access the server.
   -->

  <mbean code="org.jboss.mq.il.jvm.JVMServerILService"
	 name="jboss.mq:service=InvocationLayer,type=JVM">
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">java:/ConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">java:/XAConnectionFactory</attribute>
    <attribute name="PingPeriod">0</attribute>
  </mbean>

  <mbean code="org.jboss.mq.il.rmi.RMIServerILService"
	 name="jboss.mq:service=InvocationLayer,type=RMI">
	 <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">RMIConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">RMIXAConnectionFactory</attribute>
    <attribute name="PingPeriod">60000</attribute>
  </mbean>

  <mbean code="org.jboss.mq.il.oil.OILServerILService"
	 name="jboss.mq:service=InvocationLayer,type=OIL">
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">ConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">XAConnectionFactory</attribute>
    <attribute name="ServerBindPort">8090</attribute>
    <attribute name="PingPeriod">60000</attribute>
    <attribute name="EnableTcpNoDelay">true</attribute>
  </mbean>

  <!-- deprecated use UIL2 -->
  <mbean code="org.jboss.mq.il.uil.UILServerILService"
	 name="jboss.mq:service=InvocationLayer,type=UIL">
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">UILConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">UILXAConnectionFactory</attribute>
    <attribute name="ServerBindPort">8091</attribute>
    <!-- FIXME: ping disabled because of deadlock problem -->
    <attribute name="PingPeriod">0</attribute>
<!--    <attribute name="PingPeriod">60000</attribute> -->
    <attribute name="EnableTcpNoDelay">true</attribute>
  </mbean>
  
  <mbean code="org.jboss.mq.il.oil2.OIL2ServerILService"
	 name="jboss.mq:service=InvocationLayer,type=OIL2">
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">OIL2ConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">OIL2XAConnectionFactory</attribute>
    <attribute name="ServerBindPort">8092</attribute>
    <attribute name="PingPeriod">60000</attribute>
    <attribute name="EnableTcpNoDelay">true</attribute>
  </mbean>

  <mbean code="org.jboss.mq.il.uil2.UILServerILService"
	 name="jboss.mq:service=InvocationLayer,type=UIL2">
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
    <attribute name="ConnectionFactoryJNDIRef">UIL2ConnectionFactory</attribute>
    <attribute name="XAConnectionFactoryJNDIRef">UIL2XAConnectionFactory</attribute>
    <attribute name="ServerBindPort">8093</attribute>
    <attribute name="PingPeriod">60000</attribute>
    <attribute name="EnableTcpNoDelay">true</attribute>
    <!-- Used to disconnect the client if there is no activity -->
    <!-- Ensure this is greater than the ping period -->
    <attribute name="ReadTimeout">70000</attribute>
    <!-- The size of the buffer (in bytes) wrapping the socket -->
    <!-- The buffer is flushed after each request -->
    <attribute name="BufferSize">2048</attribute>
    <!-- Large messages may block the ping/pong -->
    <!-- A pong is simulated after each chunk (in bytes) for both reading and writing -->
    <!-- It must be larger than the buffer size -->
    <attribute name="ChunkSize">1000000</attribute>
  </mbean>
  
  <!--
     | The HTTP IL is configured in the deploy directory and available by
     | default in both the "default" and "all" server configurations.  To customize
     | its attributes please see the jboss-service.xml file included in
     | the META-INF directory of jbossmq-httpil.sar directory.  The rationale
     | for not including its configuration here is due to the fact that it
     | includes a required dependant web module which would have required
     | a stand alone WAR file.  It was elected, therefore, to put everything
     | in the deploy directory.
   -->

  <!-- ==================================================================== -->
  <!-- JBossMQ Interceptor chain configuration                              -->
  <!-- ==================================================================== -->
  <!-- To tune performance, you can have the Invoker skip over the TracingInterceptor -->
  <!-- and/or the SecurityManager, but then you loose the ability to trace and/or enforce security. -->
  <mbean code="org.jboss.mq.server.jmx.Invoker" name="jboss.mq:service=Invoker">
    <depends optional-attribute-name="NextInterceptor">jboss.mq:service=TracingInterceptor</depends>
  </mbean>

  <mbean code="org.jboss.mq.server.jmx.InterceptorLoader" name="jboss.mq:service=TracingInterceptor">
    <attribute name="InterceptorClass">org.jboss.mq.server.TracingInterceptor</attribute>
    <depends optional-attribute-name="NextInterceptor">jboss.mq:service=SecurityManager</depends>
  </mbean>

  <mbean code="org.jboss.mq.security.SecurityManager" name="jboss.mq:service=SecurityManager">
    <depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends>
  </mbean>

  <mbean code="org.jboss.mq.server.jmx.DestinationManager" name="jboss.mq:service=DestinationManager">
    <depends optional-attribute-name="PersistenceManager">jboss.mq:service=PersistenceManager</depends>
    <depends optional-attribute-name="StateManager">jboss.mq:service=StateManager</depends>
  </mbean>

  <!--
     | The MessageCache decides where to put JBossMQ message that
     | are sitting around waiting to be consumed by a client.
     |
     | The memory marks are in Megabytes.  Once the JVM memory usage hits
     | the high memory mark, the old messages in the cache will start getting
     | stored in the DataDirectory.  As memory usage gets closer to the
     | Max memory mark, the amount of message kept in the memory cache aproaches 0.
   -->
  <mbean code="org.jboss.mq.server.MessageCache"
	 name="jboss.mq:service=MessageCache">
    <attribute name="HighMemoryMark">500</attribute>
    <attribute name="MaxMemoryMark">600</attribute>
    <!-- the JDBC PersistenceManager will also be the CacheStore -->
    <attribute name="CacheStore">jboss.mq:service=PersistenceManager</attribute>
  </mbean>

  <!--
     | The StateManager is used to keep JMS persistent state data.
     | For example: what durable subscriptions are active.
   -->
  <mbean code="org.jboss.mq.sm.file.DynamicStateManager"
	 name="jboss.mq:service=StateManager">
    <!-- This file is pulled from the configuration URL of the server -->
    <attribute name="StateFile">jbossmq-state.xml</attribute>
  </mbean>

  <!-- The PersistenceManager is used to store messages to disk. -->
  <!-- 
     | The jdbc2 PersistenceManager is the new improved JDBC implementation.
     | This implementation allows you to control how messages are stored in 
     | the database.
     | 
     | This jdbc2 PM configuration has been tested against Oracle
   -->
  <mbean code="org.jboss.mq.pm.jdbc2.PersistenceManager"
	 name="jboss.mq:service=PersistenceManager">
    <depends optional-attribute-name="MessageCache">jboss.mq:service=MessageCache</depends>
    <depends optional-attribute-name="ConnectionManager">jboss.jca:service=LocalTxCM,name=OracleDS</depends>
    <attribute name="SqlProperties">
      BLOB_TYPE=BINARYSTREAM_BLOB
      INSERT_TX = INSERT INTO JMS_TRANSACTIONS (TXID) values(?)
      INSERT_MESSAGE = INSERT INTO JMS_MESSAGES (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP) VALUES(?,?,?,?,?)
      SELECT_ALL_UNCOMMITED_TXS = SELECT TXID FROM JMS_TRANSACTIONS
      SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_MESSAGES
      SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE DESTINATION=?
      SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
      MARK_MESSAGE = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=?
      UPDATE_MESSAGE = UPDATE JMS_MESSAGES SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=?
      UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=?
      UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGES SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=?
      DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGES WHERE TXID IN (SELECT TXID FROM JMS_TRANSACTIONS) AND TXOP=?
      DELETE_TX = DELETE FROM JMS_TRANSACTIONS WHERE TXID = ?
      DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGES WHERE TXID=? AND TXOP=?
      DELETE_MESSAGE = DELETE FROM JMS_MESSAGES WHERE MESSAGEID=? AND DESTINATION=?
      CREATE_MESSAGE_TABLE = CREATE TABLE JMS_MESSAGES ( MESSAGEID INTEGER NOT NULL, \
         DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), \
         MESSAGEBLOB BLOB, PRIMARY KEY (MESSAGEID, DESTINATION) )
      CREATE_TX_TABLE = CREATE TABLE JMS_TRANSACTIONS ( TXID INTEGER )
      CREATE_TABLES_ON_STARTUP = TRUE
    </attribute>
  </mbean>

  <!-- ==================================================================== -->
  <!-- System Destinations                                                  -->
  <!-- ==================================================================== -->

  <!-- Dead Letter Queue -->
  <mbean code="org.jboss.mq.server.jmx.Queue"
	 name="jboss.mq.destination:service=Queue,name=DLQ">
    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
    <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>
  </mbean>

</server>
