Class AbstractMessageEndpointFactory
- All Implemented Interfaces:
MessageEndpointFactory
,Aware
,BeanNameAware
- Direct Known Subclasses:
GenericMessageEndpointFactory
,JmsMessageEndpointFactory
MessageEndpointFactory
interface,
providing transaction management capabilities as well as ClassLoader
exposure for endpoint invocations.- Since:
- 2.5
- Author:
- Juergen Hoeller
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
Inner class for actual endpoint implementations, based on template method to allow for any kind of concrete endpoint implementation. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptioncreateEndpoint
(XAResource xaResource) The standard JCA 1.5 version ofcreateEndpoint
.createEndpoint
(XAResource xaResource, long timeout) The alternative JCA 1.6 version ofcreateEndpoint
.protected abstract AbstractMessageEndpointFactory.AbstractMessageEndpoint
Create the actual endpoint instance, as a subclass of theAbstractMessageEndpointFactory.AbstractMessageEndpoint
inner class of this factory.Implementation of the JCA 1.7#getActivationName()
method, returning the bean name as set on this MessageEndpointFactory.Class<?>
Implementation of the JCA 1.7#getEndpointClass()
method, returning null in order to indicate a synthetic endpoint type.boolean
isDeliveryTransacted
(Method method) This implementation returnstrue
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.
-
Field Details
-
logger
Logger available to subclasses.
-
-
Constructor Details
-
AbstractMessageEndpointFactory
public AbstractMessageEndpointFactory()
-
-
Method Details
-
setTransactionManager
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 plainTransactionManager
.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.
-
setTransactionFactory
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.
-
setTransactionName
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
Set the name of this message endpoint. Populated with the bean name automatically when defined within Spring's bean factory.- Specified by:
setBeanName
in interfaceBeanNameAware
- Parameters:
beanName
- the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use theBeanFactoryUtils.originalBeanName(String)
method to extract the original bean name (without suffix), if desired.
-
getActivationName
Implementation of the JCA 1.7#getActivationName()
method, returning the bean name as set on this MessageEndpointFactory.- Specified by:
getActivationName
in interfaceMessageEndpointFactory
- See Also:
-
getEndpointClass
Implementation of the JCA 1.7#getEndpointClass()
method, returning null in order to indicate a synthetic endpoint type.- Specified by:
getEndpointClass
in interfaceMessageEndpointFactory
-
isDeliveryTransacted
This implementation returnstrue
if a transaction manager has been specified;false
otherwise.- Specified by:
isDeliveryTransacted
in interfaceMessageEndpointFactory
- Throws:
NoSuchMethodException
- See Also:
-
createEndpoint
The standard JCA 1.5 version ofcreateEndpoint
.This implementation delegates to
createEndpointInternal()
, initializing the endpoint's XAResource before the endpoint gets invoked.- Specified by:
createEndpoint
in interfaceMessageEndpointFactory
- Throws:
UnavailableException
-
createEndpoint
public MessageEndpoint createEndpoint(XAResource xaResource, long timeout) throws UnavailableException The alternative JCA 1.6 version ofcreateEndpoint
.This implementation delegates to
createEndpointInternal()
, ignoring the specified timeout. It is only here for JCA 1.6 compliance.- Specified by:
createEndpoint
in interfaceMessageEndpointFactory
- Throws:
UnavailableException
-
createEndpointInternal
protected abstract AbstractMessageEndpointFactory.AbstractMessageEndpoint createEndpointInternal() throws UnavailableExceptionCreate the actual endpoint instance, as a subclass of theAbstractMessageEndpointFactory.AbstractMessageEndpoint
inner class of this factory.- Returns:
- the actual endpoint instance (never
null
) - Throws:
UnavailableException
- if no endpoint is available at present
-