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 configurationinvoker-mbean
- Only used in the mbean name for mdbsproxy-factory
- The implementation class that invokes the mdb containerproxy-factory-config
- XML passed to the proxy factoryJMSProviderAdapterJNDI
- The jndi name of the jms provider seeProviderName
.
ServerSessionPoolJNDI
- The name of theServerSessionPool
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 forstart/stopDelivery
on the MBean (true or false - default true)
DLQConfig
- Configuration about the DLQ - remove this to disable the DLQDestinationQueue
- The DLQ jndi binding (relative the jndi context provided by theJMSProviderAdapterJNDI
above)
MaxTimesRedelivered
- The number of redeliveries before the message is sent to the DLQTimeToLive
- 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 theQueueConnection
to the DLQ
DLQPassword
- The password to use when creating theQueueConnection
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 poolcontainer-pool-conf
- Configuration passed to the instance poolMaximumSize
- 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 theMaximumSize
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.xmldestination-jndi-name
- the jndi binding of the destination relative to theJMSProviderAdapterJNDI
local-jndi-name
- just used to control the MBean name of the MDBmdb-user
- the user id passed tocreateConnection
mdb-passwd
- the password passed tocreateConnection
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
Comments