public abstract class JmsAccessor extends 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 a BeanFactory after it has set all bean properties supplied
(and satisfied BeanFactoryAware and ApplicationContextAware).
|
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. |
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(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(ConnectionFactory connectionFactory)
Connections
.public ConnectionFactory getConnectionFactory()
Connections
.public 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 J2EE 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. The latter 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(String constantName)
Session
interface, e.g. "CLIENT_ACKNOWLEDGE".
If you want to use vendor-specific extensions to the acknowledgment mode,
use setSessionAcknowledgeModeName(String)
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 that inside an EJB the parameters to 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
This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.
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