org.springframework.jca.endpoint

## Class AbstractMessageEndpointFactory.AbstractMessageEndpoint

- java.lang.Object
- - org.springframework.jca.endpoint.AbstractMessageEndpointFactory.AbstractMessageEndpoint

- All Implemented Interfaces:
    MessageEndpoint
  Enclosing class:
    AbstractMessageEndpointFactory

      protected abstract class AbstractMessageEndpointFactory.AbstractMessageEndpoint
      extends Object
      implements MessageEndpoint

  Inner class for actual endpoint implementations, based on template method to allow for any kind of concrete endpoint implementation.

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractMessageEndpointFactory.AbstractMessageEndpoint()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterDelivery()` This `afterDelivery` implementation resets the thread context ClassLoader and completes the transaction, if any.
    `void` | `beforeDelivery(Method method)` This `beforeDelivery` implementation starts a transaction, if necessary, and exposes the endpoint ClassLoader as current thread context ClassLoader.
    `protected abstract ClassLoader` | `getEndpointClassLoader()` Template method for exposing the endpoint's ClassLoader (typically the ClassLoader that the message listener class has been loaded with).
    `protected boolean` | `hasBeforeDeliveryBeenCalled()` Return whether the `beforeDelivery(java.lang.reflect.Method)` method of this endpoint has already been called.
    `protected void` | `onEndpointException(Throwable ex)` Callback method for notifying the endpoint base class that the concrete endpoint invocation led to an exception.
    `void` | `release()`

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

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

- - ### Constructor Detail

    - #### AbstractMessageEndpointFactory.AbstractMessageEndpoint

          protected AbstractMessageEndpointFactory.AbstractMessageEndpoint()

  - ### Method Detail

    - #### beforeDelivery

          public void beforeDelivery(Method method)
                              throws ResourceException

      This `beforeDelivery` implementation starts a transaction, if necessary, and exposes the endpoint ClassLoader as current thread context ClassLoader.

      Note that the JCA 1.5 specification does not require a ResourceAdapter to call this method before invoking the concrete endpoint. If this method has not been called (check `hasBeforeDeliveryBeenCalled()`), the concrete endpoint method should call `beforeDelivery` and its sibling `afterDelivery()` explicitly, as part of its own processing.

      Specified by:
        `beforeDelivery` in interface `MessageEndpoint`
      Throws:
        `ResourceException`

    - #### getEndpointClassLoader

          protected abstract ClassLoader getEndpointClassLoader()

      Template method for exposing the endpoint's ClassLoader (typically the ClassLoader that the message listener class has been loaded with).
      Returns:
        the endpoint ClassLoader (never `null`)

    - #### hasBeforeDeliveryBeenCalled

          protected final boolean hasBeforeDeliveryBeenCalled()

      Return whether the `beforeDelivery(java.lang.reflect.Method)` method of this endpoint has already been called.

    - #### onEndpointException

          protected final void onEndpointException(Throwable ex)

      Callback method for notifying the endpoint base class that the concrete endpoint invocation led to an exception.

      To be invoked by subclasses in case of the concrete endpoint throwing an exception.

      Parameters:
        `ex` - the exception thrown from the concrete endpoint

    - #### afterDelivery

          public void afterDelivery()
                             throws ResourceException

      This `afterDelivery` implementation resets the thread context ClassLoader and completes the transaction, if any.

      Note that the JCA 1.5 specification does not require a ResourceAdapter to call this method after invoking the concrete endpoint. See the explanation in `beforeDelivery(java.lang.reflect.Method)`'s javadoc.

      Specified by:
        `afterDelivery` in interface `MessageEndpoint`
      Throws:
        `ResourceException`

    - #### release

          public void release()

      Specified by:
        `release` in interface `MessageEndpoint`