Jboss EAP 5.1 - MDB Integration with IBM Websphere MQ - Too Few Concurrent Messages Processed
I played around with a lot of Jboss options, but I was unable to get my MDB to handle more than 10 concurrent messages at a time. This doesn't suit my needs - I need a lot more parallel message processing. I have completely run out of ideas. Anyone have any suggestions?
My MDB (if everything is defined as domain aspect but moved):
@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 {
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 changed 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 standard jboss.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>
+3
source to share