|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
JMSAdmin Application failed to start |
« View previous topic :: View next topic » |
Author |
Message
|
qcf |
Posted: Thu Sep 22, 2005 12:05 am Post subject: JMSAdmin Application failed to start |
|
|
 Novice
Joined: 25 Jul 2005 Posts: 10 Location: Australia
|
I have the following configuration in my JMSAdmin.config file:
INITIAL_CONTEXT_FACTORY=com.ibm.websphere.naming.WsnInitialContextFactory
PROVIDER_URL=iiop://IBM-99TWBRG:9090/
SECURITY_AUTHENTICATION=none
I couldnt start the JMSAdmin, it threw NoClassDefFoundError exception as follow:
-----------------------
5648-C60, 5724-B41, 5655-F10 (c) Copyright IBM Corp. 2002. All Rights Reserved.
Starting Websphere MQ classes for Java(tm) Message Service Administration
Initialising JNDI Context...
INITIAL_CONTEXT_FACTORY: com.ibm.websphere.naming.WsnInitialContextFactory
PROVIDER_URL: iiop://IBM-99TWBRG:9090/
Exception in thread "main" java.lang.NoClassDefFoundError: com/ibm/ws/security/util/AccessController
at com.ibm.ejs.ras.RasHelper.getSystemProperty(RasHelper.java:686)
at com.ibm.ejs.ras.Tr.processTraceSettings(Tr.java:1194)
at com.ibm.ejs.ras.Tr.<clinit>(Tr.java:223)
at com.ibm.websphere.naming.WsnInitialContextFactory.<clinit>(WsnInitialContextFactory.java:6
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:60)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:257)
at javax.naming.InitialContext.init(InitialContext.java:233)
at javax.naming.InitialContext.<init>(InitialContext.java:209)
at com.ibm.mq.jms.admin.AdminService.initJNDI(AdminService.java:188)
at com.ibm.mq.jms.admin.JMSAdmin.<init>(JMSAdmin.java:228)
at com.ibm.mq.jms.admin.JMSAdmin.main(JMSAdmin.java:1844)
---------------------------------
Anybody knows where to get this "AccessController" class? in which .jar does this class live?
Thank you for your help... |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Sep 22, 2005 3:38 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
run <WAS Install>/bin/setupCmdLine.sh first in the same command window as you then run the JMSAdmin.
But *DON'T* use JMSAdmin if you are not using WAS version 4 or EARLIER. DO NOT USE JMSADMIN WITH VERSION 5 or LATER. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
qcf |
Posted: Thu Sep 22, 2005 3:24 pm Post subject: |
|
|
 Novice
Joined: 25 Jul 2005 Posts: 10 Location: Australia
|
Quote: |
But *DON'T* use JMSAdmin if you are not using WAS version 4 or EARLIER. DO NOT USE JMSADMIN WITH VERSION 5 or LATER.
|
I am using WAS 5.1.1, does it mean I can't use JMSAdmin to set up JMS objects for my WMQ 5.3 ?
What is the alternative then? how should I configure the JMS for WMQ in this case? What are the reasons for this restriction?
This restriction is not documented anywhere in WMQ documentation (or WAS documentation that I have been through).
Can you please provide more information and pointer ?
Thanks for your help Jeff... |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Sep 22, 2005 5:23 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
JMSAdmin does not create persistant resources in JNDI for WAS 5 or later.
You have to use the WAS Admin Console to create your JMS resources - using any of the three JMS Providers in the Resources section.
You can use JMSadmin, but the resources you create will disappear the next time you restart WAS.
This is why I say DON'T use it - because it's not good for anything.
I have seen this clearly documented in a redbook or two on WAS. I don't remember seeing it in the WAS Info center, but the WAS Info Center does clearly tell you to use the WAS Admin console (or wsadmin scripting - JACL or etc) to create these resources. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
qcf |
Posted: Sun Sep 25, 2005 4:46 am Post subject: |
|
|
 Novice
