public static interface JmsMatsJmsSessionHandler.JmsSessionHolder
Modifier and Type | Method and Description |
---|---|
void |
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 |
crashed(java.lang.Throwable t)
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 the
isSessionOk() returned false . |
javax.jms.MessageProducer |
getDefaultNoDestinationMessageProducer() |
javax.jms.Session |
getSession() |
void |
isSessionOk()
Shall be invoked at these points, with the action to perform if it raises
JmsMatsException.JmsMatsJmsException . |
void |
release()
For Initiators: This returns the JmsSessionHolder to the Session Pool for the underlying Connection.
|
void isSessionOk() throws JmsMatsException.JmsMatsJmsException
JmsMatsException.JmsMatsJmsException
.
JmsMatsException.JmsMatsJmsException
is
raised, close()
or 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]JmsMatsException.JmsMatsJmsException
is raised, rollback shall be performed, close()
or
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.]javax.jms.Session getSession()
javax.jms.MessageProducer getDefaultNoDestinationMessageProducer()
MessageProducer
that goes along with the JMS
Session
.void close()
void release()
closed
or crashed
when inside the
JmsMatsTransactionManager
, in which case it should probably effectively act as a no-op.void crashed(java.lang.Throwable t)
isSessionOk()
returned false
.
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 close()
, i.e. "come home as agreed upon,
whatever the state you are in".