UserCredentialsConnectionFactoryAdapter (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.jms.connection

## Class UserCredentialsConnectionFactoryAdapter

- java.lang.Object
- - org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter

- All Implemented Interfaces:
    ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory, InitializingBean

      public class UserCredentialsConnectionFactoryAdapter
      extends Object
      implements ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory, InitializingBean

  An adapter for a target JMS `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.

  Since:
    1.2
  Author:
    Juergen Hoeller
  See Also:
    `createConnection()`, `createQueueConnection()`, `createTopicConnection()`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `UserCredentialsConnectionFactoryAdapter()`

  - ### Method Summary

    Methods
    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).
    `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.
    `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 credententials 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.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### UserCredentialsConnectionFactoryAdapter

          public UserCredentialsConnectionFactoryAdapter()

  - ### Method Detail

    - #### setTargetConnectionFactory

          public void setTargetConnectionFactory(ConnectionFactory targetConnectionFactory)

      Set the target ConnectionFactory that this ConnectionFactory should delegate to.

    - #### setUsername

          public void setUsername(String username)

      Set the username that this adapter should use for retrieving Connections. Default is no specific user.

    - #### setPassword

          public void setPassword(String password)

      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 a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

      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.

      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`

    - #### setCredentialsForCurrentThread

          public void setCredentialsForCurrentThread(String username,
                                            String password)

      Set user credententials for this proxy and the current thread. The given username and password will be applied to all subsequent `createConnection()` 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 apply
        `password` - the password to apply
      See Also:
        `removeCredentialsFromCurrentThread()`

    - #### removeCredentialsFromCurrentThread

          public void removeCredentialsFromCurrentThread()

      Remove any user credentials for this proxy from the current thread. Statically specified user credentials apply again afterwards.
      See Also:
        `setCredentialsForCurrentThread(java.lang.String, java.lang.String)`

    - #### createConnection

          public final Connection createConnection()
                                            throws JMSException

      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:
        `createConnection` in interface `ConnectionFactory`
      Throws:
        `JMSException`
      See Also:
        `doCreateConnection(java.lang.String, java.lang.String)`

    - #### createConnection

          public Connection createConnection(String username,
                                    String password)
                                      throws JMSException

      Delegate the call straight to the target ConnectionFactory.
      Specified by:
        `createConnection` in interface `ConnectionFactory`
      Throws:
        `JMSException`

    - #### doCreateConnection

          protected Connection doCreateConnection(String username,
                                      String password)
                                           throws JMSException

      This implementation delegates to the `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.
      Parameters:
        `username` - the username to use
        `password` - the password to use
      Returns:
        the Connection
      Throws:
        `JMSException`
      See Also:
        `ConnectionFactory.createConnection(String, String)`, `ConnectionFactory.createConnection()`

    - #### createQueueConnection

          public final QueueConnection createQueueConnection()
                                                      throws JMSException

      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 interface `QueueConnectionFactory`
      Throws:
        `JMSException`
      See Also:
        `doCreateQueueConnection(java.lang.String, java.lang.String)`

    - #### createQueueConnection

          public QueueConnection createQueueConnection(String username,
                                              String password)
                                                throws JMSException

      Delegate the call straight to the target QueueConnectionFactory.
      Specified by:
        `createQueueConnection` in interface `QueueConnectionFactory`
      Throws:
        `JMSException`

    - #### doCreateQueueConnection

          protected QueueConnection doCreateQueueConnection(String username,
                                                String password)
                                                     throws JMSException

      This implementation delegates to the `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.
      Parameters:
        `username` - the username to use
        `password` - the password to use
      Returns:
        the Connection
      Throws:
        `JMSException`
      See Also:
        `QueueConnectionFactory.createQueueConnection(String, String)`, `QueueConnectionFactory.createQueueConnection()`

    - #### createTopicConnection

          public final TopicConnection createTopicConnection()
                                                      throws JMSException

      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 interface `TopicConnectionFactory`
      Throws:
        `JMSException`
      See Also:
        `doCreateTopicConnection(java.lang.String, java.lang.String)`

    - #### createTopicConnection

          public TopicConnection createTopicConnection(String username,
                                              String password)
                                                throws JMSException

      Delegate the call straight to the target TopicConnectionFactory.
      Specified by:
        `createTopicConnection` in interface `TopicConnectionFactory`
      Throws:
        `JMSException`

    - #### doCreateTopicConnection

          protected TopicConnection doCreateTopicConnection(String username,
                                                String password)
                                                     throws JMSException

      This implementation delegates to the `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.
      Parameters:
        `username` - the username to use
        `password` - the password to use
      Returns:
        the Connection
      Throws:
        `JMSException`
      See Also:
        `TopicConnectionFactory.createTopicConnection(String, String)`, `TopicConnectionFactory.createTopicConnection()`