Joined: 25 Jul 2005 Posts: 10 Location: Australia
|
Thank you for the explanation, Jeff...
I have succesfully set up the WMQ Provider JMS Resources using WAS Admin Console, and the application on that instance of WAS can access the JMS resources.
Now, the WAS application needs to send a SOAP message to a WBIMB instance over JMS. The WBIMB acting as an intermediary between two Web Services (SOAP over JMS).
The detailed scenario as follows:
App1 send a SOAP message to the Broker (WBIMB) incoming Queue over JMS (let's call this message, SOAP1). the Broker convert the message to SOAP2 and drop it into App2 input queue (also over JMS) . App2 SOAP response (SOAP2') is sent over JMS to the Broker, and the Broker translate that to SOAP1' (response to SOAP1) and send this response to the JMS queue as defined originally in 'Reply To Queue' attribute of SOAP1 message (in "MQRFH2.jms.Rto" header).
App1 and App2 run on two seperate instance of WAS's, and all three components (WAS1, Broker, WAS2) run on three different physical servers. Each of them has their own local Queue Manager (all using WMQ).
My questions are:
1. What value should i set for "Reply To Queue" when i send the SOAP2 message to App2? Should I asign the value in "ReplyToQ" field of MQMD header or "Rto" field in MQRFH2 header? and in what notation, native WMQ or JMS name? If it's using JMS name, should I then also define JMS names for all the WMQ resources in the Broker instance (physical server)? How do I do that (using JMSAdmin with local naming directory file as the provider)?
2. App1 and App2 run on two seperate instance of WAS's, and all three components (WAS1, Broker, WAS2) run on three different physical servers. Each of them has their own local Queue Manager (all using WMQ). How do I make the Broker aware of the JMS resources defined in the WAS (and WMQ) instance of App1 when sending back the response? Is it possible to retreive information of JMS resources defined in WAS1 from WBIMB (or MQ manager) that runs remotely from WAS1?
3. Sending back Reply to WAS1 over JMS made even more difficult since the value of "Rto" in MQRFH2 header seems to be a dynamic queue, it looks like: "queue://MB_QMGR/AMQ.47653272835326723232?persistence=1". Is this a normal practice? is there a way to make App1 to point to a fixed "reply to queue" (Hence we can always assign a fix value to the "Rto")?
4. When the response comes back from App2, I need to forward this to the JMS queue as specified in the "Rto" property of original JMS request message. (I persisted this when receiving/processing the SOAP1 request message. So I can basically get the info with correlation ID mechanism).
How do I treat the "Rto" value of SOAP1 message, which is denoted in dynamic JMS queue name? Do I just assign this value to "RFH2.jms.Rto" properties of the message and pass it to "MQReply" Node ?
I have tried to do this, but the "MQReply"node threw an exception complaining the queue is not available, which I think makes sense, since this (dynamic JMS) queue resource is not defined anywhere in the Queue Manager of the Broker Instance. There is no way the QM 'understands' the "Rto" values. I sense I missed a piece of puzzle here (this is relevant to question no.2. How do I make the QM in Broker instance aware of JMS resources defined/created in WAS/WMQ of App1 and/or those defined in App2)?
Thank you in advance for your help... I tried the documentation and Red Books, but I can only figure out bits and pieces. I need helps on putting all these bits and pieces together. |
|
Back to top |
|
 |
fjb_saper |
Posted: Sun Sep 25, 2005 8:11 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
OK so let's look at the scenario:
SOAP1 to brkr to app2
returns SOAP2 to brkr to SOAP1
a) do not change the reply to destination...
b) You have 2 possibilities
for app 2 make it send it's reply message to the broker queue with the REPLY TO destination filled with the REPLY TO destination of the request message, the broker will take care of it.
c) if the reply to message does not need to transit through the broker then maybe you could send it directly to the qmgr on SOAP1
In any case make sure that there is a default route from the broker (sender) to SOAP1 so that the messages can be delivered to the reply to queue.
(Check intercommunication manuals and aliases)
And yes the dynamic reply to queue is the right way to go.
Enjoy
 |
|
Back to top |
|
 |
qcf |
Posted: Tue Sep 27, 2005 3:59 am Post subject: |
|
|
 Novice
