Chapter 5. Configuration

The Java Message Service (JMS) API specifies how a messaging client interacts with a messaging server. How messaging services such as message destinations and connection factories are defined and implemented depends on the JMS provider. JBoss Messaging has its own files for service configuration.
This chapter shows you how to configure various services available in JBoss Messaging that work together to provide JMS API-level services to client applications.
JBoss Messaging configuration is divided between several configuration files. Depending on the type of service provided, configuration information is divided between messaging-service.xml, remoting-bisocket-service.xml, <your database type>-persistence-service.xml, connection-factories-service.xml and destinations-service.xml. These files can all be found in the $JBOSS_HOME/server/$PROFILE/deploy/messaging directory.
AOP interceptor stacks can be configured in aop-messaging-client.xml (for client-side behavior) and aop-messaging-server.xml (for server-side behavior). There is usually no need to change these files, but some interceptors can be removed to improve performance if they are not required. Ensure that you have considered the security implications before removing the security interceptor.

5.1. Configuring the ServerPeer

The ServerPeer is the heart of the JBoss Messaging JMS facade. You can configure its behavior by altering $JBOSS_HOME/server/$PROFILE/deploy/messaging/messaging-service.xml.
All JBoss Messaging services are based in the ServerPeer.
An example of a Server Peer configuration is presented below. Note that not all values for the server peer's attributes are specified in the example
<!-- ServerPeer MBean configuration
    ============================== -->

<mbean code="org.jboss.jms.server.ServerPeer"
  name="jboss.messaging:service=ServerPeer"
  xmbean-dd="xmdesc/ServerPeer-xmbean.xml">

  <!--The unique id of the server peer - in a cluster each node 
      MUST have a unique value - must be an integer-->

  <attribute name="ServerPeerID">
    ${jboss.messaging.ServerPeerID:0}
  </attribute>
  
  <!--The default JNDI context to use for queues when they are 
      deployed without specifying one--> 
  
  <attribute name="DefaultQueueJNDIContext">/queue</attribute>
  
  <!--The default JNDI context to use for topics when they are 
      deployed without specifying one --> 
  
  <attribute name="DefaultTopicJNDIContext">/topic</attribute>

  <attribute name="PostOffice">
    jboss.messaging:service=PostOffice
  </attribute>

  <!-- The default Dead Letter Queue (DLQ) to use for destinations.
       This can be overridden on a per destinatin basis -->
  
  <attribute name="DefaultDLQ">
    jboss.messaging.destination:service=Queue,name=DLQ
  </attribute>
  
  <!--The default maximum number of times to attempt delivery of a 
      message before sending to the DLQ (if configured).
      This can be overridden on a per destination basis-->
  
  <attribute name="DefaultMaxDeliveryAttempts">10</attribute>
  
  <!--The default Expiry Queue to use for destinations. This can 
      be overridden on a per destinatin basis-->
  
  <attribute name="DefaultExpiryQueue">
    jboss.messaging.destination:service=Queue,name=ExpiryQueue
  </attribute>
  
  <!--The default redelivery delay to impose. This can be overridden 
      on a per destination basis -->
  
  <attribute name="DefaultRedeliveryDelay">0</attribute>
  
  <!--The periodicity of the message counter manager enquiring on 
      queues for statistics-->
  
  <attribute name="MessageCounterSamplePeriod">5000</attribute>
  
  <!--The maximum amount of time for a client to wait for failover 
      to start on the server side after it has detected failure-->
  
  <attribute name="FailoverStartTimeout">60000</attribute>
  
  <!--The maximum amount of time for a client to wait for failover 
      to complete on the server side after it has detected failure-->
  
  <attribute name="FailoverCompleteTimeout">300000</attribute>

  <attribute name="StrictTck">false</attribute>
  
  <!--The maximum number of days results to maintain in the message 
      counter history-->
  
  <attribute name="DefaultMessageCounterHistoryDayLimit">-1</attribute>
  
  <!--The name of the connection factory to use for creating 
      connections between nodes to pull messages-->
  
  <attribute name="ClusterPullConnectionFactoryName">
    jboss.messaging.connectionfactory:service=ClusterPullConnectionFactory
  </attribute>
  
  <!--When redistributing messages in the cluster. Do we need to 
      preserve the order of messages received
      by a particular consumer from a particular producer? -->
        
  <attribute name="DefaultPreserveOrdering">false</attribute>
  
  <!-- Max. time to hold previously delivered messages back waiting for
       clients to reconnect after failover -->
  
  <attribute name="RecoverDeliveriesTimeout">300000</attribute>
  
  <!-- Set to true to enable message counters that can be viewed via JMX -->
  
  <attribute name="EnableMessageCounters">false</attribute>
  
  <!-- The password used by the message sucker connections to create connections.
       THIS SHOULD ALWAYS BE CHANGED AT INSTALL TIME TO SECURE SYSTEM
  <attribute name="SuckerPassword"></attribute>
  -->

  <!-- The name of the server aspects configuration resource
  <attribute name="ServerAopConfig">aop/jboss-aop-messaging-server.xml</attribute>
  -->
  <!-- The name of the client aspects configuration resource
    <attribute name="ClientAopConfig">aop/jboss-aop-messaging-client.xml</attribute>
  -->

  <depends optional-attribute-name="PersistenceManager">
    jboss.messaging:service=PersistenceManager
  </depends>
  
  <depends optional-attribute-name="JMSUserManager">
    jboss.messaging:service=JMSUserManager
  </depends>
  
  <depends>jboss.messaging:service=Connector,transport=bisocket</depends>
  <depends optional-attribute-name="SecurityStore"
    proxy-type="org.jboss.jms.server.SecurityStore">
      jboss.messaging:service=SecurityStore
  </depends>
</mbean>