org.springframework.jca.cci.core

## Class CciTemplate

- java.lang.Object
- - org.springframework.jca.cci.core.CciTemplate

- All Implemented Interfaces:
    CciOperations

      public class CciTemplate
      extends Object
      implements CciOperations

  This is the central class in the CCI core package. It simplifies the use of CCI and helps to avoid common errors. It executes core CCI workflow, leaving application code to provide parameters to CCI and extract results. This class executes EIS queries or updates, catching ResourceExceptions and translating them to the generic exception hierarchy defined in the `org.springframework.dao` package.

  Code using this class can pass in and receive `Record` instances, or alternatively implement callback interfaces for creating input Records and extracting result objects from output Records (or CCI ResultSets).

  Can be used within a service implementation via direct instantiation with a ConnectionFactory reference, or get prepared in an application context and given to services as bean reference. Note: The ConnectionFactory should always be configured as a bean in the application context, in the first case given to the service directly, in the second case to the prepared template.

  Since:
    1.2
  Author:
    Thierry Templier, Juergen Hoeller
  See Also:
    `RecordCreator`, `RecordExtractor`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `CciTemplate()` Construct a new CciTemplate for bean usage.
    `CciTemplate(ConnectionFactory connectionFactory)` Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from.
    `CciTemplate(ConnectionFactory connectionFactory, ConnectionSpec connectionSpec)` Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()`
    `IndexedRecord` | `createIndexedRecord(String name)` Create an indexed Record through the ConnectionFactory's RecordFactory.
    `MappedRecord` | `createMappedRecord(String name)` Create a mapped Record from the ConnectionFactory's RecordFactory.
    `protected Record` | `createRecord(RecordCreator recordCreator)` Invoke the given RecordCreator, converting JCA ResourceExceptions to Spring's DataAccessException hierarchy.
    `protected <T> T` | `doExecute(InteractionSpec spec, Record inputRecord, Record outputRecord, RecordExtractor<T> outputExtractor)` Execute the specified interaction on an EIS with CCI.
    `<T> T` | `execute(ConnectionCallback<T> action)` Execute a request on an EIS with CCI, implemented as callback action working on a CCI Connection.
    `<T> T` | `execute(InteractionCallback<T> action)` Execute a request on an EIS with CCI, implemented as callback action working on a CCI Interaction.
    `Record` | `execute(InteractionSpec spec, Record inputRecord)` Execute the specified interaction on an EIS with CCI.
    `Record` | `execute(InteractionSpec spec, RecordCreator inputCreator)` Execute the specified interaction on an EIS with CCI.
    `<T> T` | `execute(InteractionSpec spec, RecordCreator inputCreator, RecordExtractor<T> outputExtractor)` Execute the specified interaction on an EIS with CCI.
    `void` | `execute(InteractionSpec spec, Record inputRecord, Record outputRecord)` Execute the specified interaction on an EIS with CCI.
    `<T> T` | `execute(InteractionSpec spec, Record inputRecord, RecordExtractor<T> outputExtractor)` Execute the specified interaction on an EIS with CCI.
    `ConnectionFactory` | `getConnectionFactory()` Return the CCI ConnectionFactory used by this template.
    `ConnectionSpec` | `getConnectionSpec()` Return the CCI ConnectionSpec used by this template, if any.
    `CciTemplate` | `getDerivedTemplate(ConnectionSpec connectionSpec)` Create a template derived from this template instance, inheriting the ConnectionFactory and other settings but overriding the ConnectionSpec used for obtaining Connections.
    `RecordCreator` | `getOutputRecordCreator()` Return a RecordCreator that should be used for creating default output Records.
    `protected RecordFactory` | `getRecordFactory(ConnectionFactory connectionFactory)` Return a RecordFactory for the given ConnectionFactory.
    `void` | `setConnectionFactory(ConnectionFactory connectionFactory)` Set the CCI ConnectionFactory to obtain Connections from.
    `void` | `setConnectionSpec(ConnectionSpec connectionSpec)` Set the CCI ConnectionSpec that this template instance is supposed to obtain Connections for.
    `void` | `setOutputRecordCreator(RecordCreator creator)` Set a RecordCreator that should be used for creating default output Records.

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

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

- - ### Constructor Detail

    - #### CciTemplate

          public CciTemplate()

      Construct a new CciTemplate for bean usage.

      Note: The ConnectionFactory has to be set before using the instance.

      See Also:
        `setConnectionFactory(javax.resource.cci.ConnectionFactory)`

    - #### CciTemplate

          public CciTemplate(ConnectionFactory connectionFactory)

      Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from. Note: This will trigger eager initialization of the exception translator.
      Parameters:
        `connectionFactory` - JCA ConnectionFactory to obtain Connections from

    - #### CciTemplate

          public CciTemplate(ConnectionFactory connectionFactory,
                     ConnectionSpec connectionSpec)

      Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from. Note: This will trigger eager initialization of the exception translator.
      Parameters:
        `connectionFactory` - JCA ConnectionFactory to obtain Connections from
        `connectionSpec` - the CCI ConnectionSpec to obtain Connections for (may be `null`)

  - ### Method Detail

    - #### setConnectionFactory

          public void setConnectionFactory(ConnectionFactory connectionFactory)

      Set the CCI ConnectionFactory to obtain Connections from.

    - #### getConnectionFactory

          public ConnectionFactory getConnectionFactory()

      Return the CCI ConnectionFactory used by this template.

    - #### setConnectionSpec

          public void setConnectionSpec(ConnectionSpec connectionSpec)

      Set the CCI ConnectionSpec that this template instance is supposed to obtain Connections for.

    - #### getConnectionSpec

          public ConnectionSpec getConnectionSpec()

      Return the CCI ConnectionSpec used by this template, if any.

    - #### setOutputRecordCreator

          public void setOutputRecordCreator(RecordCreator creator)

      Set a RecordCreator that should be used for creating default output Records.

      Default is none: When no explicit output Record gets passed into an `execute` method, CCI's `Interaction.execute` variant that returns an output Record will be called.

      Specify a RecordCreator here if you always need to call CCI's `Interaction.execute` variant with a passed-in output Record. Unless there is an explicitly specified output Record, CciTemplate will then invoke this RecordCreator to create a default output Record instance.

      See Also:
        `Interaction.execute(javax.resource.cci.InteractionSpec, Record)`, `Interaction.execute(javax.resource.cci.InteractionSpec, Record, Record)`

    - #### getOutputRecordCreator

          public RecordCreator getOutputRecordCreator()

      Return a RecordCreator that should be used for creating default output Records.

    - #### afterPropertiesSet

          public void afterPropertiesSet()

    - #### getDerivedTemplate

          public CciTemplate getDerivedTemplate(ConnectionSpec connectionSpec)

      Create a template derived from this template instance, inheriting the ConnectionFactory and other settings but overriding the ConnectionSpec used for obtaining Connections.
      Parameters:
        `connectionSpec` - the CCI ConnectionSpec that the derived template instance is supposed to obtain Connections for
      Returns:
        the derived template instance
      See Also:
        `setConnectionSpec(javax.resource.cci.ConnectionSpec)`

    - #### execute

          public <T> T execute(ConnectionCallback<T> action)
                    throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute a request on an EIS with CCI, implemented as callback action working on a CCI Connection. This allows for implementing arbitrary data access operations, within Spring's managed CCI environment: that is, participating in Spring-managed transactions and converting JCA ResourceExceptions into Spring's DataAccessException hierarchy.

      The callback action can return a result object, for example a domain object or a collection of domain objects.

      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `action` - the callback object that specifies the action
      Returns:
        the result object returned by the action, if any
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public <T> T execute(InteractionCallback<T> action)
                    throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute a request on an EIS with CCI, implemented as callback action working on a CCI Interaction. This allows for implementing arbitrary data access operations on a single Interaction, within Spring's managed CCI environment: that is, participating in Spring-managed transactions and converting JCA ResourceExceptions into Spring's DataAccessException hierarchy.

      The callback action can return a result object, for example a domain object or a collection of domain objects.

      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `action` - the callback object that specifies the action
      Returns:
        the result object returned by the action, if any
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public Record execute(InteractionSpec spec,
                       Record inputRecord)
                         throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute the specified interaction on an EIS with CCI.
      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputRecord` - the input record
      Returns:
        the output record
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public void execute(InteractionSpec spec,
                     Record inputRecord,
                     Record outputRecord)
                       throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute the specified interaction on an EIS with CCI.
      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputRecord` - the input record
        `outputRecord` - the output record
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public Record execute(InteractionSpec spec,
                       RecordCreator inputCreator)
                         throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute the specified interaction on an EIS with CCI.
      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputCreator` - object that creates the input record to use
      Returns:
        the output record
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public <T> T execute(InteractionSpec spec,
                      Record inputRecord,
                      RecordExtractor<T> outputExtractor)
                    throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute the specified interaction on an EIS with CCI.
      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputRecord` - the input record
        `outputExtractor` - object to convert the output record to a result object
      Returns:
        the output data extracted with the RecordExtractor object
      Throws:
        `DataAccessException` - if there is any problem

    - #### execute

          public <T> T execute(InteractionSpec spec,
                      RecordCreator inputCreator,
                      RecordExtractor<T> outputExtractor)
                    throws DataAccessException

      Description copied from interface: `CciOperations`
      Execute the specified interaction on an EIS with CCI.
      Specified by:
        `execute` in interface `CciOperations`
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputCreator` - object that creates the input record to use
        `outputExtractor` - object to convert the output record to a result object
      Returns:
        the output data extracted with the RecordExtractor object
      Throws:
        `DataAccessException` - if there is any problem

    - #### doExecute

          protected <T> T doExecute(InteractionSpec spec,
                        Record inputRecord,
                        Record outputRecord,
                        RecordExtractor<T> outputExtractor)
                         throws DataAccessException

      Execute the specified interaction on an EIS with CCI. All other interaction execution methods go through this.
      Parameters:
        `spec` - the CCI InteractionSpec instance that defines the interaction (connector-specific)
        `inputRecord` - the input record
        `outputRecord` - output record (can be `null`)
        `outputExtractor` - object to convert the output record to a result object
      Returns:
        the output data extracted with the RecordExtractor object
      Throws:
        `DataAccessException` - if there is any problem

    - #### createIndexedRecord

          public IndexedRecord createIndexedRecord(String name)
                                            throws DataAccessException

      Create an indexed Record through the ConnectionFactory's RecordFactory.
      Parameters:
        `name` - the name of the record
      Returns:
        the Record
      Throws:
        `DataAccessException` - if creation of the Record failed
      See Also:
        `getRecordFactory(javax.resource.cci.ConnectionFactory)`, `RecordFactory.createIndexedRecord(String)`

    - #### createMappedRecord

          public MappedRecord createMappedRecord(String name)
                                          throws DataAccessException

      Create a mapped Record from the ConnectionFactory's RecordFactory.
      Parameters:
        `name` - record name
      Returns:
        the Record
      Throws:
        `DataAccessException` - if creation of the Record failed
      See Also:
        `getRecordFactory(javax.resource.cci.ConnectionFactory)`, `RecordFactory.createMappedRecord(String)`

    - #### createRecord

          protected Record createRecord(RecordCreator recordCreator)
                                 throws DataAccessException

      Invoke the given RecordCreator, converting JCA ResourceExceptions to Spring's DataAccessException hierarchy.
      Parameters:
        `recordCreator` - the RecordCreator to invoke
      Returns:
        the created Record
      Throws:
        `DataAccessException` - if creation of the Record failed
      See Also:
        `getRecordFactory(javax.resource.cci.ConnectionFactory)`, `RecordCreator.createRecord(javax.resource.cci.RecordFactory)`

    - #### getRecordFactory

          protected RecordFactory getRecordFactory(ConnectionFactory connectionFactory)
                                            throws ResourceException

      Return a RecordFactory for the given ConnectionFactory.

      Default implementation returns the connector's RecordFactory if available, falling back to a NotSupportedRecordFactory placeholder. This allows to invoke a RecordCreator callback with a non-null RecordFactory reference in any case.

      Parameters:
        `connectionFactory` - the CCI ConnectionFactory
      Returns:
        the CCI RecordFactory for the ConnectionFactory
      Throws:
        `ResourceException` - if thrown by CCI methods
      See Also:
        `NotSupportedRecordFactory`