0 Replies Latest reply on Oct 17, 2014 9:54 PM by thecrispybacon

    Jboss EAP 5.1 - MDB Integration with IBM Websphere MQ

    thecrispybacon

      I 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>