Class LocalSlsbInvokerInterceptor
- java.lang.Object
- org.springframework.jndi.JndiAccessor
- org.springframework.jndi.JndiLocatorSupport
- org.springframework.jndi.JndiObjectLocator
- org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
- org.springframework.ejb.access.LocalSlsbInvokerInterceptor
- All Implemented Interfaces:
Advice
,Interceptor
,MethodInterceptor
,InitializingBean
- Direct Known Subclasses:
LocalStatelessSessionProxyFactoryBean
public class LocalSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor
Invoker for a local Stateless Session Bean. Designed for EJB 2.x, but works for EJB 3 Session Beans as well.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).
- Author:
- Rod Johnson, Juergen Hoeller
- See Also:
AbstractSlsbInvokerInterceptor.setLookupHomeOnStartup(boolean)
,AbstractSlsbInvokerInterceptor.setCacheHome(boolean)
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 LocalSlsbInvokerInterceptor()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Method
getCreateMethod(Object home)
Check for EJB3-style home object that serves as EJB component directly.protected Object
getSessionBeanInstance()
Return an EJB instance to delegate the call to.Object
invokeInContext(MethodInvocation invocation)
This implementation "creates" a new EJB instance for each invocation.protected 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.Methods inherited from class org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
afterPropertiesSet, create, getHome, invoke, isHomeRefreshable, 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
LocalSlsbInvokerInterceptor
public LocalSlsbInvokerInterceptor()
Method Detail
invokeInContext
@Nullable public Object invokeInContext(MethodInvocation invocation) throws Throwable
This implementation "creates" a new EJB instance for each invocation. Can be overridden for custom invocation strategies.Alternatively, override
getSessionBeanInstance()
andreleaseSessionBeanInstance(javax.ejb.EJBLocalObject)
to change EJB instance creation, for example to hold a single shared EJB instance.- Specified by:
invokeInContext
in classAbstractSlsbInvokerInterceptor
- Parameters:
invocation
- the AOP method invocation- Returns:
- the invocation result, if any
- Throws:
Throwable
- in case of invocation failure
getCreateMethod
protected Method getCreateMethod(Object home) throws EjbAccessException
Check for EJB3-style home object that serves as EJB component directly.- Overrides:
getCreateMethod
in classAbstractSlsbInvokerInterceptor
- Parameters:
home
- the EJB home object- Returns:
- the create method
- Throws:
EjbAccessException
- if the method couldn't be retrieved
getSessionBeanInstance
protected Object getSessionBeanInstance() throws NamingException, InvocationTargetException
Return an EJB instance to delegate the call to. Default implementation delegates to newSessionBeanInstance.- Throws:
NamingException
- if thrown by JNDIInvocationTargetException
- if thrown by the create method- See Also:
newSessionBeanInstance()
releaseSessionBeanInstance
protected void releaseSessionBeanInstance(EJBLocalObject ejb)
Release the given EJB instance. Default implementation delegates to removeSessionBeanInstance.- Parameters:
ejb
- the EJB instance to release- See Also:
removeSessionBeanInstance(javax.ejb.EJBLocalObject)
newSessionBeanInstance
protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException
Return a new instance of the stateless session bean. 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 EJBLocalObject ejb)
Remove the given EJB instance.- Parameters:
ejb
- the EJB instance to remove- See Also:
EJBLocalObject.remove()