Class UserCredentialsConnectionFactoryAdapter
- All Implemented Interfaces:
ConnectionFactory
,QueueConnectionFactory
,TopicConnectionFactory
,InitializingBean
ConnectionFactory
, applying the
given user credentials to every standard createConnection()
call,
that is, implicitly invoking createConnection(username, password)
on the target. All other methods simply delegate to the corresponding methods
of the target ConnectionFactory.
Can be used to proxy a target JNDI ConnectionFactory that does not have user
credentials configured. Client code can work with the ConnectionFactory without
passing in username and password on every createConnection()
call.
In the following example, client code can simply transparently work with the preconfigured "myConnectionFactory", implicitly accessing "myTargetConnectionFactory" with the specified user credentials.
<bean id="myTargetConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jms/mycf"/> </bean> <bean id="myConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"> <property name="targetConnectionFactory" ref="myTargetConnectionFactory"/> <property name="username" value="myusername"/> <property name="password" value="mypassword"/> </bean>
If the "username" is empty, this proxy will simply delegate to the standard
createConnection()
method of the target ConnectionFactory.
This can be used to keep a UserCredentialsConnectionFactoryAdapter bean
definition just for the option of implicitly passing in user credentials
if the particular target ConnectionFactory requires it.
As of Spring Framework 5, this class delegates JMS 2.0 JMSContext
calls and therefore requires the JMS 2.0 API to be present at runtime.
It may nevertheless run against a JMS 1.1 driver (bound to the JMS 2.0 API)
as long as no actual JMS 2.0 calls are triggered by the application's setup.
- Since:
- 1.2
- Author:
- Juergen Hoeller
- See Also:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.final Connection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e.createConnection
(String username, String password) Delegate the call straight to the target ConnectionFactory.createContext
(int sessionMode) createContext
(String userName, String password) createContext
(String userName, String password, int sessionMode) final QueueConnection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e.createQueueConnection
(String username, String password) Delegate the call straight to the target QueueConnectionFactory.final TopicConnection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e.createTopicConnection
(String username, String password) Delegate the call straight to the target TopicConnectionFactory.protected Connection
doCreateConnection
(String username, String password) This implementation delegates to thecreateConnection(username, password)
method of the target ConnectionFactory, passing in the specified user credentials.protected QueueConnection
doCreateQueueConnection
(String username, String password) This implementation delegates to thecreateQueueConnection(username, password)
method of the target QueueConnectionFactory, passing in the specified user credentials.protected TopicConnection
doCreateTopicConnection
(String username, String password) This implementation delegates to thecreateTopicConnection(username, password)
method of the target TopicConnectionFactory, passing in the specified user credentials.void
Remove any user credentials for this proxy from the current thread.void
setCredentialsForCurrentThread
(String username, String password) Set user credentials for this proxy and the current thread.void
setPassword
(String password) Set the password that this adapter should use for retrieving Connections.void
setTargetConnectionFactory
(ConnectionFactory targetConnectionFactory) Set the target ConnectionFactory that this ConnectionFactory should delegate to.void
setUsername
(String username) Set the username that this adapter should use for retrieving Connections.
-
Constructor Details
-
UserCredentialsConnectionFactoryAdapter
public UserCredentialsConnectionFactoryAdapter()
-
-
Method Details
-
setTargetConnectionFactory
Set the target ConnectionFactory that this ConnectionFactory should delegate to. -
setUsername
Set the username that this adapter should use for retrieving Connections. Default is no specific user. -
setPassword
Set the password that this adapter should use for retrieving Connections. Default is no specific password. -
afterPropertiesSet
public void afterPropertiesSet()Description copied from interface:InitializingBean
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,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.
- Specified by:
afterPropertiesSet
in interfaceInitializingBean
-
setCredentialsForCurrentThread
Set user credentials for this proxy and the current thread. The given username and password will be applied to all subsequentcreateConnection()
calls on this ConnectionFactory proxy.This will override any statically specified user credentials, that is, values of the "username" and "password" bean properties.
- Parameters:
username
- the username to applypassword
- the password to apply- See Also:
-
removeCredentialsFromCurrentThread
public void removeCredentialsFromCurrentThread()Remove any user credentials for this proxy from the current thread. Statically specified user credentials apply again afterwards. -
createConnection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e. values of the bean properties) otherwise.- Specified by:
createConnection
in interfaceConnectionFactory
- Throws:
JMSException
- See Also:
-
createConnection
Delegate the call straight to the target ConnectionFactory.- Specified by:
createConnection
in interfaceConnectionFactory
- Throws:
JMSException
-
doCreateConnection
protected Connection doCreateConnection(@Nullable String username, @Nullable String password) throws JMSException This implementation delegates to thecreateConnection(username, password)
method of the target ConnectionFactory, passing in the specified user credentials. If the specified username is empty, it will simply delegate to the standardcreateConnection()
method of the target ConnectionFactory.- Parameters:
username
- the username to usepassword
- the password to use- Returns:
- the Connection
- Throws:
JMSException
- See Also:
-
createQueueConnection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e. values of the bean properties) else.- Specified by:
createQueueConnection
in interfaceQueueConnectionFactory
- Throws:
JMSException
- See Also:
-
createQueueConnection
Delegate the call straight to the target QueueConnectionFactory.- Specified by:
createQueueConnection
in interfaceQueueConnectionFactory
- Throws:
JMSException
-
doCreateQueueConnection
protected QueueConnection doCreateQueueConnection(@Nullable String username, @Nullable String password) throws JMSException This implementation delegates to thecreateQueueConnection(username, password)
method of the target QueueConnectionFactory, passing in the specified user credentials. If the specified username is empty, it will simply delegate to the standardcreateQueueConnection()
method of the target ConnectionFactory.- Parameters:
username
- the username to usepassword
- the password to use- Returns:
- the Connection
- Throws:
JMSException
- See Also:
-
createTopicConnection
Determine whether there are currently thread-bound credentials, using them if available, falling back to the statically specified username and password (i.e. values of the bean properties) else.- Specified by:
createTopicConnection
in interfaceTopicConnectionFactory
- Throws:
JMSException
- See Also:
-
createTopicConnection
Delegate the call straight to the target TopicConnectionFactory.- Specified by:
createTopicConnection
in interfaceTopicConnectionFactory
- Throws:
JMSException
-
doCreateTopicConnection
protected TopicConnection doCreateTopicConnection(@Nullable String username, @Nullable String password) throws JMSException This implementation delegates to thecreateTopicConnection(username, password)
method of the target TopicConnectionFactory, passing in the specified user credentials. If the specified username is empty, it will simply delegate to the standardcreateTopicConnection()
method of the target ConnectionFactory.- Parameters:
username
- the username to usepassword
- the password to use- Returns:
- the Connection
- Throws:
JMSException
- See Also:
-
createContext
- Specified by:
createContext
in interfaceConnectionFactory
-
createContext
- Specified by:
createContext
in interfaceConnectionFactory
-
createContext
- Specified by:
createContext
in interfaceConnectionFactory
-
createContext
- Specified by:
createContext
in interfaceConnectionFactory
-