3 Replies Latest reply on Jan 9, 2005 9:44 PM by nandipinto

    JMS, MDB in JBoss 4.0.0

    nandipinto

      Hi all, sorry if someone already posted the same thing, I've search the whole forums though.

      I'm using JBoss 4.0.0 with JDK 1.5 on Windows 2000 Professional.

      When trying to use JMS/MDB I keep getting this error message:

      2005-01-07 16:56:43,872 WARN [org.jboss.ejb.plugins.jms.JMSContainerInvoker] JMS provider failure detected:
      javax.jms.JMSException: Error creating the dlq connection: XAConnectionFactory not bound
      at org.jboss.ejb.plugins.jms.DLQHandler.createService(DLQHandler.java:166)
      .......


      I've configured the jms-ds.xml like this:

      <?xml version="1.0" encoding="UTF-8"?>

      <connection-factories>

      <!-- ==================================================================== -->
      <!-- JMS Stuff -->
      <!-- ==================================================================== -->

      <!-- The JMS provider loader -->

      DefaultJMSProvider
      org.jboss.jms.jndi.JNDIProviderAdapter
      <!-- The combined connection factory -->
      java:/XAConnectionFactory
      <!-- The queue connection factory -->
      XAConnectionFactory
      <!-- The topic factory -->
      XAConnectionFactory
      <!-- Access JMS via HAJNDI -->

      java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
      java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
      java.naming.provider.url=10.1.0.86:1099



      <!-- The server session pool for Message Driven Beans -->

      <depends optional-attribute-name="XidFactory">jboss:service=XidFactory
      StdJMSPool

      org.jboss.jms.asf.StdServerSessionPoolFactory



      <!-- JMS XA Resource adapter, use this to get transacted JMS in beans -->
      <tx-connection-factory>
      <jndi-name>JmsXA</jndi-name>
      <xa-transaction/>
      <rar-name>jms-ra.rar</rar-name>
      <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
      <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property>
      <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
      <max-pool-size>20</max-pool-size>
      <security-domain-and-application>JmsXARealm</security-domain-and-application>
      </tx-connection-factory>

      </connection-factories>


      and my ejb-jar.xml looks like this:

      <ejb-jar>
      <enterprise-beans>
      <message-driven>
      <ejb-name>MyMessageSenderMDB</ejb-name>
      <ejb-class>mymdb.MyMessageSenderMDB</ejb-class>
      <transaction-type>Container</transaction-type>
      <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
      <message-driven-destination>
      <destination-type>javax.jms.Queue</destination-type>
      <subscription-durability>Durable</subscription-durability>
      </message-driven-destination>

      <resource-ref>
      <res-ref-name>java:/XAConnectionFactory</res-ref-name>
      <res-type>javax.jms.QueueConnectionFactory</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Unshareable</res-sharing-scope>
      </resource-ref>
      <resource-env-ref>
      <resource-env-ref-name>queue/MyMessageSenderQueue</resource-env-ref-name>
      <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
      </resource-env-ref>
      </message-driven>
      </enterprise-beans>

      <assembly-descriptor>
      <container-transaction>

      <ejb-name>MyMessageSenderMDB</ejb-name>
      <method-name>onMessage</method-name>
      <method-params>
      <method-param>javax.jms.Message</method-param>
      </method-params>

      <trans-attribute>Required</trans-attribute>
      </container-transaction>
      </assembly-descriptor>

      </ejb-jar>


      My jboss.xml looks like this:


      <enterprise-beans>
      <message-driven>
      <ejb-name>MyMessageSenderMDB</ejb-name>
      <destination-jndi-name>queue/MyMessageSenderQueue</destination-jndi-name>
      <resource-ref>
      <res-ref-name>java:/XAConnectionFactory</res-ref-name>
      <jndi-name>java:/DefaultJMSProvider</jndi-name>
      </resource-ref>
      <resource-env-ref>
      <resource-env-ref-name>queue/MyMessageSenderQueue</resource-env-ref-name>
      <jndi-name>queue/MyMessageSenderQueue</jndi-name>
      </resource-env-ref>
      </message-driven>


      And when i'm running my test program to send a message to the Queue I got this error message:

      javax.naming.NameNotFoundException: XAConnectionFactory not bound
      at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)
      at org.jnp.server.NamingServer.getBinding(NamingServer.java:503)
      at org.jnp.server.NamingServer.getObject(NamingServer.java:509)
      at org.jnp.server.NamingServer.lookup(NamingServer.java:282)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:529)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:508)
      at javax.naming.InitialContext.lookup(InitialContext.java:351)
      ......




      I'm wondering what's wrong with my setup.

      Could anyone please help me on this :(


      rgds,


      nandipinto