public class LocalSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor
Caches the home object, since a local EJB home can never go stale.
See JndiObjectLocator
for info on
how to specify the JNDI location of the target EJB.
In a bean container, this class is normally best used as a singleton. However, if that bean container pre-instantiates singletons (as do the XML ApplicationContext variants) you may have a problem if the bean container is loaded before the EJB container loads the target EJB. That is because by default the JNDI lookup will be performed in the init method of this class and cached, but the EJB will not have been bound at the target location yet. The best solution is to set the lookupHomeOnStartup property to false, in which case the home will be fetched on first access to the EJB. (This flag is only true by default for backwards compatibility reasons).
AbstractSlsbInvokerInterceptor.setLookupHomeOnStartup(boolean)
,
AbstractSlsbInvokerInterceptor.setCacheHome(boolean)
CONTAINER_PREFIX
logger
Constructor and Description |
---|
LocalSlsbInvokerInterceptor() |
Modifier and Type | Method and Description |
---|---|
protected java.lang.reflect.Method |
getCreateMethod(java.lang.Object home)
Check for EJB3-style home object that serves as EJB component directly.
|
protected java.lang.Object |
getSessionBeanInstance()
Return an EJB instance to delegate the call to.
|
java.lang.Object |
invokeInContext(MethodInvocation invocation)
This implementation "creates" a new EJB instance for each invocation.
|
protected java.lang.Object |
newSessionBeanInstance()
Return a new instance of the stateless session bean.
|
protected void |
releaseSessionBeanInstance(EJBLocalObject ejb)
Release the given EJB instance.
|
protected void |
removeSessionBeanInstance(EJBLocalObject ejb)
Remove the given EJB instance.
|
afterPropertiesSet, create, getHome, invoke, isHomeRefreshable, refreshHome, setCacheHome, setExposeAccessContext, setLookupHomeOnStartup
getExpectedType, getJndiName, lookup, setExpectedType, setJndiName
convertJndiName, isResourceRef, lookup, lookup, setResourceRef
getJndiEnvironment, getJndiTemplate, setJndiEnvironment, setJndiTemplate
@Nullable public java.lang.Object invokeInContext(MethodInvocation invocation) throws java.lang.Throwable
Alternatively, override getSessionBeanInstance()
and
releaseSessionBeanInstance(javax.ejb.EJBLocalObject)
to change EJB instance creation,
for example to hold a single shared EJB instance.
invokeInContext
in class AbstractSlsbInvokerInterceptor
invocation
- the AOP method invocationjava.lang.Throwable
- in case of invocation failureprotected 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 retrievedprotected java.lang.Object getSessionBeanInstance() throws javax.naming.NamingException, java.lang.reflect.InvocationTargetException
javax.naming.NamingException
- if thrown by JNDIjava.lang.reflect.InvocationTargetException
- if thrown by the create methodnewSessionBeanInstance()
protected void releaseSessionBeanInstance(EJBLocalObject ejb)
ejb
- the EJB instance to releaseremoveSessionBeanInstance(javax.ejb.EJBLocalObject)
protected java.lang.Object newSessionBeanInstance() throws javax.naming.NamingException, java.lang.reflect.InvocationTargetException
javax.naming.NamingException
- if thrown by JNDIjava.lang.reflect.InvocationTargetException
- if thrown by the create methodAbstractSlsbInvokerInterceptor.create()
protected void removeSessionBeanInstance(@Nullable EJBLocalObject ejb)
ejb
- the EJB instance to removeEJBLocalObject.remove()