Re: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-24 Thread Peter Antman

On Thu, 21 Jun 2001, Jason Dillon wrote:

> I found the problem, well I solved my problem is a better way to put it.
> The session bean (stateful) which I was using to send messages from was
> creating a session in the ejbCreate() method, then actually used in another.
> 
> I was assuming that the container would "do the right thing" in this case,
> but perhaps it is not supposed to do here.  I updated the bean to create the
> session in the method from which it was used and it is much happier now.
> 
> I did run into some other problems along the way, like trying to start() or
> close() connections.  But at this point I have everything working again with
> most of the JMS usage going through the JMS RA.  There is one bit that needs
> to be re-architected into a bean so it can also participate in the TX, but
> that can wait.
> 
> Thank you for the time you spent with the example below, this was exactly
> what I was looking for.


Great that it worked. Any feedback on the jms-ra stuff is wellcomed, since
it is a non standard way of using the two standards (connector and JMS).
Since you are not allowed to use asynchronous stuff with the connector I
did not think that start was applyable, but we may have to rethink that.

//Peter 

 > 
> --jason
> 
> 
> On Thu, 21 Jun 2001, Peter Antman wrote:
> 
> > Hi again Jason,
> > I did actually have some time to make a test, and it works fine for me.
> > (This will be integreated into the new manual chapter I will be writing
> > during the summer).
> >
> > Here is al my setups, with the remote machine beeing
> > linutv1.annons.dn.se (its NOT accessable)
> >
> > in jboss.jcml:
> >
> > 
> >   name=":service=JMSProviderLoader,name=MyRemoteLoader">
> > MyRemoteProvider
> >  linutv1.annons.dn.se:1099
> > name="ProviderAdapterClass">org.jboss.jms.jndi.JBossMQProvider
> >   
> >
> > 
> >>  name="JCA:service=ConnectionFactoryLoader,name=RemoteJmsXA">
> > RemoteJmsXA
> > JCA:service=RARDeployer
> > JMS Adapter
> > MinervaXACMFactory
> > 
> > 
> > 
> >   JmsProviderAdapterJNDI=java:MyRemoteProvider
> > 
> >   # Pool type - uncomment to force, otherwise it is the default
> >   #PoolConfiguration=per-factory
> >
> >   # Connection pooling properties - see
> >   # org.opentools.minerva.pool.PoolParameters
> >   MinSize=0
> >   MaxSize=10
> >   Blocking=true
> >   GCEnabled=false
> >   IdleTimeoutEnabled=false
> >   InvalidateOnError=false
> >   TrackLastUsed=false
> >   GCIntervalMillis=12
> >   GCMinIdleMillis=120
> >   IdleTimeoutMillis=180
> >   MaxIdleTimeoutPercent=1.0
> > 
> >
> > 
> > name="PrincipalMappingClass">org.jboss.resource.security.ManyToOnePrincipalMapping
> > 
> > 
> >   
> >
> >
> > In jboss.xml:
> > 
> >
> > 
> >  false
> >   
> > 
> >   topicfactoryref
> >   java:/RemoteJmsXA
> > 
> > 
> >   topicref
> >   
>jnp://linutv1.annons.dn.se:1099/topic/testTopic
> > 
> > 
> >
> >  
> >
> >  TopicHello
> >  TxTopicHello
> >  Standard Stateless SessionBean
> >   
> >jms/MyTopicConnection
> >topicfactoryref
> >  
> >  
> >jms/TopicName
> >topicref
> >  
> >
> >  
> > 
> >
> > Observe the  here, not url.
> >
> > ejb-jar (actually nothing particular)
> > 
> >
> > 
> >  Queue Publisher
> >  PublisherBean
> >  
> >
> >  TopicHello
> >  TopicHello
> >  org.jboss.docs.jms.ra.interfaces.HelloHome
> >  org.jboss.docs.jms.ra.interfaces.Hello
> >  org.jboss.docs.jms.ra.bean.TopicHelloBean
> >  Stateless
> >  Container
> >  
> > A Topic ConnectionFactory
> > jms/MyTopicConnection
> > javax.jms.TopicConnectionFactory
> > Container
> >  
> >  
> > A Topic 
> > jms/TopicName
> > javax.jms.Topic
> > Container
> >  
> >
> >  
> >  
> >
> >
> >
> > And the bean:
> >
> > package org.jboss.docs.jms.ra.bean;
> >
> > import java.rmi.RemoteException;
> > import java.util.*;
> > import javax.ejb.SessionBean;
> > import javax.ejb.SessionContext;
> > import javax.ejb.EJBException;
> > import javax.naming.*;
> > import javax.jms.*;
> >
> > import org.jboss.docs.jms.ra.interfaces.*;
> >
> >
> > public class TopicHelloBean implements SessionBean {
> >
> > private static final String CONNECTION_JNDI = 
>"java:comp/env/jms/MyTopicConnection";
> > private static final String TOPIC_JNDI = "java:comp/env/jms/TopicName";
> >
> > private SessionContext ctx = null;
> > private Topic topic = null;
> > private TopicConnection topicConnection = null;
> >
> > public TopicHelloBean() {
> > }
> >
> > public void setSessionContext(SessionContext ctx) 

Re: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-21 Thread Jason Dillon

I found the problem, well I solved my problem is a better way to put it.
The session bean (stateful) which I was using to send messages from was
creating a session in the ejbCreate() method, then actually used in another.

I was assuming that the container would "do the right thing" in this case,
but perhaps it is not supposed to do here.  I updated the bean to create the
session in the method from which it was used and it is much happier now.

I did run into some other problems along the way, like trying to start() or
close() connections.  But at this point I have everything working again with
most of the JMS usage going through the JMS RA.  There is one bit that needs
to be re-architected into a bean so it can also participate in the TX, but
that can wait.

Thank you for the time you spent with the example below, this was exactly
what I was looking for.

--jason


On Thu, 21 Jun 2001, Peter Antman wrote:

> Hi again Jason,
> I did actually have some time to make a test, and it works fine for me.
> (This will be integreated into the new manual chapter I will be writing
> during the summer).
>
> Here is al my setups, with the remote machine beeing
> linutv1.annons.dn.se (its NOT accessable)
>
> in jboss.jcml:
>
> 
>   name=":service=JMSProviderLoader,name=MyRemoteLoader">
> MyRemoteProvider
>  linutv1.annons.dn.se:1099
> name="ProviderAdapterClass">org.jboss.jms.jndi.JBossMQProvider
>   
>
> 
> name="JCA:service=ConnectionFactoryLoader,name=RemoteJmsXA">
> RemoteJmsXA
> JCA:service=RARDeployer
> JMS Adapter
> MinervaXACMFactory
> 
> 
> 
>   JmsProviderAdapterJNDI=java:MyRemoteProvider
> 
>   # Pool type - uncomment to force, otherwise it is the default
>   #PoolConfiguration=per-factory
>
>   # Connection pooling properties - see
>   # org.opentools.minerva.pool.PoolParameters
>   MinSize=0
>   MaxSize=10
>   Blocking=true
>   GCEnabled=false
>   IdleTimeoutEnabled=false
>   InvalidateOnError=false
>   TrackLastUsed=false
>   GCIntervalMillis=12
>   GCMinIdleMillis=120
>   IdleTimeoutMillis=180
>   MaxIdleTimeoutPercent=1.0
> 
>
> 
> name="PrincipalMappingClass">org.jboss.resource.security.ManyToOnePrincipalMapping
> 
> 
>   
>
>
> In jboss.xml:
> 
>
> 
>  false
>   
> 
>   topicfactoryref
>   java:/RemoteJmsXA
> 
> 
>   topicref
>   
>jnp://linutv1.annons.dn.se:1099/topic/testTopic
> 
> 
>
>  
>
>TopicHello
>TxTopicHello
>Standard Stateless SessionBean
>   
>jms/MyTopicConnection
>topicfactoryref
>  
>  
>jms/TopicName
>topicref
>  
>
>  
> 
>
> Observe the  here, not url.
>
> ejb-jar (actually nothing particular)
> 
>
> 
>  Queue Publisher
>  PublisherBean
>  
>
>TopicHello
>TopicHello
>org.jboss.docs.jms.ra.interfaces.HelloHome
>org.jboss.docs.jms.ra.interfaces.Hello
>org.jboss.docs.jms.ra.bean.TopicHelloBean
>Stateless
>Container
>  
> A Topic ConnectionFactory
> jms/MyTopicConnection
> javax.jms.TopicConnectionFactory
> Container
>  
>  
> A Topic 
> jms/TopicName
> javax.jms.Topic
> Container
>  
>
>  
>  
>
>
>
> And the bean:
>
> package org.jboss.docs.jms.ra.bean;
>
> import java.rmi.RemoteException;
> import java.util.*;
> import javax.ejb.SessionBean;
> import javax.ejb.SessionContext;
> import javax.ejb.EJBException;
> import javax.naming.*;
> import javax.jms.*;
>
> import org.jboss.docs.jms.ra.interfaces.*;
>
>
> public class TopicHelloBean implements SessionBean {
>
> private static final String CONNECTION_JNDI = 
>"java:comp/env/jms/MyTopicConnection";
> private static final String TOPIC_JNDI = "java:comp/env/jms/TopicName";
>
> private SessionContext ctx = null;
> private Topic topic = null;
> private TopicConnection topicConnection = null;
>
> public TopicHelloBean() {
> }
>
> public void setSessionContext(SessionContext ctx) {
> this.ctx = ctx;
> }
>
> public void ejbCreate()  {
> try {
> Context context = new InitialContext();
> topic = (Topic)context.lookup(TOPIC_JNDI);
>
>   TopicConnectionFactory factory = 
>(TopicConnectionFactory)context.lookup(CONNECTION_JNDI);
>   topicConnection = factory.createTopicConnection();
>
> } catch (Exception ex) {
> // JMSException or NamingException could be thrown
> ex.printStackTrace();
>   throw new EJBException(ex.toString());
> }
> }
>
> /**
>  * Send a message with a message nr in property MESSAGE_NR
>  */
> publi

Re: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-21 Thread Jason Dillon

> 1. If you get a XAxxxConnectionFactory and you do not have any process
>that actuallt starts the transaction, then you are in trouble.

I can not seem to get any XA classes from the JMS RA, so I am not quite sure
what you mean here.  I was modeling the usage of JMS inside of a bean from
some example from sun, could be the blue prints or the description of the
dtd, not sure.

> 2. I have gotten the same type of exception, and as far as I can
>remember the solution is to put jbossmq-client.jar in your classpath,
>ie for server to server communication, put it in lib/ext (but I have
>not tested this for a while).

I can try this, but it seems odd that this would fix the problem.  I will
look into it more.

> > 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.
>
> You mean the MDB:s are running on the nodes (subscribing to destinations
> in the router) and the session beans are also on the nodes, sending to
> destinations in the router?

Correct.

> >   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.
>
> Hm, the ra must be both in jboss.jcml AND be deployed. It is confiured
> in jboss.jcml and bound to the correct JNDI, and then the *.ra file must
> be deployed (which is done be default in cvs version and 2.4).

I think I was mistaken, I did have a configuration as well as a deployment.
What does the deployed ra actually provide?

Is it important that it be deployed prior to the configuration?  My guess is
not, but I want to make sure.

> > The manager has a JMSProviderLoader installed which is using a remote
> > : 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.
>
> Do you have a customized JMSProviderLoader, of type:
>
>   name=":service=JMSProviderLoader,name=MyRemoteLoader">
> MyRemoteProvider
>  router:1099
> name="ProviderAdapterClass">org.jboss.jms.jndi.JBossMQProvider
>   

My JMS provide is still called DefaultJMSProvider and I did specify for the
factory loader that JNDI name was:

  JmsProviderAdapterJNDI=java:/DefaultJMSProvider

Should I omit the java:/ ?

What is ra.xml?

> > 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?
>
> For jboss 2.2.2 that is still true. In the developmen version it is not,
> if the ra is used.
>
> I have to admit there is still a problem with destination. To get the
> connection from the correct JNDI you configure a ProviderLoader, but the
> way both JMS and J2EE connector specifation is done I have found no way
> of abstracting access to the destinations out from the normal JNDI
> access.
>
> If jnp://router:5001/queue/WorkRequestQueue does not work, you will have
> to use Scot Starks solution to integrate another JNDI space into the
> local JNDI, but I do not think this is your problem.

This seems to work.  I am able to lookup destinations and get most of the
way done processing until I get a TX related exception.

> > If not
> > what is the correct way to reference a remote connection and destination
> > inside of the descriptor?
>
> As far as I can see it you have done perfectly right, but remote
> subscriptions with TX support has not been that much tested.
>
> Pleas try the jbossmq-client.jar trick and see if it works.

So I should use res-jndi-name for the factory and res-url for the
destination?  Or isn't there some other tag that I am supposed to use for
destinations.  Sorry, I am still not clear on that... though I suppose it
does not really matter much as long as the lookup succeeds.

> I am sorry to say this, but I am going on a pretty long vaication from
> today. I will try to check my mail of and on, the there may be long
> periods of silence.

How long is "pretty long"?  Days, weeks, months, years?  I hope you have a
good time.

> I do hope you get it going.

Me too.

> (Have you checked the jmsra tests in jbo

Re: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-21 Thread Peter Antman

Hi again Jason,
I did actually have some time to make a test, and it works fine for me.
(This will be integreated into the new manual chapter I will be writing
during the summer).

Here is al my setups, with the remote machine beeing
linutv1.annons.dn.se (its NOT accessable)

in jboss.jcml:


  
MyRemoteProvider
 linutv1.annons.dn.se:1099
org.jboss.jms.jndi.JBossMQProvider
  


  
RemoteJmsXA
JCA:service=RARDeployer
JMS Adapter
MinervaXACMFactory



  JmsProviderAdapterJNDI=java:MyRemoteProvider

  # Pool type - uncomment to force, otherwise it is the default
  #PoolConfiguration=per-factory

  # Connection pooling properties - see
  # org.opentools.minerva.pool.PoolParameters
  MinSize=0
  MaxSize=10
  Blocking=true
  GCEnabled=false
  IdleTimeoutEnabled=false
  InvalidateOnError=false
  TrackLastUsed=false
  GCIntervalMillis=12
  GCMinIdleMillis=120
  IdleTimeoutMillis=180
  MaxIdleTimeoutPercent=1.0



org.jboss.resource.security.ManyToOnePrincipalMapping


  


In jboss.xml:



 false
  

  topicfactoryref
  java:/RemoteJmsXA


  topicref
  
jnp://linutv1.annons.dn.se:1099/topic/testTopic



 
   
 TopicHello
 TxTopicHello
 Standard Stateless SessionBean
  
   jms/MyTopicConnection
   topicfactoryref
 
 
   jms/TopicName
   topicref
 
   
 


Observe the  here, not url.

ejb-jar (actually nothing particular)



 Queue Publisher
 PublisherBean
 
   
 TopicHello
 TopicHello
 org.jboss.docs.jms.ra.interfaces.HelloHome
 org.jboss.docs.jms.ra.interfaces.Hello
 org.jboss.docs.jms.ra.bean.TopicHelloBean
 Stateless
 Container
 
A Topic ConnectionFactory
jms/MyTopicConnection
javax.jms.TopicConnectionFactory
Container
 
 
A Topic 
jms/TopicName
javax.jms.Topic
Container
 
   
 
 

   

And the bean:

package org.jboss.docs.jms.ra.bean;

import java.rmi.RemoteException;
import java.util.*;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.EJBException;
import javax.naming.*;
import javax.jms.*;

import org.jboss.docs.jms.ra.interfaces.*;


public class TopicHelloBean implements SessionBean {

private static final String CONNECTION_JNDI = 
"java:comp/env/jms/MyTopicConnection";
private static final String TOPIC_JNDI = "java:comp/env/jms/TopicName";

private SessionContext ctx = null;
private Topic topic = null;
private TopicConnection topicConnection = null;

public TopicHelloBean() {
}

public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}

public void ejbCreate()  {
try {
Context context = new InitialContext();
topic = (Topic)context.lookup(TOPIC_JNDI);

TopicConnectionFactory factory = 
(TopicConnectionFactory)context.lookup(CONNECTION_JNDI);   
topicConnection = factory.createTopicConnection();

} catch (Exception ex) {
// JMSException or NamingException could be thrown
ex.printStackTrace();
throw new EJBException(ex.toString());
}
}

/**
 * Send a message with a message nr in property MESSAGE_NR
 */
public void hello(String msg)  {
sendMessage(msg);
}
   

public void ejbRemove() throws RemoteException {
if(topicConnection != null) {
try {
topicConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

public void ejbActivate() {}
public void ejbPassivate() {}

private void sendMessage(String msg) {
TopicSession   topicSession = null;
try {
TopicPublisher topicPublisher = null;
TextMessagemessage = null;

topicSession =
topicConnection.createTopicSession(true, Session.AUTO_ACKNOWLEDGE);
topicPublisher = topicSession.createPublisher(topic);

message = topicSession.createTextMessage();
message.setText(msg);
topicPublisher.publish(message);


} catch (JMSException ex) {

ex.printStackTrace();
ctx.setRollbackOnly();
throw new EJBException(ex.toString());
} finally {
if (topicSession != null) {
try {
topicSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}

Re: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-21 Thread Peter Antman

Hi Jason,
how nice that finally someone is really using the JMS ra and in a
distributed fashion. I have to admit that it has not been tested in such
a setup yet.

I will try to comment your mail, but first: there are two things that I
know have caused problem of the type you describe:

1. If you get a XAxxxConnectionFactory and you do not have any process
   that actuallt starts the transaction, then you are in trouble.

2. I have gotten the same type of exception, and as far as I can
   remember the solution is to put jbossmq-client.jar in your classpath,
   ie for server to server communication, put it in lib/ext (but I have
   not tested this for a while).

On 20 Jun, Jason Dillon wrote:
> 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.

You mean the MDB:s are running on the nodes (subscribing to destinations
in the router) and the session beans are also on the nodes, sending to
destinations in 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.


Hm, the ra must be both in jboss.jcml AND be deployed. It is confiured
in jboss.jcml and bound to the correct JNDI, and then the *.ra file must
be deployed (which is done be default in cvs version and 2.4).


> 
> The manager has a JMSProviderLoader installed which is using a remote
> : 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.

Do you have a customized JMSProviderLoader, of type:

  
MyRemoteProvider
 router:1099
org.jboss.jms.jndi.JBossMQProvider
  


If this is the way you have done it you must also configure the RA to
use this provider: (Observer the JmsProviderAdapterJNDI attribute - this
configuration should also be possible to do in ra.xml

  
  
JmsXA
JCA:service=RARDeployer
JMS Adapter
MinervaXACMFactory



  JmsProviderAdapterJNDI=MyRemoteProvider

  # Pool type - uncomment to force, otherwise it is the default
  #PoolConfiguration=per-factory

  # Connection pooling properties - see
  # org.opentools.minerva.pool.PoolParameters
  MinSize=0
  MaxSize=10
  Blocking=true
  GCEnabled=false
  IdleTimeoutEnabled=false
  InvalidateOnError=false
  TrackLastUsed=false
  GCIntervalMillis=12
  GCMinIdleMillis=120
  IdleTimeoutMillis=180
  MaxIdleTimeoutPercent=1.0



org.jboss.resource.security.ManyToOnePrincipalMapping


  
> 
> 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:
> 
>  
> 
>   QueueConnectionFactory
>   java:/JmsXA
> 
> 
> 
>   WorkRequestQueue
>jnp://router:5001/queue/WorkRequestQueue
> 
> 
> 
>   WorkResponseQueue
>   jnp://router:5001/queue/WorkResponseQueue
> 
>   
> 
> I started up the application again, and got:
> 
> 
> 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.se

RE: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-20 Thread Jason Dillon

> my my my you're hot...
>
> I can't even finish the mail and I blow a fuse :(

I am not really sure what that means... perhaps the ':(' that the end throws
me off a bit too far.

> Let us know if you find a bug,

I certainly will, thought I do not really know what the officially correctly
syntax is for the resource definition.   There are also a number of
variables (TM, RA, JMS), which make it that much more difficult.

I am hopping to talk with Peter abit about the RA first.

--jason


___
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user



RE: [JBoss-user] Distributed MDB & JMS resouces inside of beans

2001-06-20 Thread marc fleury

my my my you're hot...

I can't even finish the mail and I blow a fuse :(

Let us know if you find a bug,

marcf

|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Jason Dillon
|Sent: Wednesday, June 20, 2001 8:59 PM
|To: [EMAIL PROTECTED]
|Cc: [EMAIL PROTECTED]
|Subject: [JBoss-user] Distributed MDB & JMS resouces inside of beans
|
|
|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
|: 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:
|
| 
|
|  QueueConnectionFactory
|  java:/JmsXA
|
|
|
|  WorkRequestQueue
|   jnp://router:5001/queue/WorkRequestQueue
|
|
|
|  WorkResponseQueue
|  jnp://router:5001/queue/WorkResponseQueue
|
|  
|
|I started up the application again, and got:
|
|
|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(Requ
|estSpoolerEJB.java:217)
|   at
|com.boldfish.does.job.workflow.internal.RequestSpoolerEJB.sendNextR
|equest(RequestSpoolerEJB.java:249)
|   at
|com.boldfish.does.job.workflow.internal.RequestSpoolerEJB.spool(Req
|uestSpoolerEJB.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(SecurityIntercepto
|r.java:127)
|   at
|org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(Sta
tefulSessionInstanceInterceptor.java:209)
|   at
|org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.
|java:159)
|   at
|org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterc
|eptorCMT.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(StatefulSessionContai
|ner.java:341)
|   at
|org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPC
|ontainerInvoker.java:480)
|   at
|org.jboss.ejb.plugins.jrmp.interfaces.GenericProxy.invokeContainer(
|GenericProxy.java:339)
|   at
|org.jboss.ejb.plugins.jrmp.interfaces.StatefulSessionProxy.invoke(S
|tatefulSessionProxy.java:136)
|   at $Proxy25.spool(Unknown Source)
|   at
|com.boldfish.does.job.service.JobController$Runner.run(JobControlle
|r.java:216)
|   at java.lang.Thread.run(Thread.java:484)
|
|
|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.
|
|