[jboss-user] [JBoss Messaging] - JmsXA vs XAConnectionfactory and durable topic subscription

mclu do-not-reply at jboss.com
Thu Dec 14 08:25:23 EST 2006


Hi out there!

I have problems using jmsxa on a durable topic subscription.

I am using:
JBoss 4.0.5
JBoss Messaging 1.0.1 GA
JBoss EJB3 RC9

What I need:
Inside the Container I have a Topic where messages comes in.
Via a EJB3 Service Pojo I instantiate Objects with its own thread which register themselves as listener via  createDurableSubscriber.
These Handlers get a message, process them somehow and put the result in an outgoing queue on the same server.
In other words. I want to dynamically register topic listeners. There is one Listener for each remote attached server which reads its data from that outgoing queue.
The attached Servers are stored in a database so I can read the DB and create as many subscribers as I need.

All works fine with 
ic.lookup("java:/XAConnectionFactory");

But I what to use the Container Transaction to be sure everything is rolled back if something went wrong from the topic to the queue. I mean, the storing to the queue must be rolled back and the receiving from the queue should be retried.
So I changed it to 
ic.lookup("java:/JmsXA");

But with JmsXA I receive an error when I try to set the client ID like:

  | ERROR [NodeBasedRemoteSynchronizer] Failed to create connection and session
  | javax.jms.IllegalStateException: This method is not applicable inside the application server. See the J2EE spec, e.g. J2EE1.4 Section 6.6
  | 	at org.jboss.resource.adapter.jms.JmsSessionFactoryImpl.setClientID(JmsSessionFactoryImpl.java:201)
  | 	at com.XXXXX.NodeBasedRemoteSynchronizer.run(NodeBasedRemoteSynchronizer.java:130)

removing the set clientID method results in an other error:

Failed to create connection and session
  | javax.jms.JMSException: Cannot create durable subscriber without a valid client ID
  | 	at org.jboss.jms.server.endpoint.ServerSessionEndpoint.createConsumerDelegate(ServerSessionEndpoint.java:179)
  | 	at org.jboss.jms.server.endpoint.advised.SessionAdvised.org$jboss$jms$server$endpoint$advised$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)
  | 	at org.jboss.jms.server.container.SecurityAspect.handleCreateConsumerDelegate(SecurityAspect.java:116)
  | 	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.advice.PerInstanceAdvice.invoke(PerInstanceAdvice.java:130)
  | 	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  | 	at org.jboss.jms.server.container.ServerLogInterceptor.invoke(ServerLogInterceptor.java:105)
  | 	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:1008)
  | 	at org.jboss.remoting.transport.local.LocalClientInvoker.invoke(LocalClientInvoker.java:98)
  | 	at org.jboss.remoting.Client.invoke(Client.java:589)
  | 	at org.jboss.remoting.Client.invoke(Client.java:581)
  | 	at org.jboss.jms.client.delegate.DelegateSupport.invoke(DelegateSupport.java:111)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.container.StateCreationAspect.handleCreateConsumerDelegate(StateCreationAspect.java:122)
  | 	at org.jboss.aop.advice.org.jboss.jms.client.container.StateCreationAspect20.invoke(StateCreationAspect20.java)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.container.ConsumerAspect.handleCreateConsumerDelegate(ConsumerAspect.java:69)
  | 	at org.jboss.aop.advice.org.jboss.jms.client.container.ConsumerAspect19.invoke(ConsumerAspect19.java)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:182)
  | 	at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:117)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.container.ExceptionInterceptor.invoke(ExceptionInterceptor.java:69)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.container.ClientLogInterceptor.invoke(ClientLogInterceptor.java:107)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate$createConsumerDelegate_6311124154581125663.invokeNext(ClientSessionDelegate$createConsumerDelegate_6311124154581125663.java)
  | 	at org.jboss.jms.client.delegate.ClientSessionDelegate.createConsumerDelegate(ClientSessionDelegate.java)
  | 	at org.jboss.jms.client.JBossSession.createDurableSubscriber(JBossSession.java:307)
  | 	at org.jboss.resource.adapter.jms.JmsSession.createDurableSubscriber(JmsSession.java:314)
  | 	at com.XXXXX.NodeBasedRemoteSynchronizer.run(NodeBasedRemoteSynchronizer.java:134)


What is the right way to handle this?
It this a Bug?

THX

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

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



More information about the jboss-user mailing list