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 AtomicBoolean
protected final javax.jms.Connection
protected final javax.jms.Session
protected final javax.jms.MessageProducer
-
Constructor Summary
ConstructorsConstructorDescriptionJmsSessionHolder_Simple
(javax.jms.Connection jmsConnection, javax.jms.Session jmsSession, javax.jms.MessageProducer messageProducer) -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
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.void
Notifies 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.MessageProducer
javax.jms.Session
void
Shall be invoked at these points, with the action to perform if it raisesJmsMatsException.JmsMatsJmsException
.void
release()
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.JmsSessionHolder
Shall be invoked at these points, with the action to perform if it raisesJmsMatsException.JmsMatsJmsException
.- (For StageProcessors) Before going into MessageConsumer.receive() - if
JmsMatsException.JmsMatsJmsException
is 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.JmsMatsJmsException
is 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:
isSessionOk
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
- Throws:
JmsMatsException.JmsMatsJmsException
- (For StageProcessors) Before going into MessageConsumer.receive() - if
-
getSession
public javax.jms.Session getSession()- Specified by:
getSession
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
- Returns:
- the JMS Session. It will be the same instance every time.
-
getDefaultNoDestinationMessageProducer
public javax.jms.MessageProducer getDefaultNoDestinationMessageProducer()- Specified by:
getDefaultNoDestinationMessageProducer
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
- Returns:
- the default non-specific
MessageProducer
that goes along withthe JMS Session
.
-
close
public void close()Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolder
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.- Specified by:
close
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-
release
public void release()Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolder
For 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 beenclosed
orcrashed
when inside theJmsMatsTransactionManager
, in which case it should probably effectively act as a no-op.- Specified by:
release
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-
crashed
Description copied from interface:JmsMatsJmsSessionHandler.JmsSessionHolder
Notifies 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:
crashed
in interfaceJmsMatsJmsSessionHandler.JmsSessionHolder
-