|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
How to make QSTATUS UNCOM(YES) while IPPROCS(0) OPPROCS(0)? |
« View previous topic :: View next topic » |
Author |
Message
|
issac |
Posted: Fri Aug 03, 2012 5:27 am Post subject: How to make QSTATUS UNCOM(YES) while IPPROCS(0) OPPROCS(0)? |
|
|
 Disciple
Joined: 02 Oct 2008 Posts: 158 Location: Shanghai
|
Hello, again
Today I met with a problem in our production environment. WMQ V6.0.2.4 on AIX PPC64. Developers say they could not GET messages from a QL.
QSTATUS shows IPPROCS(0), OPPROCS(1), but TYPE(HANDLE) shows the OPPROCS(1) is actually a CLUSRCVR which I can prove to be still working by checkking LSTMSGTI of the CHS. So the application has actually created the UNCOM(YES) while leaving NO HANDLE at all over the QL.
Process of the application is WAS, which did not crash. It's still there which I can tell by ps -ef|grep java. Developers say they're accessing MQ by AXIS2. I tried myself to recreate the problem with the following code:
Code: |
private void process(String[] args) throws IllegalOptionValueException, UnknownOptionException, JMSException {
this.parseCommandLineArguments(args);
// --------------------------------------------------
ProgressLog.progress_LV1("Connecting to the QMGR then creating a session...");
MQQueueConnection conn = this.buildMQQueueConnection();
Session jmsSession = conn.createSession(true, Session.SESSION_TRANSACTED);
ProgressLog.progress_LV2("Session has been created as SESSION_TRANSACTED.");
// ------------------------------------------------
MQQueue queue = (MQQueue) jmsSession.createQueue("queue:///" + pstr("queue"));
MessageProducer producer = jmsSession.createProducer(queue);
TextMessage message = jmsSession.createTextMessage();
message.setText("ACCESS JMS RESOURCE TEST");
producer.send(message);
ProgressLog.progress_LV2("Message sent to the Q successfully. ");
// ---------------------------------------------
//producer.close();
ProgressLog.progress_LV2("The choice about PRODUCER_CLOSE has been made.");
//jmsSession.commit();
ProgressLog.progress_LV2("The choice about SESSION_COMMIT has been made.");
//jmsSession.close();
ProgressLog.progress_LV2("The choice about SESSION_CLOSE has been made.");
ProgressLog.progress_LV2("The application will hang here for a very long time without the connection being closed.");
Pauser.pauseThread(10000000);
conn.close();
ProgressLog.progress_LV2("The choice about CONNECTION_CLOSE has been made.");
} |
But it could only create UNCOM(YES) while still holding a HANDLE to the queue. What should I do to mimic this situation? That is to make QSTATUS UNCOM(YES) while IPPROCS(0) OPPROCS(0)?
Thank you in advance. _________________ Bazinga! |
|
Back to top |
|
 |
fjb_saper |
Posted: Sat Aug 04, 2012 6:47 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Relatively easy:
Create a transactional connection / session
send (put) a message to the queue
Kill the transactional process and its transaction manager... (or just the connection to WMQ)
You now have a ghost message:
Put (part of qdepth) but with no XA_prepare_commit and not visible:
dspmqtrn will not show it as there is not XA_prepare_commit so you cannot force commit or force rollback.
The application has no handle...and neither does the original TM...
Also in WAS watch out for transaction time outs... and how they affect JMS...
Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
markt |
Posted: Sat Aug 04, 2012 7:28 am Post subject: |
|
|
 Knight
Joined: 14 May 2002 Posts: 508
|
CONN
OPEN
PUT(Sync)
CLOSE
leaves ipprocs/opprocs=0 and uncom(yes)
Transactions are scoped to connections, not objects so it won't get resolved one way or the other until the connection ends (DISC or abend) |
|
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
|
|
|
|