[jboss-user] [EJB 3.0] - Not able to create durable subscription in MDB

alllle do-not-reply at jboss.com
Tue Jan 30 19:03:48 EST 2007


I am using JBoss 4.04GA SP2 and JBoss Messaging 1.0.2SP2.

I want to create a MDB in EJB3 that creates durable subscription to a topic. Since the topic requires a valid user/pass, EJB3 annotation along was not sufficient. I therefore, created the ejb-jar.xml and jboss.xml file that are packaged with my Jar file, which is deployed inside an EAR.

I got the following error when deploying the EAR:

  | 17:48:46,234 WARN  mdb.MDB - JMS provider failure detected:
  | javax.jms.JMSException: Cannot create durable subscriber without a valid client ID
  |         at org.jboss.jms.server.endpoint.ServerSessionEndpoint.createConsumerDelegate(ServerSessionE
  | ndpoint.java:190)
  |         at org.jboss.jms.server.endpoint.advised.SessionAdvised.org$jboss$jms$server$endpoint$advise
  | d$SessionAdvised$createConsumerDelegate$aop(SessionAdvised.java:90)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
  | 

But I have already put in the client id as well as the subscription id in the jboss.xml file. Here is the content:
<?xml version="1.0" encoding="UTF-8"?>
  | <!DOCTYPE jboss PUBLIC
  |       "-//JBoss//DTD JBOSS 4.0//EN"
  |       "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
  | <jboss>
  |     <enterprise-beans>
  |         <message-driven>
  |             <ejb-name>notificationMDB</ejb-name>
  |             <destination-jndi-name>topic/Update</destination-jndi-name>
  |             <mdb-user>user</mdb-user>
  |             <mdb-passwd>pass</mdb-passwd>
  |             <mdb-client-id>MyDurableSub</mdb-client-id>
  |             <mdb-subscription-id>mdb</mdb-subscription-id>
  |             <configuration-name>Standard Message Driven Bean</configuration-name>
  |         </message-driven>
  |     </enterprise-beans>
  | </jboss>

And the ejb-jar.xml file:
<?xml version='1.0' encoding='UTF-8' ?>
  | 
  | <ejb-jar>
  |     <enterprise-beans>
  |         <message-driven>
  |             <ejb-name>notificationMDB</ejb-name>
  |             <ejb-class>com.company.ejb.NotificationMDB</ejb-class>
  |             <transaction-type>Container</transaction-type>
  |             <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
  |             <message-driven-destination>
  |                 <destination-type>javax.jms.Topic</destination-type>
  |                 <subscription-durability>Durable</subscription-durability>
  |             </message-driven-destination>
  |         </message-driven>
  |     </enterprise-beans>
  | </ejb-jar>

I've also stripped out all EJB3 annotations from the NotificationMDB class. When debug into the JBoss code, the code where the error was thrown is:
               String clientID = connectionEndpoint.getClientID();
  |                if (clientID == null)
  |                {
  |                   throw new JMSException("Cannot create durable subscriber without a valid client ID");
  |                }
  | 
  |                subscription = cm.getDurableSubscription(clientID, subscriptionName, ms, pm, mm);
  | 
because the clientID is null. Inspecting the stack tree, I saw the mdb-user and mdb-password are read correctly. I don't know where the client-id and subscription-id are stored. The value of the subscriptionName passed into the above method is set to string "subscriptionName".

Can anyone help? Thanks!

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4008571#4008571

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4008571



More information about the jboss-user mailing list