5 Replies Latest reply on Feb 22, 2017 11:25 AM by Justin Bertram

    eap 7 MDB error upon startup

    Steve Warsa Newbie

      After implementing a working QueueConnectionFactory and Queue in a resource adapter, I'm now trying to get my MDB working to listen for asynchronous messages on a Topic.  I have this working in WebSphere, this is just porting over to JBoss EAP7.  I have an MDB class created by the wizard in JBoss Developer studio with the following annotations:

       

      @MessageDriven(

        activationConfig = {

        @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/XxxxxxxTopic"),

        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),

        @ActivationConfigProperty(propertyName = "clientID", propertyValue = "XXXXXXXXX"),

        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),

        @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "responderProcessId = 'XXXX'")

        },

        mappedName = "XxxxxxxTopic"

      )

      @TransactionManagement(TransactionManagementType.BEAN)

      public class XXXXXXXXXXXXX implements MessageListener {

       

      Then I have the following resource adapter configuration in the standalone.xml:

       

              <subsystem xmlns="urn:jboss:domain:resource-adapters:4.0">

                  <resource-adapters>

                      <resource-adapter id="webmjmsrarar">

                          <module slot="main" id="com.softwareag.webMethods.broker"/>

                          <config-property name="JndiProperties">

                              java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxxxxxx:nnn

                          </config-property>

                          <connection-definitions>

                              <connection-definition class-name="com.sun.genericra.outbound.ManagedTopicConnectionFactory" jndi-name="java:/XXXXXXXX" pool-name="XXXXXXXXXXX">

                                  <config-property name="ProviderIntegrationMode">

                                      jndi

                                  </config-property>

                                  <config-property name="ConnectionFactoryJndiName">

                                      cn=XXXXXXXXXXXXXXou=xxxxxxx,ou=xxxxxxxx,ou=xxxxx,dc=xxxxx,dc=xxx

                                  </config-property>

                                  <config-property name="UserName">

                                      cn=xxxxxx,ou=xxxxxxx,ou=xxxxxx,dc=xxxxxx,dc=xxxx

                                  </config-property>

                                  <config-property name="JndiProperties">

                                      java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxxxxxxxxx:nnn

                                  </config-property>

                                  <config-property name="Password">

                                      xxxxxxxxxxx

                                  </config-property>

                                  <pool>

                                      <initial-pool-size>0</initial-pool-size>

                                  </pool>

                              </connection-definition>

                              <connection-definition class-name="com.sun.genericra.outbound.ManagedQueueConnectionFactory" jndi-name="java:/.....

                                  ......

                              </connection-definition>

                          </connection-definitions>

                          <admin-objects>

                              <admin-object class-name="com.sun.genericra.outbound.QueueProxy" jndi-name="java:/jms/.............

                                 .............

                              </admin-object>

                             <admin-object class-name="com.sun.genericra.outbound.TopicProxy" jndi-name="java:/jms/XXXXXXXXXXXXXXTopic" use-java-context="true" pool-name="XXXXXXXXXXXXXXTopic">

                                  <config-property name="DestinationJndiName">

                                      cn=XXXXXXXXXXXXXXTopic,ou=xxxxxxxx,ou=xxxxxxxxxxx,ou=xxxxxxx,dc=xxxxxxxx,dc=xxxx

                                  </config-property>

                              </admin-object>

                          </admin-objects>

                      </resource-adapter>

                  </resource-adapters>

              </subsystem>

              <subsystem xmlns="urn:jboss:domain:ejb3:4.0">

                  <session-bean>

                      <stateless>

                          <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>

                      </stateless>

                      <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>

                      <singleton default-access-timeout="5000"/>

                  </session-bean>

                  <mdb>

                      <resource-adapter-ref resource-adapter-name="webmjmsrarar"/>

                      <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>

                  </mdb>

                  <pools>

                      <bean-instance-pools>

                          <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>

                          <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>

                      </bean-instance-pools>

                  </pools>

                  <caches>

                      <cache name="simple"/>

                      <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>

                  </caches>

                  <passivation-stores>

                      <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>

                  </passivation-stores>

                  <async thread-pool-name="default"/>

                  <timer-service thread-pool-name="default" default-data-store="default-file-store">

                      <data-stores>

                          <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>

                      </data-stores>

                  </timer-service>

                  <remote connector-ref="http-remoting-connector" thread-pool-name="default"/>

                  <thread-pools>

                      <thread-pool name="default">

                          <max-threads count="10"/>

                          <keepalive-time time="100" unit="milliseconds"/>

                      </thread-pool>

                  </thread-pools>

                  <default-security-domain value="other"/>

                  <default-missing-method-permissions-deny-access value="true"/>

                  <log-system-exceptions value="true"/>

              </subsystem>

       

      Then, additionally, I have the following jboss-ejb3.xml:

       

      <jboss xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:jee="http://java.sun.com/xml/ns/javaee"

        xmlns:mdb="urn:resource-adapter-binding">

        <jee:assembly-descriptor>

        <mdb:resource-adapter-binding>

        <jee:ejb-name>xxxxxxxxxxxx</jee:ejb-name>

        <mdb:resource-adapter-name>webmjmsrarar</mdb:resource-adapter-name>

        </mdb:resource-adapter-binding>

        </jee:assembly-descriptor>

      </jboss>

       

      With all this configuration, I'm getting the following errors upon server startup:

       

      14:22:41,042 WARN  [org.jboss.as.ejb3] (MSC service thread 1-7) WFLYEJB0006: ActivationConfigProperty destination will be ignored since it is not allowed by resource adapter: webmjmsrarar

      14:22:41,062 INFO  [org.jboss.as.ejb3] (MSC service thread 1-7) WFLYEJB0042: Started message driven bean 'XXXXXXXXXX' with 'webmjmsrarar' resource adapter

      2017-02-17 14:52:08,247 FINE  [com.sun.genericjmsra] (ServerService Thread Pool -- 58) com.sun.genericra.inbound.ActivationSpec@4ee37470{ConnectionFactoryClassName = com.webmethods.jms.impl.WmConnectionFactoryImpl},{QueueConnectionFactoryClassName = com.webmethods.jms.impl.WmQueueConnectionFactoryImpl},{TopicConnectionFactoryClassName = com.webmethods.jms.impl.WmTopicConnectionFactoryImpl},{XAConnectionFactoryClassName = null},{XAQueueConnectionFactoryClassName = null},{XATopicConnectionFactoryClassName = null},{QueueClassName = com.webmethods.jms.impl.WmQueueImpl},{TopicClassName = com.webmethods.jms.impl.WmTopicImpl},{UnifiedDestinationClassName = null},{ConnectionFactoryProperties = null},{JndiProperties = java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxx:nnnn},{ProviderIntegrationMode = jndi},{CommonSetterMethodName = null},{SupportsXA = false},{ForceDelayedTxn = true},{DeliveryType = null},{RedeliveryInterval = 0},{RedeliveryAttempts = 0},{ClientID = XXXXXXXXXX},{MessageSelector = responderProcessId = 'XXXXXX'},{SubscriptionDurability = Durable},{ConnectionFactoryJNDIName = null},{SubscriptionName = null},{DestinationJNDIName = null},{DestinationType = javax.jms.Topic},{DeadMessageDestinationType = javax.jms.Destination},{MaxPoolSize = 8},{DestinationProperties = null},{DeadMessageDestinationJndiName = null},{DeadMessageConnectionFactoryJndiName = null},{DeadMessageConnectionFactoryProperties = null},{DeadMessageDestinationClassName = null},{DeadMessageDestinationProperties = null},{SendBadMessagesToDMD = false},{EndpointReleaseTimeOut = 180},{InstanceCount = 1},{LoadBalancingRequired = true},{Instance ID = 0},{CustomLoadBalancingMessageSelector = },{ShareClientID = false}{DeliveryType = null}

       

      2017-02-17 14:52:08,250 FINE  [com.sun.genericjmsra] (ServerService Thread Pool -- 58) com.sun.genericra.inbound.ActivationSpec@4ee37470{ConnectionFactoryClassName = com.webmethods.jms.impl.WmConnectionFactoryImpl},{QueueConnectionFactoryClassName = com.webmethods.jms.impl.WmQueueConnectionFactoryImpl},{TopicConnectionFactoryClassName = com.webmethods.jms.impl.WmTopicConnectionFactoryImpl},{XAConnectionFactoryClassName = null},{XAQueueConnectionFactoryClassName = null},{XATopicConnectionFactoryClassName = null},{QueueClassName = com.webmethods.jms.impl.WmQueueImpl},{TopicClassName = com.webmethods.jms.impl.WmTopicImpl},{UnifiedDestinationClassName = null},{ConnectionFactoryProperties = null},{JndiProperties = java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxxxxxxxx:nnn},{ProviderIntegrationMode = jndi},{CommonSetterMethodName = null},{SupportsXA = false},{ForceDelayedTxn = true},{DeliveryType = null},{RedeliveryInterval = 0},{RedeliveryAttempts = 0},{ClientID = XXXXXXXXXXXXXXXXX},{MessageSelector = responderProcessId = 'XXXXX'},{SubscriptionDurability = Durable},{ConnectionFactoryJNDIName = null},{SubscriptionName = null},{DestinationJNDIName = null},{DestinationType = javax.jms.Topic},{DeadMessageDestinationType = javax.jms.Destination},{MaxPoolSize = 8},{DestinationProperties = null},{DeadMessageDestinationJndiName = null},{DeadMessageConnectionFactoryJndiName = null},{DeadMessageConnectionFactoryProperties = null},{DeadMessageDestinationClassName = null},{DeadMessageDestinationProperties = null},{SendBadMessagesToDMD = false},{EndpointReleaseTimeOut = 180},{InstanceCount = 1},{LoadBalancingRequired = true},{Instance ID = 0},{CustomLoadBalancingMessageSelector = },{ShareClientID = false}{DeliveryType = null}

      2017-02-17 14:52:08,250 INFO  [stdout] (ServerService Thread Pool -- 58) com.sun.genericjmsra Enter validate

       

      2017-02-17 14:52:08,250 FINE  [com.sun.genericjmsra] (ServerService Thread Pool -- 58) parseToProperties:java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxxxxx:nnnnn delimited:, seperator:=

       

       

      14:22:41,070 INFO  [stdout] (ServerService Thread Pool -- 62) com.sun.genericjmsra Enter validate

       

      14:22:41,071 INFO  [stdout] (ServerService Thread Pool -- 62) com.sun.genericjmsra getConnectionFactoryJndiName=null

       

      14:22:41,088 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 62) MSC000001: Failed to start service jboss.deployment.subunit."XXXXXXXXXXX.ear"."XXXXXXXXXMDB.jar".componentXXXXXXXXX.START: org.jboss.msc.service.StartException in service jboss.deployment.subunit."XXXXXXXXXXX.ear"."XXXXXXXXXXMDB.jar".component.XXXXXXXXXX.START: java.lang.RuntimeException: javax.resource.spi.InvalidPropertyException

        at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57)

        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

        at java.lang.Thread.run(Thread.java:745)

        at org.jboss.threads.JBossThread.run(JBossThread.java:320)

      Caused by: java.lang.RuntimeException: javax.resource.spi.InvalidPropertyException

        at org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.activate(MessageDrivenComponent.java:268)

        at org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.start(MessageDrivenComponent.java:233)

        at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)

        ... 6 more

      Caused by: javax.resource.spi.InvalidPropertyException

        at com.sun.genericra.util.ExceptionUtils.newInvalidPropertyException(ExceptionUtils.java:42)

        at com.sun.genericra.util.ObjectBuilderFactory$JndiObjectBuilder.createObject(ObjectBuilderFactory.java:99)

        at com.sun.genericra.util.ObjectBuilder.build(ObjectBuilder.java:99)

        at com.sun.genericra.inbound.AbstractConsumer.initializeAdministeredObjects(AbstractConsumer.java:91)

        at com.sun.genericra.inbound.AbstractConsumer.<init>(AbstractConsumer.java:56)

        at com.sun.genericra.inbound.async.EndpointConsumer.<init>(EndpointConsumer.java:57)

        at com.sun.genericra.inbound.EndpointConsumerFactory.createEndpointConsumer(EndpointConsumerFactory.java:38)

        at com.sun.genericra.GenericJMSRA.endpointActivation(GenericJMSRA.java:215)

        at org.jboss.jca.core.rar.EndpointImpl.activate(EndpointImpl.java:194)

        at org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponent.activate(MessageDrivenComponent.java:266)

        ... 8 more

      Caused by: java.lang.NullPointerException

        at org.jboss.as.naming.InitialContext.getURLScheme(InitialContext.java:160)

        at org.jboss.as.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:128)

        at javax.naming.InitialContext.lookup(InitialContext.java:417)

        at javax.naming.InitialContext.lookup(InitialContext.java:417)

        at com.sun.genericra.util.ObjectBuilderFactory$JndiObjectBuilder.createObject(ObjectBuilderFactory.java:97)

        ... 16 more

       

      Any clue what I have configured wrong?

       

      Thanks,

      Steve

        • 1. Re: eap 7 MDB error upon startup
          Justin Bertram Master

          You're asking about Sun's generic JMS JCA RA on a JBoss forum.  I recommend you pose your question to the community that supports the RA that you're using.  It appears they use mailing lists - https://java.net/projects/genericjmsra/lists.

           

          If you were using the Generic JMS JCA Resource Adapter for JBoss AS that I recommended to your in another thread then the situation would be different.

          • 2. Re: eap 7 MDB error upon startup
            Steve Warsa Newbie

            Unfortunately, the Generic JMS JCA Resource Adapter for JBoss AS that you recommended in the other thread did not work for me.  I'm sure you're curious why it didn't work, but I can't remember and did not keep good notes.  This forced me to go back to using the adapter provided by webMethods which includes the Sun jars.

            • 3. Re: eap 7 MDB error upon startup
              Justin Bertram Master

              I could help you get the Generic JMS JCA Resource Adapter for JBoss AS working, but I'm not familiar enough with Sun's RAR to provide reliable guidance.  Interestingly, both resource adapters take a similar approach so if one works I'd expect the other to work as well.

              • 4. Re: eap 7 MDB error upon startup
                Steve Warsa Newbie

                I was finally able to get this to work.  The approach I took was to debug the app and put a java exception breakpoint in JBoss developer studio for NullPointerException.  Then, when the breakpoint stopped, I inspected the 'ActivationSpec' object and looked for all the fields that were null.  I tried to find out which fields I could populate to eliminate the null pointer.  I ended up having the following in my jboss-ejb3.xml:

                 

                <activation-config>
                <activation-config-property>
                <activation-config-property-name>destinationJndiName</activation-config-property-name>
                <activation-config-property-value>cn=XXXXXXXXXXXXX,ou=xxxxxxx,ou=xxxxxxx,ou=xxxx,dc=xxxxxx,dc=xxxxxx</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>providerIntegrationMode</activation-config-property-name>
                <activation-config-property-value>jndi</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>jndiProperties</activation-config-property-name>
                <activation-config-property-value>java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory,java.naming.provider.url=ldap://xxxxxxxxxxxxx:nnn</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>connectionFactoryJndiName</activation-config-property-name>
                <activation-config-property-value>cn=XXXXXXXXXXXXXX,ou=xxxxxxxxxx,ou=xxxxxxxxx,ou=xxxxxx,dc=xxxxxx,dc=xxx</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>destinationType</activation-config-property-name>
                <activation-config-property-value>javax.jms.Topic</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>subscriptionDurability</activation-config-property-name>
                <activation-config-property-value>Durable</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>subscriptionName</activation-config-property-name>
                <activation-config-property-value>XXXXXXXXXXXXXXX</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>topicClassName</activation-config-property-name>
                <activation-config-property-value>com.webmethods.jms.impl.WmTopicImpl</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                <activation-config-property-name>messageSelector</activation-config-property-name>
                <activation-config-property-value>responderProcessId = 'XXXXXX'</activation-config-property-value>
                </activation-config-property>
                </activation-config>

                 

                Once I did that, the nullpointer went away revealing a number of other errors:

                1. I was passing in the userName and password, which was LDAP, on the connection to the Topic - so once I stopped doing that, then...
                2. I got "clientID is already set" so I removed that, then...
                3. I got [BRM.10.1201] JMS: Subscription name is null, so I passed in the name of the topic which resolve that

                 

                After all that, I was finally able to consume a message from that Topic! Now, I'm on to other errors.

                • 5. Re: eap 7 MDB error upon startup
                  Justin Bertram Master

                  If you're interested, you should be able to use this equivalent configuration with the Generic JMS JCA Resource Adapter for JBoss AS:

                   

                  <activation-config>
                    <activation-config-property>
                        <activation-config-property-name>destination</activation-config-property-name>
                        <activation-config-property-value>cn=XXXXXXXXXXXXX,ou=xxxxxxx,ou=xxxxxxx,ou=xxxx,dc=xxxxxx,dc=xxxxxx</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>jndiParameters</activation-config-property-name>
                        <activation-config-property-value>java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory;java.naming.provider.url=ldap://xxxxxxxxxxxxx:nnn</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>connectionFactory</activation-config-property-name>
                        <activation-config-property-value>cn=XXXXXXXXXXXXXX,ou=xxxxxxxxxx,ou=xxxxxxxxx,ou=xxxxxx,dc=xxxxxx,dc=xxx</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>destinationType</activation-config-property-name>
                        <activation-config-property-value>javax.jms.Topic</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>subscriptionDurability</activation-config-property-name>
                        <activation-config-property-value>Durable</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>subscriptionName</activation-config-property-name>
                        <activation-config-property-value>XXXXXXXXXXXXXXX</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>messageSelector</activation-config-property-name>
                        <activation-config-property-value>responderProcessId = 'XXXXXX'</activation-config-property-value>
                    </activation-config-property>
                  </activation-config>