public abstract class JmsAccessor extends java.lang.Object implements InitializingBean
JmsTemplate
and other
JMS-accessing gateway helpers, defining common properties such as the
JMS ConnectionFactory
to operate on. The subclass
JmsDestinationAccessor
adds further, destination-related properties.
Not intended to be used directly.
See JmsTemplate
.
JmsDestinationAccessor
,
JmsTemplate
Modifier and Type | Field and Description |
---|---|
protected Log |
logger
Logger available to subclasses.
|
Constructor and Description |
---|
JmsAccessor() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware , ApplicationContextAware etc. |
protected JmsException |
convertJmsAccessException(JMSException ex)
Convert the specified checked
JMSException to
a Spring runtime JmsException
equivalent. |
protected Connection |
createConnection()
Create a JMS Connection via this template's ConnectionFactory.
|
protected Session |
createSession(Connection con)
Create a JMS Session for the given Connection.
|
ConnectionFactory |
getConnectionFactory()
Return the ConnectionFactory that this accessor uses for obtaining
JMS
Connections . |
int |
getSessionAcknowledgeMode()
Return the acknowledgement mode for JMS
sessions . |
protected boolean |
isClientAcknowledge(Session session)
Determine whether the given Session is in client acknowledge mode.
|
boolean |
isSessionTransacted()
Return whether the JMS
sessions used by this
accessor are supposed to be transacted. |
protected ConnectionFactory |
obtainConnectionFactory()
Obtain the ConnectionFactory for actual use.
|
void |
setConnectionFactory(ConnectionFactory connectionFactory)
Set the ConnectionFactory to use for obtaining JMS
Connections . |
void |
setSessionAcknowledgeMode(int sessionAcknowledgeMode)
Set the JMS acknowledgement mode that is used when creating a JMS
Session to send a message. |
void |
setSessionAcknowledgeModeName(java.lang.String constantName)
Set the JMS acknowledgement mode by the name of the corresponding constant
in the JMS
Session interface, e.g. |
void |
setSessionTransacted(boolean sessionTransacted)
Set the transaction mode that is used when creating a JMS
Session . |
protected final Log logger
public void setConnectionFactory(@Nullable ConnectionFactory connectionFactory)
Connections
.@Nullable public ConnectionFactory getConnectionFactory()
Connections
.protected final ConnectionFactory obtainConnectionFactory()
null
)java.lang.IllegalStateException
- in case of no ConnectionFactory setpublic void setSessionTransacted(boolean sessionTransacted)
Session
.
Default is "false".
Note that within a JTA transaction, the parameters passed to
create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)
method are not taken into account. Depending on the Java EE transaction context,
the container makes its own decisions on these values. Analogously, these
parameters are not taken into account within a locally managed transaction
either, since the accessor operates on an existing JMS Session in this case.
Setting this flag to "true" will use a short local JMS transaction when running outside of a managed transaction, and a synchronized local JMS transaction in case of a managed transaction (other than an XA transaction) being present. This has the effect of a local JMS transaction being managed alongside the main transaction (which might be a native JDBC transaction), with the JMS transaction committing right after the main transaction.
Connection.createSession(boolean, int)
public boolean isSessionTransacted()
sessions
used by this
accessor are supposed to be transacted.setSessionTransacted(boolean)
public void setSessionAcknowledgeModeName(java.lang.String constantName)
Session
interface, e.g. "CLIENT_ACKNOWLEDGE".
If you want to use vendor-specific extensions to the acknowledgment mode,
use setSessionAcknowledgeMode(int)
instead.
constantName
- the name of the Session
acknowledge mode constantSession.AUTO_ACKNOWLEDGE
,
Session.CLIENT_ACKNOWLEDGE
,
Session.DUPS_OK_ACKNOWLEDGE
,
Connection.createSession(boolean, int)
public void setSessionAcknowledgeMode(int sessionAcknowledgeMode)
Session
to send a message.
Default is Session.AUTO_ACKNOWLEDGE
.
Vendor-specific extensions to the acknowledgment mode can be set here as well.
Note that inside an EJB, the parameters to the
create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)
method
are not taken into account. Depending on the transaction context in the EJB,
the container makes its own decisions on these values. See section 17.3.5
of the EJB spec.
sessionAcknowledgeMode
- the acknowledgement mode constantSession.AUTO_ACKNOWLEDGE
,
Session.CLIENT_ACKNOWLEDGE
,
Session.DUPS_OK_ACKNOWLEDGE
,
Connection.createSession(boolean, int)
public int getSessionAcknowledgeMode()
sessions
.public void afterPropertiesSet()
InitializingBean
BeanFactory
after it has set all bean properties
and satisfied BeanFactoryAware
, ApplicationContextAware
etc.
This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet
in interface InitializingBean
protected JmsException convertJmsAccessException(JMSException ex)
JMSException
to
a Spring runtime JmsException
equivalent.
The default implementation delegates to the
JmsUtils.convertJmsAccessException(javax.jms.JMSException)
method.
ex
- the original checked JMSException
to convertJmsException
wrapping ex
JmsUtils.convertJmsAccessException(javax.jms.JMSException)
protected Connection createConnection() throws JMSException
This implementation uses JMS 1.1 API.
JMSException
- if thrown by JMS API methodsConnectionFactory.createConnection()
protected Session createSession(Connection con) throws JMSException
This implementation uses JMS 1.1 API.
con
- the JMS Connection to create a Session forJMSException
- if thrown by JMS API methodsConnection.createSession(boolean, int)
protected boolean isClientAcknowledge(Session session) throws JMSException
This implementation uses JMS 1.1 API.
session
- the JMS Session to checkJMSException
- if thrown by JMS API methodsSession.getAcknowledgeMode()
,
Session.CLIENT_ACKNOWLEDGE