public class UserCredentialsConnectionFactoryAdapter extends Object implements 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.
createConnection()
,
createQueueConnection()
,
createTopicConnection()
Constructor and Description |
---|
UserCredentialsConnectionFactoryAdapter() |
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. |
Connection |
createConnection()
Determine whether there are currently thread-bound credentials,
using them if available, falling back to the statically specified
username and password (i.e.
|
Connection |
createConnection(String username,
String password)
Delegate the call straight to the target ConnectionFactory.
|
JMSContext |
createContext() |
JMSContext |
createContext(int sessionMode) |
JMSContext |
createContext(String userName,
String password) |
JMSContext |
createContext(String userName,
String password,
int sessionMode) |
QueueConnection |
createQueueConnection()
Determine whether there are currently thread-bound credentials,
using them if available, falling back to the statically specified
username and password (i.e.
|
QueueConnection |
createQueueConnection(String username,
String password)
Delegate the call straight to the target QueueConnectionFactory.
|
TopicConnection |
createTopicConnection()
Determine whether there are currently thread-bound credentials,
using them if available, falling back to the statically specified
username and password (i.e.
|
TopicConnection |
createTopicConnection(String username,
String password)
Delegate the call straight to the target TopicConnectionFactory.
|
protected Connection |
doCreateConnection(String username,
String password)
This implementation delegates to the
createConnection(username, password)
method of the target ConnectionFactory, passing in the specified user credentials. |
protected QueueConnection |
doCreateQueueConnection(String username,
String password)
This implementation delegates to the
createQueueConnection(username, password)
method of the target QueueConnectionFactory, passing in the specified user credentials. |
protected TopicConnection |
doCreateTopicConnection(String username,
String password)
This implementation delegates to the
createTopicConnection(username, password)
method of the target TopicConnectionFactory, passing in the specified user credentials. |
void |
removeCredentialsFromCurrentThread()
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.
|
public UserCredentialsConnectionFactoryAdapter()
public void setTargetConnectionFactory(ConnectionFactory targetConnectionFactory)
public void setUsername(String username)
public void setPassword(String password)
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
public void setCredentialsForCurrentThread(String username, String password)
createConnection()
calls on this ConnectionFactory proxy.
This will override any statically specified user credentials, that is, values of the "username" and "password" bean properties.
username
- the username to applypassword
- the password to applyremoveCredentialsFromCurrentThread()
public void removeCredentialsFromCurrentThread()
public final Connection createConnection() throws JMSException
createConnection
in interface ConnectionFactory
JMSException
doCreateConnection(java.lang.String, java.lang.String)
public Connection createConnection(String username, String password) throws JMSException
createConnection
in interface ConnectionFactory
JMSException
protected Connection doCreateConnection(@Nullable String username, @Nullable String password) throws JMSException
createConnection(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 standard
createConnection()
method of the target ConnectionFactory.username
- the username to usepassword
- the password to useJMSException
ConnectionFactory.createConnection(String, String)
,
ConnectionFactory.createConnection()
public final QueueConnection createQueueConnection() throws JMSException
createQueueConnection
in interface QueueConnectionFactory
JMSException
doCreateQueueConnection(java.lang.String, java.lang.String)
public QueueConnection createQueueConnection(String username, String password) throws JMSException
createQueueConnection
in interface QueueConnectionFactory
JMSException
protected QueueConnection doCreateQueueConnection(@Nullable String username, @Nullable String password) throws JMSException
createQueueConnection(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 standard
createQueueConnection()
method of the target ConnectionFactory.username
- the username to usepassword
- the password to useJMSException
QueueConnectionFactory.createQueueConnection(String, String)
,
QueueConnectionFactory.createQueueConnection()
public final TopicConnection createTopicConnection() throws JMSException
createTopicConnection
in interface TopicConnectionFactory
JMSException
doCreateTopicConnection(java.lang.String, java.lang.String)
public TopicConnection createTopicConnection(String username, String password) throws JMSException
createTopicConnection
in interface TopicConnectionFactory
JMSException
protected TopicConnection doCreateTopicConnection(@Nullable String username, @Nullable String password) throws JMSException
createTopicConnection(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 standard
createTopicConnection()
method of the target ConnectionFactory.username
- the username to usepassword
- the password to useJMSException
TopicConnectionFactory.createTopicConnection(String, String)
,
TopicConnectionFactory.createTopicConnection()
public JMSContext createContext()
createContext
in interface ConnectionFactory
public JMSContext createContext(String userName, String password)
createContext
in interface ConnectionFactory
public JMSContext createContext(String userName, String password, int sessionMode)
createContext
in interface ConnectionFactory
public JMSContext createContext(int sessionMode)
createContext
in interface ConnectionFactory