Package io.mats3.impl.jms
Class JmsMatsJmsSessionHandler_Simple.JmsSessionHolder_Simple
java.lang.Object
io.mats3.impl.jms.JmsMatsJmsSessionHandler_Simple.JmsSessionHolder_Simple
- All Implemented Interfaces:
JmsMatsJmsSessionHandler.JmsSessionHolder
- Enclosing class:
- JmsMatsJmsSessionHandler_Simple
public class JmsMatsJmsSessionHandler_Simple.JmsSessionHolder_Simple
extends Object
implements JmsMatsJmsSessionHandler.JmsSessionHolder
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected AtomicBooleanprotected final javax.jms.Connectionprotected final javax.jms.Sessionprotected final javax.jms.MessageProducer -
Constructor Summary
ConstructorsConstructorDescriptionJmsSessionHolder_Simple(javax.jms.Connection jmsConnection, javax.jms.Session jmsSession, javax.jms.MessageProducer messageProducer) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Employed by StageProcessors: This physically closes the JMS Session, and removes it from the pool-Connection, and when all Sessions for a given pool-Connection is closed, the pool-Connection is closed.voidNotifies that a Session (or "downstream" consumer or producer) raised some exception - probably due to some connectivity issues experienced as a JMSException while interacting with the JMS API, or because theJmsMatsJmsSessionHandler.JmsSessionHolder.isSessionOk()returnedfalse.javax.jms.MessageProducerjavax.jms.SessionvoidShall be invoked at these points, with the action to perform if it raisesJmsMatsException.JmsMatsJmsException.voidrelease()For Initiators: This returns the JmsSessionHolder to the Session Pool for the underlying Connection.
-
Field Details
-
_jmsConnection
protected final javax.jms.Connection _jmsConnection -
_jmsSession
protected final javax.jms.Session _jmsSession -
_messageProducer
protected final javax.jms.MessageProducer _messageProducer -
_closedOrReleasedOrCrashed
-
-
Constructor Details
-
JmsSessionHolder_Simple
public JmsSessionHolder_Simple(javax.jms.Connection jmsConnection, javax.jms.Session jmsSession, javax.jms.MessageProducer messageProducer)
-
-
Method Details
-
isSessionOk
Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolderShall be invoked at these points, with the action to perform if it raisesJmsMatsException.JmsMatsJmsException.- (For StageProcessors) Before going into MessageConsumer.receive() - if
JmsMatsException.JmsMatsJmsExceptionis raised,JmsMatsJmsSessionHandler.JmsSessionHolder.close()orJmsMatsJmsSessionHandler.JmsSessionHolder.crashed(Throwable)shall be invoked, and then a new JmsSessionHolder shall be fetched. [This is to be able to signal to the StageProcessor that the underlying Connection might have become unstable - start afresh] - (For StageProcessors and Initiators) Before committing any resources other than the JMS Session - if
JmsMatsException.JmsMatsJmsExceptionis raised, rollback shall be performed,JmsMatsJmsSessionHandler.JmsSessionHolder.close()orJmsMatsJmsSessionHandler.JmsSessionHolder.crashed(Throwable)shall be invoked, and then a new JmsSessionHolder shall be fetched. [This is to tighten the gap between typically the DB commit and the JMS commit: Just before the DB is committed, an invocation to this method is performed. If this goes OK, then the DB is committed and then the JMS Session is committed.]
- Specified by:
isSessionOkin interfaceJmsMatsJmsSessionHandler.JmsSessionHolder- Throws:
JmsMatsException.JmsMatsJmsException
- (For StageProcessors) Before going into MessageConsumer.receive() - if
-
getSession
public javax.jms.Session getSession()- Specified by:
getSessionin interfaceJmsMatsJmsSessionHandler.JmsSessionHolder- Returns:
- the JMS Session. It will be the same instance every time.
-
getDefaultNoDestinationMessageProducer
public javax.jms.MessageProducer getDefaultNoDestinationMessageProducer()- Specified by:
getDefaultNoDestinationMessageProducerin interfaceJmsMatsJmsSessionHandler.JmsSessionHolder- Returns:
- the default non-specific
MessageProducerthat goes along withthe JMS Session.
-
close
public void close()Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolderEmployed by StageProcessors: This physically closes the JMS Session, and removes it from the pool-Connection, and when all Sessions for a given pool-Connection is closed, the pool-Connection is closed.- Specified by:
closein interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-
release
public void release()Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolderFor Initiators: This returns the JmsSessionHolder to the Session Pool for the underlying Connection. Note: It is allowed to call this in a finally block after use, so it must guard against already having beenclosedorcrashedwhen inside theJmsMatsTransactionManager, in which case it should probably effectively act as a no-op.- Specified by:
releasein interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-
crashed
Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolderNotifies that a Session (or "downstream" consumer or producer) raised some exception - probably due to some connectivity issues experienced as a JMSException while interacting with the JMS API, or because theJmsMatsJmsSessionHandler.JmsSessionHolder.isSessionOk()returnedfalse.This should close and ditch the Session, then the SessionHandler should (semantically) mark the underlying Connection as broken, and then then get all other "leasers" to come back with their sessions (close or crash), so that the Connection can be closed. The leasers should then get a new session by
JmsMatsJmsSessionHandler.getSessionHolder(JmsMatsStageProcessor), which will be based on a fresh Connection.NOTE: If a session comes back with "crashed", but it has already been "revoked" by the SessionHandler due to another crash, this invocation should be equivalent to
JmsMatsJmsSessionHandler.JmsSessionHolder.close(), i.e. "come home as agreed upon, whatever the state you are in".- Specified by:
crashedin interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-