## org.springframework.jca.cci.connection
Class ConnectionSpecConnectionFactoryAdapter

    java.lang.Object
      org.springframework.jca.cci.connection.DelegatingConnectionFactory
          org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter

All Implemented Interfaces:
  Serializable, Referenceable, ConnectionFactory, InitializingBean

    public class ConnectionSpecConnectionFactoryAdapter

extends DelegatingConnectionFactory

An adapter for a target CCI `ConnectionFactory`, applying the given ConnectionSpec to every standard `getConnection()` call, that is, implicitly invoking `getConnection(ConnectionSpec)` 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 a ConnectionSpec configured. Client code can work with the ConnectionFactory without passing in a ConnectionSpec on every `getConnection()` 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/cci/mycf"/>
     </bean>

     <bean id="myConnectionFactory" class="org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter">
       <property name="targetConnectionFactory" ref="myTargetConnectionFactory"/>
       <property name="connectionSpec">
         <bean class="your.resource.adapter.ConnectionSpecImpl">
           <property name="username" value="myusername"/>
           <property name="password" value="mypassword"/>
         </bean>
       </property>
     </bean>

If the "connectionSpec" is empty, this proxy will simply delegate to the standard `getConnection()` method of the target ConnectionFactory. This can be used to keep a UserCredentialsConnectionFactoryAdapter bean definition just for the option of implicitly passing in a ConnectionSpec if the particular target ConnectionFactory requires it.

Since:
  1.2
Author:
  Juergen Hoeller
See Also:
  `getConnection()`, Serialized Form

Constructor Summary
`ConnectionSpecConnectionFactoryAdapter()`

Method Summary
`protected Connection` `doGetConnection(ConnectionSpec spec)` This implementation delegates to the `getConnection(ConnectionSpec)` method of the target ConnectionFactory, passing in the specified user credentials.
`Connection` `getConnection()` Determine whether there is currently a thread-bound ConnectionSpec, using it if available, falling back to the statically specified "connectionSpec" property else.
`void` `removeConnectionSpecFromCurrentThread()` Remove any ConnectionSpec for this proxy from the current thread.
`void` `setConnectionSpec(ConnectionSpec connectionSpec)` Set the ConnectionSpec that this adapter should use for retrieving Connections.
`void` `setConnectionSpecForCurrentThread(ConnectionSpec spec)` Set a ConnectionSpec for this proxy and the current thread.

Methods inherited from class org.springframework.jca.cci.connection.DelegatingConnectionFactory
`afterPropertiesSet, getConnection, getMetaData, getRecordFactory, getReference, getTargetConnectionFactory, setReference, setTargetConnectionFactory`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ConnectionSpecConnectionFactoryAdapter

    public ConnectionSpecConnectionFactoryAdapter()

Method Detail

### setConnectionSpec

    public void setConnectionSpec(ConnectionSpec connectionSpec)

  Set the ConnectionSpec that this adapter should use for retrieving Connections. Default is none.

### setConnectionSpecForCurrentThread

    public void setConnectionSpecForCurrentThread(ConnectionSpec spec)

  Set a ConnectionSpec for this proxy and the current thread. The given ConnectionSpec will be applied to all subsequent `getConnection()` calls on this ConnectionFactory proxy.

  This will override any statically specified "connectionSpec" property.

  Parameters:
    `spec` - the ConnectionSpec to apply
  See Also:
    `removeConnectionSpecFromCurrentThread()`

### removeConnectionSpecFromCurrentThread

    public void removeConnectionSpecFromCurrentThread()

  Remove any ConnectionSpec for this proxy from the current thread. A statically specified ConnectionSpec applies again afterwards.

  See Also:
    `setConnectionSpecForCurrentThread(javax.resource.cci.ConnectionSpec)`

### getConnection

    public final Connection getConnection()
                                   throws ResourceException

  Determine whether there is currently a thread-bound ConnectionSpec, using it if available, falling back to the statically specified "connectionSpec" property else.

  Specified by:
    `getConnection` in interface `ConnectionFactory`
  Overrides:
    `getConnection` in class `DelegatingConnectionFactory`
  Throws:
    `ResourceException`
  See Also:
    `doGetConnection(javax.resource.cci.ConnectionSpec)`

### doGetConnection

    protected Connection doGetConnection(ConnectionSpec spec)
                                  throws ResourceException

  This implementation delegates to the `getConnection(ConnectionSpec)` method of the target ConnectionFactory, passing in the specified user credentials. If the specified username is empty, it will simply delegate to the standard `getConnection()` method of the target ConnectionFactory.

  Parameters:
    `spec` - the ConnectionSpec to apply
  Returns:
    the Connection
  Throws:
    `ResourceException`
  See Also:
    `ConnectionFactory.getConnection(javax.resource.cci.ConnectionSpec)`, `ConnectionFactory.getConnection()`