Package org.springframework.jca.endpoint

# Class AbstractMessageEndpointFactory

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

All Implemented Interfaces:
  `MessageEndpointFactory`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.BeanNameAware`

Direct Known Subclasses:
  `GenericMessageEndpointFactory`

public abstract class AbstractMessageEndpointFactory extends Object implements MessageEndpointFactory, org.springframework.beans.factory.BeanNameAware
Abstract base implementation of the JCA 1.7 `MessageEndpointFactory` interface, providing transaction management capabilities as well as ClassLoader exposure for endpoint invocations.

Since:
  2.5
Author:
  Juergen Hoeller
See Also:
  - `setTransactionManager(java.lang.Object)`

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`AbstractMessageEndpointFactory.AbstractMessageEndpoint`
Inner class for actual endpoint implementations, based on template method to allow for any kind of concrete endpoint implementation.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final org.apache.commons.logging.Log`
`logger`
Logger available to subclasses.

## Constructor Summary

Constructors
Constructor
Description
`AbstractMessageEndpointFactory()`

## Method Summary

Modifier and Type
Method
Description
`MessageEndpoint`
`createEndpoint(XAResource xaResource)`
The standard JCA 1.5 version of `createEndpoint`.
`MessageEndpoint`
`createEndpoint(XAResource xaResource, long timeout)`
The alternative JCA 1.6 version of `createEndpoint`.
`protected abstract AbstractMessageEndpointFactory.AbstractMessageEndpoint`
`createEndpointInternal()`
Create the actual endpoint instance, as a subclass of the `AbstractMessageEndpointFactory.AbstractMessageEndpoint` inner class of this factory.
`String`
`getActivationName()`
Implementation of the JCA 1.7 `#getActivationName()` method, returning the bean name as set on this MessageEndpointFactory.
`Class<?>`
`getEndpointClass()`
Implementation of the JCA 1.7 `#getEndpointClass()` method, returning null in order to indicate a synthetic endpoint type.
`boolean`
`isDeliveryTransacted(Method method)`
This implementation returns `true` if a transaction manager has been specified; `false` otherwise.
`void`
`setBeanName(String beanName)`
Set the name of this message endpoint.
`void`
`setTransactionFactory(TransactionFactory transactionFactory)`
Set the Spring TransactionFactory to use for wrapping endpoint invocations, enlisting the endpoint resource in each such transaction.
`void`
`setTransactionManager(Object transactionManager)`
Set the XA transaction manager to use for wrapping endpoint invocations, enlisting the endpoint resource in each such transaction.
`void`
`setTransactionName(String transactionName)`
Specify the name of the transaction, if any.
`void`
`setTransactionTimeout(int transactionTimeout)`
Specify the transaction timeout, if any.

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

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

## Field Details

### logger

protected final org.apache.commons.logging.Log logger
Logger available to subclasses.

## Constructor Details

### AbstractMessageEndpointFactory

public AbstractMessageEndpointFactory()

## Method Details

### setTransactionManager

public void setTransactionManager(Object transactionManager)
Set the XA transaction manager to use for wrapping endpoint invocations, enlisting the endpoint resource in each such transaction.

The passed-in object may be a transaction manager which implements Spring's `TransactionFactory` interface, or a plain `TransactionManager`.

If no transaction manager is specified, the endpoint invocation will simply not be wrapped in an XA transaction. Check out your resource provider's ActivationSpec documentation for local transaction options of your particular provider.

See Also:
  - `setTransactionName(java.lang.String)`
  - `setTransactionTimeout(int)`

### setTransactionFactory

public void setTransactionFactory(TransactionFactory transactionFactory)
Set the Spring TransactionFactory to use for wrapping endpoint invocations, enlisting the endpoint resource in each such transaction.

Alternatively, specify an appropriate transaction manager through the `"transactionManager"` property.

If no transaction factory is specified, the endpoint invocation will simply not be wrapped in an XA transaction. Check out your resource provider's ActivationSpec documentation for local transaction options of your particular provider.

See Also:
  - `setTransactionName(java.lang.String)`
  - `setTransactionTimeout(int)`

### setTransactionName

public void setTransactionName(String transactionName)
Specify the name of the transaction, if any.

Default is none. A specified name will be passed on to the transaction manager, allowing to identify the transaction in a transaction monitor.

### setTransactionTimeout

public void setTransactionTimeout(int transactionTimeout)
Specify the transaction timeout, if any.

Default is -1: rely on the transaction manager's default timeout. Specify a concrete timeout to restrict the maximum duration of each endpoint invocation.

### setBeanName

public void setBeanName(String beanName)
Set the name of this message endpoint. Populated with the bean name automatically when defined within Spring's bean factory.

Specified by:
  `setBeanName` in interface `org.springframework.beans.factory.BeanNameAware`

### getActivationName

@Nullable public String getActivationName()
Implementation of the JCA 1.7 `#getActivationName()` method, returning the bean name as set on this MessageEndpointFactory.

Specified by:
  `getActivationName` in interface `MessageEndpointFactory`
See Also:
  - `setBeanName(java.lang.String)`

### getEndpointClass

@Nullable public Class<?> getEndpointClass()
Implementation of the JCA 1.7 `#getEndpointClass()` method, returning null in order to indicate a synthetic endpoint type.

Specified by:
  `getEndpointClass` in interface `MessageEndpointFactory`

### isDeliveryTransacted

public boolean isDeliveryTransacted(Method method) throws NoSuchMethodException
This implementation returns `true` if a transaction manager has been specified; `false` otherwise.

Specified by:
  `isDeliveryTransacted` in interface `MessageEndpointFactory`
Throws:
  `NoSuchMethodException`
See Also:
  - `setTransactionManager(java.lang.Object)`
  - `setTransactionFactory(org.springframework.transaction.jta.TransactionFactory)`

### createEndpoint

public MessageEndpoint createEndpoint(XAResource xaResource) throws UnavailableException
The standard JCA 1.5 version of `createEndpoint`.

This implementation delegates to `createEndpointInternal()`, initializing the endpoint's XAResource before the endpoint gets invoked.

Specified by:
  `createEndpoint` in interface `MessageEndpointFactory`
Throws:
  `UnavailableException`

### createEndpoint

public MessageEndpoint createEndpoint(XAResource xaResource, long timeout) throws UnavailableException
The alternative JCA 1.6 version of `createEndpoint`.

This implementation delegates to `createEndpointInternal()`, ignoring the specified timeout. It is only here for JCA 1.6 compliance.

Specified by:
  `createEndpoint` in interface `MessageEndpointFactory`
Throws:
  `UnavailableException`

### createEndpointInternal

protected abstract AbstractMessageEndpointFactory.AbstractMessageEndpoint createEndpointInternal() throws UnavailableException
Create the actual endpoint instance, as a subclass of the `AbstractMessageEndpointFactory.AbstractMessageEndpoint` inner class of this factory.

Returns:
  the actual endpoint instance (never `null`)
Throws:
  `UnavailableException` - if no endpoint is available at present