Joined: 25 Jul 2005 Posts: 10 Location: Australia
|
Hi Saper,
Pardon my ignorance, I don't quite follow your explanation...
Let me rephrase what I think my main challange currently is:
When SOAP1 message arrives at the WBIMB input queue, the "MQRFH2.jms.Rto" value in the header denote a temporary queue, the value of Rto looks like "queue://WAS1_QMGR/AMQ.47653272835326723232?persistence=1". This indicates the Requester application (App1) is listening to the jms destination as stated above. This resource is managed by the MQ manager in the App1 Server (WAS), remote to WBIMB server (and remote to WBIMB Queue Manager too).
When I need to return the reply to App1, I am supposed to write to the queue (JMS destination) as defined in the Rto of original message. How can I do this from WBIMB ?
1. Is the notation "queue://WAS1_QMGR/AMQ.47653272835326723232?persistence=1" from the remote QM of APP1 translateable to WMQ notation? e.g. is the first section "WAS1_QMGR" = Queue Manager name, and "AMQ.47653272835326723232" is the Queue name? is there such relationship? this is from my personal observation, it's not documented anywhere.
2. If the above relationship is true, then can I just set the 'Reply To' attributes in MQMD header using the above values in a Compute Node, and passed the message to an MQ Reply Node (ignoring the JMS header) ? i.e.
SET OutputRoot.MQMD.ReplyToQMgr = 'WAS1_QMGR';
SET OutputRoot.MQMD.ReplyToQ = 'AMQ.47653272835326723232';
3. If point 2 is the right way to do it, I guess the next challange is how to define a Remote Queue definition in the WBIMB local Queue Manager ? Since this is a temporary queue in the remote queue manager? How do I define this queue in the MB QManager? Is "Model Queue" the answer? i.e. defining a model queue in local QM, which is pointing to the temporary queue on the remote Queue Manager? Is this possible at all? I haven't done this (or try this before).
Please help... any pointers will also be appreciated. I couldn't do end-to end testing at the moment, since App1 and App2 are still under development. |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Sep 27, 2005 4:05 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
qcf wrote: |
1. Is the notation "queue://WAS1_QMGR/AMQ.47653272835326723232?persistence=1" from the remote QM of APP1 translateable to WMQ notation? e.g. is the first section "WAS1_QMGR" = Queue Manager name, and "AMQ.47653272835326723232" is the Queue name? is there such relationship? this is from my personal observation, it's not documented anywhere. |
In fact, it is documented here.
Quote: |
* The second, and more powerful, form is based on uniform resource identifiers (URIs). This form allows you to specify remote queues (queues on a queue manager other than the one to which you are connected). It also allows you to set the other properties contained in a com.ibm.mq.jms.MQQueue object.
The URI for a queue begins with the sequence queue://, followed by the name of the queue manager on which the queue resides. This is followed by a further /, the name of the queue, and optionally, a list of name-value pairs that set the remaining Queue properties. For example, the URI equivalent of the previous example is:
ioQueue = session.createQueue("queue:///SYSTEM.DEFAULT.LOCAL.QUEUE");
The name of the queue manager is omitted. This is interpreted as the queue manager to which the owning QueueConnection is connected at the time when the Queue object is used.
Note:
When sending a message to a cluster, leave the Queue Manager field in the JMS Queue object blank. This enables an MQOPEN to be performed in BIND_NOT_FIXED mode, which allows the queue manager to be determined. Otherwise an exception is returned reporting that the queue object cannot be found. This applies when using JNDI or defining queues at runtime.
The following example connects to queue Q1 on queue manager HOST1.QM1, and causes all messages to be sent as non-persistent and priority 5:
ioQueue = session.createQueue("queue://HOST1.QM1/Q1?persistence=1&priority=5");
The following is an example of creating a topic URI:
session.createTopic("topic://Sport/Football/Results?multicast=7"); |
qcf wrote: |
2. If the above relationship is true, then can I just set the 'Reply To' attributes in MQMD header using the above values in a Compute Node, and passed the message to an MQ Reply Node (ignoring the JMS header) ? i.e.
SET OutputRoot.MQMD.ReplyToQMgr = 'WAS1_QMGR';
SET OutputRoot.MQMD.ReplyToQ = 'AMQ.47653272835326723232'; |
What happens when you try it?
qcf wrote: |
3. If point 2 is the right way to do it, I guess the next challange is how to define a Remote Queue definition in the WBIMB local Queue Manager ? Since this is a temporary queue in the remote queue manager? How do I define this queue in the MB QManager? Is "Model Queue" the answer? i.e. defining a model queue in local QM, which is pointing to the temporary queue on the remote Queue Manager? Is this possible at all? I haven't done this (or try this before). |
You should ask your MQ Administrator. Or read the Intercommunications manual. But defining anoter model queue is a waste of your time.
qcf wrote: |
Please help... any pointers will also be appreciated. I couldn't do end-to end testing at the moment, since App1 and App2 are still under development. |
You should work more with your MQ Administrator. Or read the Intercommunications guide and the Systems Administration Guide and start to be an MQ Administrator. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
fjb_saper |
Posted: Tue Sep 27, 2005 12:44 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Let's give the guy down under some pointer
You need to look at multi- hopping and qmgr aliases
Go to the intercommunications manual.
Enjoy  |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Sep 27, 2005 4:40 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
fjb_saper wrote: |
Let's give the guy down under some pointer |
Crikey, mate. I've been more helpful in this thread than I have been in the last five hundred posts I've done...
 _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|