Getting javax.jms.InvalidClientIDException when using 1.0.1.
sathish_06 Feb 20, 2007 10:05 AMHi,
Iam trying to use the Jboss Messaging System-1.0.1.SP4, which got released recently, but its throwing exception message "javax.jms.InvalidClientIDException: Client ID 'defaultclient' already used by ConnectionEndpoint[-2147483632]"
Here is the configuration settings related to client ID in the persistence DB(oracle):
SELECT * FROM jms_user; USERID PASSWD CLIENTID mqm mqm defaultclient guest guest testclient
Note: We don't user user id - guest(client id - 'testclient'). We only uses userid - mqm.
And, we configured multiple destination(Topics) with single role/userid(mqm) in the destinations-service.xml file as shown below,
c:\jboss-4.0.4.GA\server\messaging\deploy\jboss-messaging.sar\destinations-service.xml <?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=HelloWorldTopic" xmbean-dd="xmdesc/Topic-xmbean.xml"> <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends> <attribute name="JNDIName">HelloWorldTopic</attribute> <attribute name="SecurityConfig"> <security> <role name="mqm" read="true" write="true" create="true"/> </security> </attribute> </mbean> <mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=UserDrivenCategorizationTopic" xmbean-dd="xmdesc/Topic-xmbean.xml"> <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends> <attribute name="JNDIName">UserDrivenCategorizationTopic</attribute> <attribute name="SecurityConfig"> <security> <role name="mqm" read="true" write="true" create="true"/> </security> </attribute> </mbean> <mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=TransactionCategorisationTopic" xmbean-dd="xmdesc/Topic-xmbean.xml"> <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends> <attribute name="JNDIName">TransactionCategorisationTopic</attribute> <attribute name="SecurityConfig"> <security> <role name="mqm" read="true" write="true" create="true"/> </security> </attribute> </mbean> ........................ ........................ </server>
When we start JBoss Messaging system with the above configuration, it throwing below exception message:-
02:08:31,248 INFO [JMSContainerInvoker] Waiting for reconnect internal 10000ms for TransactionCategorisationMDB 02:08:31,279 ERROR [ExceptionUtil] org.jboss.jms.server.endpoint.ServerConnectionFactoryEndpoint@b4dcd9 createConnectionDelega te [5c4o5s4p-gy8nr8-eyddak01-1-eyddfey7-1n] javax.jms.InvalidClientIDException: Client ID 'defaultclient' already used by ConnectionEndpoint[-2147483632] at org.jboss.jms.server.ServerPeer.checkClientID(ServerPeer.java:651) at org.jboss.jms.server.endpoint.ServerConnectionFactoryEndpoint.createConnectionDelegate(ServerConnectionFactoryEndpo int.java:129) at org.jboss.jms.server.endpoint.advised.ConnectionFactoryAdvised.org$jboss$jms$server$endpoint$advised$ConnectionFact oryAdvised$createConnectionDelegate$aop(ConnectionFactoryAdvised.java:64) 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) at org.jboss.jms.server.container.InjectionAspect.handleCreateConnectionDelegate(InjectionAspect.java:69) at org.jboss.aop.advice.org.jboss.jms.server.container.InjectionAspect0.invoke(InjectionAspect0.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aop.Advisor.dynamicInvoke(Advisor.java:723) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:101) at org.jboss.jms.server.remoting.JMSServerInvocationHandler.invoke(JMSServerInvocationHandler.java:127) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:715) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:552) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:377) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:159) 02:08:31,279 ERROR [ServerThread] SocketServerInvoker[0.0.0.0:4457].invoke() call failed: Client ID 'perusworld' already used by ConnectionEndpoint[-2147483632] 02:08:31,295 WARN [JMSContainerInvoker] JMS provider failure detected for DataPointManagementMDB javax.jms.InvalidClientIDException: Client ID 'defaultclient' already used by ConnectionEndpoint[-2147483632] at org.jboss.jms.server.ServerPeer.checkClientID(ServerPeer.java:651) at org.jboss.jms.server.endpoint.ServerConnectionFactoryEndpoint.createConnectionDelegate(ServerConnectionFactoryEndpo int.java:129) at org.jboss.jms.server.endpoint.advised.ConnectionFactoryAdvised.org$jboss$jms$server$endpoint$advised$ConnectionFact oryAdvised$createConnectionDelegate$aop(ConnectionFactoryAdvised.java:64) 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) at org.jboss.jms.server.container.InjectionAspect.handleCreateConnectionDelegate(InjectionAspect.java:69) at org.jboss.aop.advice.org.jboss.jms.server.container.InjectionAspect0.invoke(InjectionAspect0.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aop.Advisor.dynamicInvoke(Advisor.java:723) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:101
Note: When I use 1.0.1.SP2 version, with the above configuration, not facing this problem.
I just searched this error msg in the jboss site, the url -
http://lists.jboss.org/pipermail/jboss-cvs-commits/2007-February/021585.html , says that there is a fix made in 1.0.1.SP4, which avoids multiple Client IDs( as per JMS 1.1 spec).
Here is the snippet of the msg, mentioned in the above web url,
In ServerConnectionEndpoint.java file " + // verify the clientID is unique + + // JMS 1.1 Specifications, Section 4.3.2: + // "By definition, the client state identified by a client identifier can be ?in use? by + // only one client at a time. A JMS provider must prevent concurrently executing clients + // from using it." "
Iam not sure how we need to define the client ids/role. Can some one explan on this.
Do I need to define separate role(username, passwd and client id) for each destinations(Topics) as,
USERID PASSWD CLIENTID mqm1 mqm1 defaultclient1 mqm2 mqm2 defaultclient2 mqm3 mqm3 defaultclient3 mqm4 mqm4 defaultclient4
and map them in destinations-service.xml as ,
<mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=Topic1" xmbean-dd="xmdesc/Topic-xmbean.xml"> ........ <attribute name="SecurityConfig"> <security> <role name="mqm1" read="true" write="true" create="true"/> </security> </attribute> </mbean> <mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=Topic2" xmbean-dd="xmdesc/Topic-xmbean.xml"> ........ <attribute name="SecurityConfig"> <security> <role name="mqm2" read="true" write="true" create="true"/> </security> </attribute> </mbean> mbean code="org.jboss.jms.server.destination.Topic" name="jboss.messaging.destination:service=Topic,name=Topic3" xmbean-dd="xmdesc/Topic-xmbean.xml"> ........ <attribute name="SecurityConfig"> <security> <role name="mqm3" read="true" write="true" create="true"/> </security> </attribute> </mbean>
Is my understanding correct ?
Please help me in defining the client ids correctly to use 1.0.1.SP4.
Thx, Sathish