Generic JMS Tibco configuration in JBoss 6.4 EAP along with HornetQ

1,616 views
Skip to first unread message

Max Domains

unread,
Aug 14, 2015, 12:27:45 PM8/14/15
to Generic JMS JCA Resource Adapter for JBoss AS

Hi,


Our application is using both HornetQ and Tibco for JMS communications. So i have configured Hornet Q as default Gereric JMS resource adapter.

standalone-full.xml has:

<mdb>
                <resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:hornetq-ra}"/>
                <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
 </mdb>

So it is not possible to configure additional mdb as described in https://github.com/jms-ra/generic-jms-ra

<mdb>
        <resource-adapter-ref resource-adapter-name="generic-jms-rar.rar"/>
        <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
    </mdb>
I have followed all other steps as per the link above. standalone-full.xml has :
 <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
            <resource-adapters>
                <resource-adapter id="generic-jms-ra.rar">
                    <module slot="main" id="org.jboss.genericjms"/>
                    <transaction-support>NoTransaction</transaction-support>
                    <connection-definitions>
                        <connection-definition class-name="org.jboss.resource.adapter.jms.JmsManagedConnectionFactory" jndi-name="java:/jms/GenericJmsXA" pool-name="GenericJmsXA">
                            <config-property name="ConnectionFactory">
                                XAQueueConnectionFactory
                            </config-property>
                            <config-property name="JndiParameters">
                                java.naming.security.principal=myDev;java.naming.security.credentials=devMy123;java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;                                        java.naming.factory.url.pkgs=com.tibco.tibjms.naming;                                                                   
                                                                                                                                                                                                                                                                java.naming.provider.url=tcp://localhost:7222
                            </config-property>
                            <security>
                                <application/>
                            </security>
                        </connection-definition>
                    </connection-definitions>
                </resource-adapter>
            </resource-adapters>
        </subsystem>
Configured my MDB with 
@MessageDriven(mappedName = "MyMessageBean" ,messageListenerInterface = MessageListener.class, activationConfig = {
@ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "java:/jms/GenericJmsXA"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/remoteJMS/TestQueue"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) @ResourceAdapter("generic-jms-ra.rar") public class MyMessageBean implements MessageListener
In Jboss i have 2 generic jms modules. 1 is main and another over is provided for Tibco.
But when i run the MDB in JBoss i am getting ClassCast execption.  I have also tried with propertyName = "connectionFactory", propertyValue = "java:global/remoteJMS/GenericJmsXA"  without success.
Could you help me with resolving this error please ?
16:22:21,530 ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 10) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@7a85908e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@33e11b56 destination=java:global/remoteJMS/TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=java:/jms/QueueConnectionFactory): java.lang.ClassCastException: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl cannot be cast to javax.jms.XAConnectionFactory
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupConnection(JmsActivation.java:437) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1] at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupConnection(JmsActivation.java:414) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
online research indicates it could be issue with conflicting tibjms.jar i am not sure though.

Justin Bertram

unread,
Aug 14, 2015, 1:25:33 PM8/14/15
to Generic JMS JCA Resource Adapter for JBoss AS
The configuration you're using is incorrect so you're receiving the expected exception.  You've configured your (inbound) MDB to use a connection factory (i.e. GenericJmsXA) which is only for outbound communication.  You should configure your MDB with the proper JndiParameters and ConnectionFactory to connect directly to the Tibco instance.  See the documentation for an example of this.

Max Domains

unread,
Aug 17, 2015, 7:47:45 AM8/17/15
to Generic JMS JCA Resource Adapter for JBoss AS
Hi Justin,

Thanks for the response. 
I have tried to add jndiParameters as you have suggested. Now getting Name not found error for the queue. But i am able to connect to the queue and put messages from java client program.


@MessageDriven(mappedName = "MyMessageBean" ,messageListenerInterface = MessageListener.class, activationConfig = {
 @ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "QueueConnectionFactory"),
 @ActivationConfigProperty(propertyName = "jndiParameters", propertyValue = "com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.factory.url.pkgs=com.tibco.tibjms.naming;java.naming.provider.url=tcp://localhost:7222;"),
 @ActivationConfigProperty(propertyName = "destination", propertyValue = "TestQueue"),
 @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
 @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
})
@ResourceAdapter("generic-jms-ra.rar")


