Jboss EAP 5.1 - MDB Integration with IBM Websphere MQ
thecrispybacon Oct 17, 2014 9:54 PMI have been playing with a lot of Jboss parameters but I have been unsuccessful in getting my MDB to process more than 10 concurrent messages at a time. This is not adequate for my needs - I need a lot more concurrent message processing. I've completely run out of ideas. Does anyone have any suggestions?
My MDB (Had everything defined as a aspect domain but moved it):
@MessageDriven(name = "Incoming Task MDB", activationConfig = { @ActivationConfigProperty(propertyName = "messagingType", propertyValue = "javax.jms.MessageListener"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "TaskQueue"), @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false") }) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) @TransactionManagement(value = TransactionManagementType.BEAN) // @AspectDomain("Task Queue MDB") JBOSS Specific annotation to inject the MQ server session at runtime @ResourceAdapter("wmq.jmsra.rar") @org.jboss.ejb3.annotation.DefaultActivationSpecs ({ @javax.ejb.ActivationConfigProperty(propertyName = "channel", propertyValue = "..."), @javax.ejb.ActivationConfigProperty(propertyName = "hostName", propertyValue = "..."), @javax.ejb.ActivationConfigProperty(propertyName = "queueManager", propertyValue = "..."), @javax.ejb.ActivationConfigProperty(propertyName = "port", propertyValue = "1414"), @javax.ejb.ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT"), @javax.ejb.ActivationConfigProperty(propertyName = "pollingInterval", propertyValue = "250"), @javax.ejb.ActivationConfigProperty(propertyName = "rescanInterval", propertyValue = "250"), @ActivationConfigProperty(propertyName="minSession",propertyValue="100"), @ActivationConfigProperty(propertyName="maxSession",propertyValue="100") }) @org.jboss.ejb3.annotation.Pool (value="StrictMaxPool", maxSize=100, timeout=10000) public final class IncomingTaskMDB extends TaskCompletionReportable implements MessageListener {
The wmq.jmsra.rar version:
Specification-Title: J2EE Connector Architecture Specification-Version: 1.5 Implementation-Title: WebSphere MQ Resource Adapter Implementation-Version: 7.0.1.3-k701-103-100812 Implementation-Vendor: IBM Corporation
In my wmq.jmsra.rar - I modified the ra.xml:
<resourceadapter> <resourceadapter-class> com.ibm.mq.connector.ResourceAdapterImpl </resourceadapter-class> <config-property> <config-property-name>connectionConcurrency</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>100</config-property-value> </config-property> <config-property> <config-property-name>maxConnections</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>100</config-property-value> </config-property>
In my ejb3-interceptors-aop.xml:
<domain name="Message Driven Bean" extends="Intercepted Bean" inheritBindings="true"> <bind pointcut="execution(public * *->*(..))"> <interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/> <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/> </bind> <!-- TODO: Authorization? --> <bind pointcut="execution(public * *->*(..))"> <interceptor-ref name="org.jboss.ejb3.tx.CMTTxInterceptorFactory"/> <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/> <interceptor-ref name="org.jboss.ejb3.tx.BMTTxInterceptorFactory"/> <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/> <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/> <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ --> <stack-ref name="EJBInterceptors"/> </bind> <annotation expr="class(*) AND !class(@org.jboss.ejb3.annotation.Pool)"> @org.jboss.ejb3.annotation.Pool (value="StrictMaxPool", maxSize=100, timeout=10000) </annotation>
In 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>false</CreateJBossMQDestination> <!-- WARN: Don't set this to zero until a bug in the pooled executor is fixed --> <MinimumSize>1</MinimumSize> <MaximumSize>100</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>