Package org.springframework.ejb.access
Class AbstractRemoteSlsbInvokerInterceptor
- java.lang.Object
- org.springframework.jndi.JndiAccessor
- org.springframework.jndi.JndiLocatorSupport
- org.springframework.jndi.JndiObjectLocator
- org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
- org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor
- All Implemented Interfaces:
Advice,Interceptor,MethodInterceptor,InitializingBean
- Direct Known Subclasses:
SimpleRemoteSlsbInvokerInterceptor
public abstract class AbstractRemoteSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor
Base class for interceptors proxying remote Stateless Session Beans. Designed for EJB 2.x, but works for EJB 3 Session Beans as well.Such an interceptor must be the last interceptor in the advice chain. In this case, there is no target object.
- Author:
- Rod Johnson, Juergen Hoeller
Field Summary
Fields inherited from class org.springframework.jndi.JndiLocatorSupport
CONTAINER_PREFIX
Fields inherited from class org.springframework.jndi.JndiAccessor
logger
Constructor Summary
Constructors Constructor Description AbstractRemoteSlsbInvokerInterceptor()
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract ObjectdoInvoke(MethodInvocation invocation)Perform the given invocation on the current EJB home.protected MethodgetCreateMethod(Object home)Check for EJB3-style home object that serves as EJB component directly.ObjectinvokeInContext(MethodInvocation invocation)Fetches an EJB home object and delegates todoInvoke.protected booleanisConnectFailure(RemoteException ex)Determine whether the given RMI exception indicates a connect failure.protected booleanisHomeRefreshable()Return whether the cached EJB home object is potentially subject to on-demand refreshing.protected ObjectnewSessionBeanInstance()Return a new instance of the stateless session bean.protected ObjectrefreshAndRetry(MethodInvocation invocation)Refresh the EJB home object and retry the given invocation.protected voidremoveSessionBeanInstance(EJBObject ejb)Remove the given EJB instance.voidsetRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure)Set whether to refresh the EJB home on connect failure.Methods inherited from class org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
afterPropertiesSet, create, getHome, invoke, refreshHome, setCacheHome, setExposeAccessContext, setLookupHomeOnStartup
Methods inherited from class org.springframework.jndi.JndiObjectLocator
getExpectedType, getJndiName, lookup, setExpectedType, setJndiName
Methods inherited from class org.springframework.jndi.JndiLocatorSupport
convertJndiName, isResourceRef, lookup, lookup, setResourceRef
Methods inherited from class org.springframework.jndi.JndiAccessor
getJndiEnvironment, getJndiTemplate, setJndiEnvironment, setJndiTemplate
Constructor Detail
AbstractRemoteSlsbInvokerInterceptor
public AbstractRemoteSlsbInvokerInterceptor()
Method Detail
setRefreshHomeOnConnectFailure
public void setRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure)
Set whether to refresh the EJB home on connect failure. Default is "false".Can be turned on to allow for hot restart of the EJB server. If a cached EJB home throws an RMI exception that indicates a remote connect failure, a fresh home will be fetched and the invocation will be retried.
isHomeRefreshable
protected boolean isHomeRefreshable()
Description copied from class:AbstractSlsbInvokerInterceptorReturn whether the cached EJB home object is potentially subject to on-demand refreshing. Default is "false".- Overrides:
isHomeRefreshablein classAbstractSlsbInvokerInterceptor
getCreateMethod
protected Method getCreateMethod(Object home) throws EjbAccessException
Check for EJB3-style home object that serves as EJB component directly.- Overrides:
getCreateMethodin classAbstractSlsbInvokerInterceptor- Parameters:
home- the EJB home object- Returns:
- the create method
- Throws:
EjbAccessException- if the method couldn't be retrieved
invokeInContext
@Nullable public Object invokeInContext(MethodInvocation invocation) throws Throwable
Fetches an EJB home object and delegates todoInvoke.If configured to refresh on connect failure, it will call
refreshAndRetry(org.aopalliance.intercept.MethodInvocation)on corresponding RMI exceptions.- Specified by:
invokeInContextin classAbstractSlsbInvokerInterceptor- Parameters:
invocation- the AOP method invocation- Returns:
- the invocation result, if any
- Throws:
Throwable- in case of invocation failure- See Also:
AbstractSlsbInvokerInterceptor.getHome(),doInvoke(org.aopalliance.intercept.MethodInvocation),refreshAndRetry(org.aopalliance.intercept.MethodInvocation)
isConnectFailure
protected boolean isConnectFailure(RemoteException ex)
Determine whether the given RMI exception indicates a connect failure.The default implementation delegates to RmiClientInterceptorUtils.
- Parameters:
ex- the RMI exception to check- Returns:
- whether the exception should be treated as connect failure
- See Also:
RmiClientInterceptorUtils.isConnectFailure(java.rmi.RemoteException)
refreshAndRetry
@Nullable protected Object refreshAndRetry(MethodInvocation invocation) throws Throwable
Refresh the EJB home object and retry the given invocation. Called by invoke on connect failure.- Parameters:
invocation- the AOP method invocation- Returns:
- the invocation result, if any
- Throws:
Throwable- in case of invocation failure- See Also:
AbstractSlsbInvokerInterceptor.invoke(org.aopalliance.intercept.MethodInvocation)
doInvoke
@Nullable protected abstract Object doInvoke(MethodInvocation invocation) throws Throwable
Perform the given invocation on the current EJB home. Template method to be implemented by subclasses.- Parameters:
invocation- the AOP method invocation- Returns:
- the invocation result, if any
- Throws:
Throwable- in case of invocation failure- See Also:
AbstractSlsbInvokerInterceptor.getHome(),newSessionBeanInstance()
newSessionBeanInstance
protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException
Return a new instance of the stateless session bean. To be invoked by concrete remote SLSB invoker subclasses.Can be overridden to change the algorithm.
- Throws:
NamingException- if thrown by JNDIInvocationTargetException- if thrown by the create method- See Also:
AbstractSlsbInvokerInterceptor.create()
removeSessionBeanInstance
protected void removeSessionBeanInstance(@Nullable EJBObject ejb)
Remove the given EJB instance. To be invoked by concrete remote SLSB invoker subclasses.- Parameters:
ejb- the EJB instance to remove- See Also:
EJBObject.remove()