Resolution: Won't Fix or Usage Issue
Affects Version/s: 1.4.3
Fix Version/s: None
Component/s: Transport: JMS
- Set up simple ActiveMQ server on your machine.
- Run ActiveMQ and JConsole for inspecting message flow.
- Start with the "hello" example for 1.4.3.
- Add project dependencies for client module and jms transport.
- Replace Greeter.java with attached version.
- Replace hello-config.xml with attached version.
- Edit the <global-endpoints> section to set one of the "StatusSetter..." endpoints to just "StatusSetter".
- Run a test for each of the endpoints in turn.
VM - This endpoint produces the effect I am hoping for. As the GreeterUMO is executing, % done status prints on the screen. Of course, this does not allow GreeterUMO to execute remotely.
JMSTran - This endpoint shows no status until the end. This is expected, since the status setting endpoint is using the same JMS connector as the greeter UMO. The status messages should be transacted with the greeter message. Unfortunately, this case also blows up at the end, showing 2 problems, I think, with the current implementation:
- NPE - the current message is stored in a ThreadLocal, and the JMS dispatch code is overwriting that value, eventually killing the outbound router.
- Transacted message chain is broken - I was a little surprised to find that the outbound router happens after the transaction on the inbound endpoint is closed. I was expecting the message to jms://chitchat.requests to be transacted with the one from jms://greet.requests. I may just be missing some transaction configuration?
JMSOffTran - This is where I started, trying to send status (outside the JMS transaction) to a remote UI while handling a transacted JMS request. This one fails with Mule refusing to send the JMS message because it cannot be transacted with the current message... exactly what I am hoping for, I believe.
If it is, in fact, possible to send in-process status with JMS in some other way, and I am just going about this the hard way, please let me know.