public abstract class AbstractRemoteSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor
Such an interceptor must be the last interceptor in the advice chain. In this case, there is no target object.
CONTAINER_PREFIX
logger
Constructor and Description |
---|
AbstractRemoteSlsbInvokerInterceptor() |
Modifier and Type | Method and Description |
---|---|
protected abstract java.lang.Object |
doInvoke(MethodInvocation invocation)
Perform the given invocation on the current EJB home.
|
protected java.lang.reflect.Method |
getCreateMethod(java.lang.Object home)
Check for EJB3-style home object that serves as EJB component directly.
|
java.lang.Object |
invokeInContext(MethodInvocation invocation)
Fetches an EJB home object and delegates to
doInvoke . |
protected boolean |
isConnectFailure(java.rmi.RemoteException ex)
Determine whether the given RMI exception indicates a connect failure.
|
protected boolean |
isHomeRefreshable()
Return whether the cached EJB home object is potentially
subject to on-demand refreshing.
|
protected java.lang.Object |
newSessionBeanInstance()
Return a new instance of the stateless session bean.
|
protected java.lang.Object |
refreshAndRetry(MethodInvocation invocation)
Refresh the EJB home object and retry the given invocation.
|
protected void |
removeSessionBeanInstance(EJBObject ejb)
Remove the given EJB instance.
|
void |
setRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure)
Set whether to refresh the EJB home on connect failure.
|
afterPropertiesSet, create, getHome, invoke, refreshHome, setCacheHome, setExposeAccessContext, setLookupHomeOnStartup
getExpectedType, getJndiName, lookup, setExpectedType, setJndiName
convertJndiName, isResourceRef, lookup, lookup, setResourceRef
getJndiEnvironment, getJndiTemplate, setJndiEnvironment, setJndiTemplate
public AbstractRemoteSlsbInvokerInterceptor()
public void setRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure)
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.
ConnectException
,
ConnectIOException
,
NoSuchObjectException
protected boolean isHomeRefreshable()
AbstractSlsbInvokerInterceptor
isHomeRefreshable
in class AbstractSlsbInvokerInterceptor
protected java.lang.reflect.Method getCreateMethod(java.lang.Object home) throws EjbAccessException
getCreateMethod
in class AbstractSlsbInvokerInterceptor
home
- the EJB home objectEjbAccessException
- if the method couldn't be retrieved@Nullable public java.lang.Object invokeInContext(MethodInvocation invocation) throws java.lang.Throwable
doInvoke
.
If configured to refresh on connect failure, it will call
refreshAndRetry(org.aopalliance.intercept.MethodInvocation)
on corresponding RMI exceptions.
invokeInContext
in class AbstractSlsbInvokerInterceptor
invocation
- the AOP method invocationjava.lang.Throwable
- in case of invocation failureAbstractSlsbInvokerInterceptor.getHome()
,
doInvoke(org.aopalliance.intercept.MethodInvocation)
,
refreshAndRetry(org.aopalliance.intercept.MethodInvocation)
protected boolean isConnectFailure(java.rmi.RemoteException ex)
The default implementation delegates to RmiClientInterceptorUtils.
ex
- the RMI exception to checkRmiClientInterceptorUtils.isConnectFailure(java.rmi.RemoteException)
@Nullable protected java.lang.Object refreshAndRetry(MethodInvocation invocation) throws java.lang.Throwable
invocation
- the AOP method invocationjava.lang.Throwable
- in case of invocation failureAbstractSlsbInvokerInterceptor.invoke(org.aopalliance.intercept.MethodInvocation)
@Nullable protected abstract java.lang.Object doInvoke(MethodInvocation invocation) throws java.lang.Throwable
invocation
- the AOP method invocationjava.lang.Throwable
- in case of invocation failureAbstractSlsbInvokerInterceptor.getHome()
,
newSessionBeanInstance()
protected java.lang.Object newSessionBeanInstance() throws javax.naming.NamingException, java.lang.reflect.InvocationTargetException
Can be overridden to change the algorithm.
javax.naming.NamingException
- if thrown by JNDIjava.lang.reflect.InvocationTargetException
- if thrown by the create methodAbstractSlsbInvokerInterceptor.create()
protected void removeSessionBeanInstance(@Nullable EJBObject ejb)
ejb
- the EJB instance to removeEJBObject.remove()