13:42:12,675 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Tearing down org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@70ce6099 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
13:42:12,675 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Tearing down complete org.jboss.resource.adapter.jms.inflow.JmsActivation@3ac0e8be(spec=org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e endpointFactory=org.jboss.as.ejb3.inflow.JBossMessageEndpointFactory@221d7da3 deliveryActive=true isDeliveryTransacted=true)
13:42:22,676 INFO  [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@70ce6099 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
13:42:22,677 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Setting up org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@70ce6099 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
13:42:22,677 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Using context {java.naming.provider.url=tcp://localhost:7222, java.naming.ldap.version=3, java.naming.factory.url.pkgs=com.tibco.tibjms.naming} for org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@70ce6099 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
13:42:22,677 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Destination type defined as javax.jms.Queue
13:42:22,677 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Retrieving destination TestQueue of type javax.jms.Queue
13:42:22,677 ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@674afa4e(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@70ce6099 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.url.pkgs=com.tibco.tibjms.naming}): javax.naming.NameNotFoundException: TestQueue -- service jboss.naming.context.java.TestQueue
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:104)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:197)
at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:243)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:183)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179)
at javax.naming.InitialContext.lookup(InitialContext.java:417) [rt.jar:1.8.0_45]
at javax.naming.InitialContext.lookup(InitialContext.java:417) [rt.jar:1.8.0_45]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.lookup(JmsActivation.java:562) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java:385) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupActivation(JmsActivation.java:312) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.handleFailure(JmsActivation.java:258) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:545) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:218)
at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)
at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:808)
at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)
at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:828)
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)

Max Domains

unread,
Aug 17, 2015, 9:08:21 AM8/17/15
to Generic JMS JCA Resource Adapter for JBoss AS
Hi Justin,

Found there was a mistake in my jndiParameters. Now corrected it. 
 @ActivationConfigProperty(propertyName = "jndiParameters", propertyValue = "java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.factory.url.pkgs=com.tibco.tibjms.naming;java.naming.provider.url=tcp://localhost:7222;"),

getting again previous error.  java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsFederatedQueueConnectionFactory cannot be cast to javax.jms.XAConnectionFactory

