0

I am trying to test the durable subcription on glassfish 4, but getting an error. The code:

Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
TopicSubscriber subscriber = session.createDurableSubscriber((Topic) context.lookup("jms/Topic"), "testDurableSubName");
subscriber.setMessageListener(this);
con.start();

The error is:

creating a topic subscriber ....
Feb 02, 2014 11:19:38 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 5.0.0.Final
Feb 02, 2014 11:19:38 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter: Version:  5.0  (Build 14-e) Compile:  April 12 2013 0104
Feb 02, 2014 11:19:38 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter starting: broker is REMOTE, connection mode is TCP
Feb 02, 2014 11:19:38 PM com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter Started:REMOTE
javax.jms.IllegalStateException: [C4053]: Invalid client ID - ""
closing jms connection...
    at com.sun.messaging.jmq.jmsclient.UnifiedSessionImpl.checkClientIDWithBroker(UnifiedSessionImpl.java:699)
    at com.sun.messaging.jmq.jmsclient.UnifiedSessionImpl.createDurableSubscriber(UnifiedSessionImpl.java:440)
    at com.sun.messaging.jmq.jmsclient.UnifiedSessionImpl.createDurableSubscriber(UnifiedSessionImpl.java:330)
    at com.sun.messaging.jms.ra.SessionAdapter.createDurableSubscriber(SessionAdapter.java:339)

1 Answers1

2

Forgot to set clientid on connection, e.g. con.setClientID(InetAddress.getLocalHost().getHostName());

Durable subscriber required a connection to have a ClientID set. It can be any unique string such as topic Name + Consumer ID . After making this change it worked.