I have an application running in a single instance of JBoss. The application uses MDB's and JMS publishing extensively. I would like to put JMS (on JBossMQ) entirely onto a separate box and instance of JBoss. Now I want to listen and subscribe to topics on this other machine. However, I don't want to just point my jndi.properties to this new box, as I have many components that exist still on this application box. I just want JMS to exist on this separate new box.
What is the standard way of doing this sort of thing? I would like to not have to do recoding (just manipulate config files). I have seen many questions on this subject but very few answers, and the answers I have seen have tended to be vague, like "make sure your jndi is set up properly". So in the interests of focusing on the problem, I have summarized some "solutions" that may or may not work. I would like to get advice to see if these are viable or that I am missing something.
1. Remote topics. In your MDB's deployment descriptor, for the res-jndi-name for the topic/queue that fires the mdb, put the entire jndi naming server url. eg.
<a href="http://www.jboss.org/modules/bb/index.html?module=bb&op=viewtopic&t=forums/ approach seems to handle the mdb's, but how do I publish to jms? I suppose I could pass in a Properties object to my InitialContext and send it from there.
2. Going into the jms-service.xml and adding an attribute
jnp://192.168.10.10:1099 to the JMSProviderLoader. I got this from here
but it was in the context of creating a bridge to a swiftmq message provider, so maybe the JBoss version doesn't even look for the ProviderUrl attribute. In experimenting with pointing this to a bogus Url I got a socket exception and when I pointed it to a live server I didn't get the exception, so maybe there's hope.
3. The Federation Approach: Bind the JMS provider into the original's JNDI tree through the ExternalContext MBean as explained in the JBoss 3.0 manual (page 126). If that were to work, could I make
so that I wouldn't have to change all my jndi names to point to some new external name? That would suck.