Version 19

    MDB Configuration using the old invoker proxy binding (JMSContainerInvoker)

     

    Complete and up-to-date details can be found in the dtd

     

    $JBOSS_HOME/docs/dtd/jboss_x_y.dtd

     

    Delivery

     

    The delivery to the mdb is handled by the invoker-proxy-binding. Here we consider the JMSContainerInvoker.

     

    NOTE: A container configuration can have more than one invoker-proxy-binding allowing an

    MDB to make multiple subscriptions.

     

    NOTE: The spec defined activation config properties are also supported,

    these override the values here.

     

    Example config (see conf/standardjboss.xml)

        <invoker-proxy-binding>
          <name>message-driven-bean</name>
          <invoker-mbean>default</invoker-mbean>
          <proxy-factory>org.jboss.ejb.plugins.jms.JMSContainerInvoker</proxy-factory>
          <proxy-factory-config>
            <JMSProviderAdapterJNDI>DefaultJMSProvider</JMSProviderAdapterJNDI>
            <ServerSessionPoolFactoryJNDI>StdJMSPool</ServerSessionPoolFactoryJNDI>
            <CreateJBossMQDestination>true</CreateJBossMQDestination>
            <!-- WARN: Don't set this to zero until a bug in the pooled executor is fixed -->
            <MinimumSize>1</MinimumSize>
            <MaximumSize>15</MaximumSize>
            <KeepAliveMillis>30000</KeepAliveMillis>
            <MaxMessages>1</MaxMessages>
            <MDBConfig>
              <ReconnectIntervalSec>10</ReconnectIntervalSec>
              <DLQConfig>
                <DestinationQueue>queue/DLQ</DestinationQueue>
                <MaxTimesRedelivered>10</MaxTimesRedelivered>
                <TimeToLive>0</TimeToLive>
              </DLQConfig>
            </MDBConfig>
          </proxy-factory-config>
        </invoker-proxy-binding>
    

     

    Parameters

    • name
      - Used to identify the configuration

    • invoker-mbean
      - Only used in the mbean name for mdbs

    • proxy-factory
      - The implementation class that invokes the mdb container

    • proxy-factory-config
      - XML passed to the proxy factory

      • JMSProviderAdapterJNDI
        - The jndi name of the jms provider see

        ProviderName

        .

      • ServerSessionPoolJNDI
        - The name of the

        ServerSessionPool

        loader

      • CreateJBossMQDestination
        - Whether the destination should be created within JBossMQ if it is not in jndi (true or false - default true)

      • MinimumSize
        - The minimum number of threads that remain active to invoke on the mdb (default 1)

      • MaxmimumSize
        - The maximum number of threads that invoke on the mdb concurrently, and the number of sessions created at deployment (default 15)

      • KeepAliveMillis
        - The time that threads remain active when they are not used (above the minimum) (default 30 seconds)

      • MaxMessages
        - The number of messages to wait for before attempting delivery of the session, each message is still delivered in a separate transaction (default 1)

      • MDBConfig

        • ReconnectIntervalSec
          - The length of time after a connection error occurs before it attempts to reconnect (default 10 seconds)

        • DeliveryActive
          - Whether the MDB should make the subscription at initial deployment or wait for

          start/stopDelivery

          on the MBean (true or false - default true)

        • DLQConfig
          - Configuration about the DLQ - remove this to disable the DLQ

          • DestinationQueue
            - The DLQ jndi binding (relative the jndi context provided by the

            JMSProviderAdapterJNDI

            above)

          • MaxTimesRedelivered
            - The number of redeliveries before the message is sent to the DLQ

          • TimeToLive
            - The time to live of the message sent to the DLQ (default 0 - don't expire the message)

          • DLQUser
            - The user to use when creating the

            QueueConnection

            to the DLQ

          • DLQPassword
            - The password to use when creating the

            QueueConnection

            to the DLQ

     

     

    Container

     

    The MDB container is basically just a stateless session bean, except that there is no

    proxy bound into jndi. Instead the proxy registers itself as a subscription with JMS.

     

    Example config (see conf/standardjboss.xml)

    
        <container-configuration>
          <container-name>Standard Message Driven Bean</container-name>
          <call-logging>false</call-logging>
          <invoker-proxy-binding-name>message-driven-bean</invoker-proxy-binding-name>
          <container-interceptors>
            <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor</interceptor>
            <interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
            <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptor</interceptor>
            <!-- CMT -->
            <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
            <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor>
            <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
            <!-- BMT -->
            <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
            <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT</interceptor>
            <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor>
            <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
          </container-interceptors>
          <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool</instance-pool>
          <instance-cache></instance-cache>
          <persistence-manager></persistence-manager>
          <container-pool-conf>
            <MaximumSize>100</MaximumSize>
          </container-pool-conf>
        </container-configuration>
    

     

    Parameters

    • See the admin docs for most of this

    • instance-pool
      - The implementation of the pool

    • container-pool-conf
      - Configuration passed to the instance pool

      • MaximumSize
        - The maximum number of instances in the pool, unless the pool is strict, new instances will be created after the maximum is reached but won't be pooled (default 100). To prevent creation of unpooled instances see the strictMaximumSize parameter.

      • strictMaximumSize
        - Boolean flag. Whether the

        MaximumSize

        should be strict upper limit. If there are more than

        MaximumSize

        concurrent threads, the excess will block until an instance is free or

        strictTimeout

        is reached.

      • strictTimeout
        - The length of time in milli-seconds to wait for an instance to become available (returned to the pool) before an exception is thrown (default "forever")

     

    General Pooling Notes

     

    In most use cases (common configurations) the delivery server session pool (15 concurrent strictly pooled sessions/threads) throttles the MDB pool (100 instances non strictly pooled) making it irrelevant.

     

    Deployment

     

    The deployment is configured in two files.

    • META-INF/ejb-jar.xml

    • META-INF/jboss.xml

     

    Example

    ejb-jar.xml

    <?xml version="1.0"?>
    
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
    
    <ejb-jar>
       <enterprise-beans>
          <message-driven>
             <ejb-name>DurableTopicBean</ejb-name>
             <ejb-class>org.jboss.test.mdb.bean.TopicBean</ejb-class>
             <message-selector>JMSType='activityCompletion'</message-selector>
             <transaction-type>Container</transaction-type>
             <message-driven-destination>
                <destination-type>javax.jms.Topic</destination-type>
                <subscription-durability>Durable</subscription-durability>
             </message-driven-destination>
          </message-driven>
       </enterprise-beans>
       <assembly-descriptor>
          <container-transaction>
             <method>
                <ejb-name>DurableTopicBean</ejb-name>
                <method-name>onMessage</method-name>
             </method>
             <!-- May also be NotSupported -->
             <trans-attribute>Required</trans-attribute>
          </container-transaction>
       </assembly-descriptor>
    </ejb-jar>
    

    jboss.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss PUBLIC
          "-//JBoss//DTD JBOSS 4.0//EN"
          "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
    <jboss>
       <enterprise-beans>
          <message-driven>
             <ejb-name>DurableTopicBean</ejb-name>
             <configuration-name>Standard Message Driven Bean</configuration-name>
             <destination-jndi-name>topic/testDurableTopic</destination-jndi-name>
             <mdb-user>john</mdb-user>
             <mdb-passwd>needle</mdb-passwd>
             <mdb-subscription-id>DurableSubscriberExample</mdb-subscription-id>
          </message-driven>
       </enterprise-beans>
    </jboss>
    

     

    Parameters in jboss.xml jboss/enterprise-beans/message-driven

     

    • See the ejb spec and admin docs for most of this

    • activation-config
      - override of the activation-config from ejb-jar.xml

    • destination-jndi-name
      - the jndi binding of the destination relative to the

      JMSProviderAdapterJNDI

       

    • local-jndi-name
      - just used to control the MBean name of the MDB

    • mdb-user
      - the user id passed to

      createConnection

       

    • mdb-passwd
      - the password passed to

      createConnection

       

    • mdb-client-id
      - the client id passed to the connection (especially important for durable subcriptions that are not pre-configured)

    • mdb-subscription-id
      - the subscription name for durable subscriptions