org.springframework.jca.cci.core

## Interface ConnectionCallback<T>

-     public interface ConnectionCallback<T>

  Generic callback interface for code that operates on a CCI Connection. Allows to execute any number of operations on a single Connection, using any type and number of Interaction.

  This is particularly useful for delegating to existing data access code that expects a Connection to work on and throws ResourceException. For newly written code, it is strongly recommended to use CciTemplate's more specific `execute` variants.

  Since:
    1.2
  Author:
    Thierry Templier, Juergen Hoeller
  See Also:
    `CciTemplate.execute(ConnectionCallback)`, `CciTemplate.execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record)`, `CciTemplate.execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `T` | `doInConnection(Connection connection, ConnectionFactory connectionFactory)` Gets called by `CciTemplate.execute` with an active CCI Connection.

- - ### Method Detail

    - #### doInConnection

          T doInConnection(Connection connection,
                           ConnectionFactory connectionFactory)
                    throws ResourceException,
                           SQLException,
                           DataAccessException

      Gets called by `CciTemplate.execute` with an active CCI Connection. Does not need to care about activating or closing the Connection, or handling transactions.

      If called without a thread-bound CCI transaction (initiated by CciLocalTransactionManager), the code will simply get executed on the CCI Connection with its transactional semantics. If CciTemplate is configured to use a JTA-aware ConnectionFactory, the CCI Connection and thus the callback code will be transactional if a JTA transaction is active.

      Allows for returning a result object created within the callback, i.e. a domain object or a collection of domain objects. Note that there's special support for single step actions: see the `CciTemplate.execute` variants. A thrown RuntimeException is treated as application exception: it gets propagated to the caller of the template.

      Parameters:
        `connection` - active CCI Connection
        `connectionFactory` - the CCI ConnectionFactory that the Connection was created with (gives access to RecordFactory and ResourceAdapterMetaData)
      Returns:
        a result object, or `null` if none
      Throws:
        `ResourceException` - if thrown by a CCI method, to be auto-converted to a DataAccessException
        `SQLException` - if thrown by a ResultSet method, to be auto-converted to a DataAccessException
        `DataAccessException` - in case of custom exceptions
      See Also:
        `ConnectionFactory.getRecordFactory()`, `ConnectionFactory.getMetaData()`, `CciTemplate.execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)`