This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
So when a message comes in to my message-driven EJB, and, say, I have a temporary issue, I want to put it back on the queue. (Nevermind for now that it will just immediately retry a millisecond later).
I thought it would be easy to do this by just throwing a RuntimeException. My Head First EJB was telling me that the container just puts the message back on the queue. But what's happening is that the listener port on that JMS queue halts after the retries are done, and I can no longer receive messages. I don't see ejbRemove() in my logs and it looks like my bean is still alive.
Is this normal and expected behavior for the EJB container? Or is it some quirk of MQ or WebSphere Application Server?
I'm running the embedded MQ (5.3) messaging server on WebSphere Application Server 5.1 on my laptop.
P.S. I haven't tried rolling back a container-managed transaction yet, but I'd rather not increase the complexity of my code with that. Then again, if everyone thinks that's the best option, and my port listener won't die...