org.springframework.jca.endpoint
Class AbstractMessageEndpointFactory.AbstractMessageEndpoint

java.lang.Object
  extended by 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
protected AbstractMessageEndpointFactory.AbstractMessageEndpoint()
           
 
Method Summary
 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