15:02:28,536 INFO  [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@693adb(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@e08dc028 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
15:02:28,536 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Setting up org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@693adb(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@e08dc028 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
15:02:28,537 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Using context {java.naming.ldap.version=3, java.naming.factory.url.pkgs=com.tibco.tibjms.naming, com.tibco.tibjms.naming.server=localhost, com.tibco.tibjms.naming.port=7222, java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory, java.naming.provider.url=tibjmsnaming://localhost:7222} for org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@693adb(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@e08dc028 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory, java.naming.factory.url.pkgs=com.tibco.tibjms.naming})
15:02:28,537 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Destination type defined as javax.jms.Queue
15:02:28,537 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Retrieving destination TestQueue of type javax.jms.Queue
15:02:28,545 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Got destination Queue[TestQueue] from TestQueue
15:02:28,545 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) setup connection org.jboss.resource.adapter.jms.inflow.JmsActivation@6b867a38(spec=org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@693adb endpointFactory=org.jboss.as.ejb3.inflow.JBossMessageEndpointFactory@7b44599b deliveryActive=true destination=Queue[TestQueue] isDeliveryTransacted=true)
15:02:28,546 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Attempting to lookup connection factory QueueConnectionFactory
15:02:28,553 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Got connection factory QueueConnectionFactory[URL=tcp://wi7-lsyas5417:7222;clientID=null] from QueueConnectionFactory
15:02:28,554 DEBUG [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Attempting to create connection with user null
15:02:28,554 ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (default-threads - 11) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@693adb(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@e08dc028 destination=TestQueue destinationType=javax.jms.Queue acknowledgeMode=Auto-acknowledge subscriptionDurability=false reconnectInterval=10 reconnectAttempts=-1 user=null maxMessages=1 minSession=1 maxSession=15 connectionFactory=QueueConnectionFactory jndiParameters={java.naming.provider.url=tcp://localhost:7222, java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory, java.naming.factory.url.pkgs=com.tibco.tibjms.naming}): java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsFederatedQueueConnectionFactory cannot be cast to javax.jms.XAConnectionFactory
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupConnection(JmsActivation.java:437) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupConnection(JmsActivation.java:414) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupActivation(JmsActivation.java:313) [generic-jms-ra-jar-1.0.7.Final-redhat-1.jar:1.0.7.Final-redhat-1]

Justin Bertram

unread,
Aug 17, 2015, 9:08:39 AM8/17/15
to Generic JMS JCA Resource Adapter for JBoss AS
Your jndiParameters look incorrect.  Your first parameter is just "com.tibco.tibjms.naming.TibjmsInitialContextFactory" which is not a name=value pair.  Because of this the normal initial context factory is being used which means it's trying to find the resources in the local JNDI namespace (I can this is happening via the stack trace).  I believe this is what you should be using:

@ActivationConfigProperty(propertyName = "jndiParameters", propertyValue = "java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.factory.url.pkgs=com.tibco.tibjms.naming;java.naming.provider.url=tcp://localhost:7222")

Notice also that I removed the trailing semicolon.

Justin Bertram

unread,
Aug 17, 2015, 9:18:01 AM8/17/15
to Generic JMS JCA Resource Adapter for JBoss AS
The ClassCastException you're getting is pretty straight-forward.  The JCA RA is attempting to cast the connection factory it has been configured to look up to an XA connection factory, but the implementation doesn't support it.  Therefore you need to either change the connection factory you're looking up to one that supports XA or change your MDB to not use transactions.  This is explained in more detail in the documentation.

Max Domains

unread,
Aug 17, 2015, 1:03:21 PM8/17/15
to Generic JMS JCA Resource Adapter for JBoss AS
Wow it works great !!

Thanks Justin !!

Vellingiri Dharmalingam

unread,
Sep 29, 2015, 11:45:17 AM9/29/15
to Generic JMS JCA Resource Adapter for JBoss AS
Hi Max/Justin,
  This is very critical for me , I am migrating for Jboss 5.1 to EAP 6.4.
  I have tried all the possible ways and Justin's input given.
Thanks
Giri

Justin Bertram

unread,
Sep 29, 2015, 11:48:19 AM9/29/15
to Generic JMS JCA Resource Adapter for JBoss AS
I'd recommend you start your own thread rather than hijacking this one.

Also, I don't see your configuration, and a full stack-trace for the exception you're seeing would be really helpful.
Message has been deleted

Giri

unread,
Feb 24, 2016, 3:23:58 AM2/24/16
to Generic JMS JCA Resource Adapter for JBoss AS
Hi ,
  Can some one help me to configure the pooled-connection-factory on EAP 6.4

Jboss 5.1 configuration :
<mbean code="org.jboss.jms.jndi.JMSProviderLoader" name=":service=JMSProviderLoader,name=TibcoEmsProviderLoader">
      <attribute name="ProviderName">jndi/TibcoEmsProvider</attribute>
      <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
      <attribute name="FactoryRef">GenericConnectionFactory</attribute>
      <attribute name="QueueFactoryRef">QueueConnectionFactory</attribute>
      <attribute name="TopicFactoryRef">TopicConnectionFactory</attribute>   
</mbean>

Thanks
Giri

Justin Bertram

unread,
Feb 24, 2016, 10:02:53 AM2/24/16
to Generic JMS JCA Resource Adapter for JBoss AS
The pooled-connection-factory on EAP 6.4 uses the HornetQ JCA resource adapter so you can't use it to connect to Tibco.  If you want to connect to Tibco you'll need to configure the generic JMS JCA RA.  See the documentation for more details on how to do that, including Tibco examples.

Also, if you need additional help please start your own thread rather than hijacking this one.
Reply all
Reply to author
Forward
0 new messages