Hey, I have been trying to figure this out for a few days now and I keep
running into walls. I have a distributed system that uses JMS for
communication, using a centralized router (all running on JBoss with
JBossMQ).
I was able to get everything working using an ExternalContext, to map in the
namespace of the remote router, but that is less than perfect. I started to
change over to the JmsXA adapter, but I am running into some odd problems.
An overly simplified view of the system looks like this, showing three
seperate pyshical machines: web server, manager node and router. The
current architecture assumes a hub-spoke model for using JMS resources, so
that all machines that actually make use of the JMS resources are remote,
there are not MDB's running on the router.
RMI
[ web server ] +-----------+ [ manager node ]
| |
(SessionBean) (MDB)
| |
JMS Queue Resource |
\ /
\ /
[ router ]
||
(real queues)
I installed the resource adapter, which seems to like to be deployed rather
than having a mbean entry added in jboss.jcml, which I basically copied from
the main branch conf/default files.
The manager has a JMSProviderLoader installed which is using a remote
<hostname>:<port> url to the router, and has the default session pool stuff.
I think that the MDB bits work fine. I do not *think* that I had to change
anything to get that to work, the problem I am running into is with JMS
resources.
Per your change note, I changed the res-jndi-name to from the external
context path to java:JmsXA. But I also had to use url's to get the
destinations to work. So I ended up with something like this:
<resource-managers>
<resource-manager>
<res-name>QueueConnectionFactory</res-name>
<res-jndi-name>java:/JmsXA</res-jndi-name>
</resource-manager>
<resource-manager>
<res-name>WorkRequestQueue</res-name>
<res-url>jnp://router:5001/queue/WorkRequestQueue</res-url>
</resource-manager>
<resource-manager>
<res-name>WorkResponseQueue</res-name>
<res-url>jnp://router:5001/queue/WorkResponseQueue</res-url>
</resource-manager>
</resource-managers>
I started up the application again, and got:
<snip>
javax.jms.JMSException: Invalid transaction id.
at
org.jbossmq.SpyXAResourceManager.addMessage(SpyXAResourceManager.java:80)
at org.jbossmq.SpySession.sendMessage(SpySession.java:381)
at org.jbossmq.SpyQueueSender.send(SpyQueueSender.java:103)
at org.jbossmq.SpyQueueSender.send(SpyQueueSender.java:62)
at
com.boldfish.does.job.workflow.internal.RequestSpoolerEJB.send(RequestSpoolerEJB.java:217)
at
com.boldfish.does.job.workflow.internal.RequestSpoolerEJB.sendNextRequest(RequestSpoolerEJB.java:249)
at
com.boldfish.does.job.workflow.internal.RequestSpoolerEJB.spool(RequestSpoolerEJB.java:273)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.java:650)
at
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:127)
at
org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:209)
at
org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:159)
at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:280)
at
org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:107)
at
org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:195)
at
org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:341)
at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:480)
at
org.jboss.ejb.plugins.jrmp.interfaces.GenericProxy.invokeContainer(GenericProxy.java:339)
at
org.jboss.ejb.plugins.jrmp.interfaces.StatefulSessionProxy.invoke(StatefulSessionProxy.java:136)
at $Proxy25.spool(Unknown Source)
at
com.boldfish.does.job.service.JobController$Runner.run(JobController.java:216)
at java.lang.Thread.run(Thread.java:484)
</snip>
So I thought that I should try a distributed TX manager, since that is what
i really want. I changed over to Tyrex on all nodes and I still got the
same results. I then tried to use a jnp:// url for the res-jndi-name, which
looks like it got a little further, but throw a different TX related
excepetion laiter.
I have session beans that use JMS resources and I have MDB, all of which
work off of a remote provider. What is the supported deployment descriptor
syntax for JMS resources (both factories and desitations) and what needs to
be done to make the distributed TX work.
A while back someone (could be you) said that using res-url was a hack
around the lack of support for JMS resources, is that still true? If not
what is the correct way to reference a remote connection and destination
inside of the descriptor?
If you need more detail I can provide that for you, or really anyone who
might have a clue as to why this is not working correctly.
Thanks,
--jason
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user