Spring Framework

org.springframework.ejb.access
Class AbstractSlsbInvokerInterceptor

java.lang.Object
  extended by org.springframework.jndi.JndiAccessor
      extended by org.springframework.jndi.JndiLocatorSupport
          extended by org.springframework.jndi.JndiObjectLocator
              extended by org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
All Implemented Interfaces:
org.aopalliance.aop.Advice, org.aopalliance.intercept.Interceptor, org.aopalliance.intercept.MethodInterceptor, InitializingBean
Direct Known Subclasses:
AbstractRemoteSlsbInvokerInterceptor, LocalSlsbInvokerInterceptor

public abstract class AbstractSlsbInvokerInterceptor
extends JndiObjectLocator
implements org.aopalliance.intercept.MethodInterceptor

Base class for AOP interceptors invoking local or 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 direct target object: The call is handled in a special way, getting executed on an EJB instance retrieved via an EJB home.

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
AbstractSlsbInvokerInterceptor()
           
 
Method Summary
 void afterPropertiesSet()
          Fetches EJB home on startup, if necessary.
protected  java.lang.Object create()
          Invokes the create() method on the cached EJB home object.
protected  java.lang.reflect.Method getCreateMethod(java.lang.Object home)
          Determine the create method of the given EJB home object.
protected  java.lang.Object getHome()
          Return the EJB home object to use.
 java.lang.Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
          Prepares the thread context if necessar, and delegates to invokeInContext(org.aopalliance.intercept.MethodInvocation).
protected abstract  java.lang.Object invokeInContext(org.aopalliance.intercept.MethodInvocation invocation)
          Perform the given invocation on the current EJB home, within the thread context being prepared accordingly.
protected  boolean isHomeRefreshable()
          Return whether the cached EJB home object is potentially subject to on-demand refreshing.
protected  void refreshHome()
          Refresh the cached home object, if applicable.
 void setCacheHome(boolean cacheHome)
          Set whether to cache the EJB home object once it has been located.
 void setExposeAccessContext(boolean exposeAccessContext)
          Set whether to expose the JNDI environment context for all access to the target EJB, i.e.
 void setLookupHomeOnStartup(boolean lookupHomeOnStartup)
          Set whether to look up the EJB home object on startup.
 
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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractSlsbInvokerInterceptor

public AbstractSlsbInvokerInterceptor()
Method Detail

setLookupHomeOnStartup

public void setLookupHomeOnStartup(boolean lookupHomeOnStartup)
Set whether to look up the EJB home object on startup. Default is "true".

Can be turned off to allow for late start of the EJB server. In this case, the EJB home object will be fetched on first access.

See Also:
setCacheHome(boolean)

setCacheHome

public void setCacheHome(boolean cacheHome)
Set whether to cache the EJB home object once it has been located. Default is "true".

Can be turned off to allow for hot restart of the EJB server. In this case, the EJB home object will be fetched for each invocation.

See Also:
setLookupHomeOnStartup(boolean)

setExposeAccessContext

public void setExposeAccessContext(boolean exposeAccessContext)
Set whether to expose the JNDI environment context for all access to the target EJB, i.e. for all method invocations on the exposed object reference.

Default is "false", i.e. to only expose the JNDI context for object lookup. Switch this flag to "true" in order to expose the JNDI environment (including the authorization context) for each EJB invocation, as needed by WebLogic for EJBs with authorization requirements.


afterPropertiesSet

public void afterPropertiesSet()
                        throws javax.naming.NamingException
Fetches EJB home on startup, if necessary.

Specified by:
afterPropertiesSet in interface InitializingBean
Overrides:
afterPropertiesSet in class JndiObjectLocator
Throws:
javax.naming.NamingException
See Also:
setLookupHomeOnStartup(boolean), refreshHome()

refreshHome

protected void refreshHome()
                    throws javax.naming.NamingException
Refresh the cached home object, if applicable. Also caches the create method on the home object.

Throws:
javax.naming.NamingException - if thrown by the JNDI lookup
See Also:
JndiObjectLocator.lookup(), getCreateMethod(java.lang.Object)

getCreateMethod

protected java.lang.reflect.Method getCreateMethod(java.lang.Object home)
                                            throws EjbAccessException
Determine the create method of the given EJB home object.

Parameters:
home - the EJB home object
Returns:
the create method
Throws:
EjbAccessException - if the method couldn't be retrieved

getHome

protected java.lang.Object getHome()
                            throws javax.naming.NamingException
Return the EJB home object to use. Called for each invocation.

Default implementation returns the home created on initialization, if any; else, it invokes lookup to get a new proxy for each invocation.

Can be overridden in subclasses, for example to cache a home object for a given amount of time before recreating it, or to test the home object whether it is still alive.

Returns:
the EJB home object to use for an invocation
Throws:
javax.naming.NamingException - if proxy creation failed
See Also:
JndiObjectLocator.lookup(), getCreateMethod(java.lang.Object)

isHomeRefreshable

protected boolean isHomeRefreshable()
Return whether the cached EJB home object is potentially subject to on-demand refreshing. Default is "false".


invoke

public java.lang.Object invoke(org.aopalliance.intercept.MethodInvocation invocation)
                        throws java.lang.Throwable
Prepares the thread context if necessar, and delegates to invokeInContext(org.aopalliance.intercept.MethodInvocation).

Specified by:
invoke in interface org.aopalliance.intercept.MethodInterceptor
Throws:
java.lang.Throwable

invokeInContext

protected abstract java.lang.Object invokeInContext(org.aopalliance.intercept.MethodInvocation invocation)
                                             throws java.lang.Throwable
Perform the given invocation on the current EJB home, within the thread context being prepared accordingly. Template method to be implemented by subclasses.

Parameters:
invocation - the AOP method invocation
Returns:
the invocation result, if any
Throws:
java.lang.Throwable - in case of invocation failure

create

protected java.lang.Object create()
                           throws javax.naming.NamingException,
                                  java.lang.reflect.InvocationTargetException
Invokes the create() method on the cached EJB home object.

Returns:
a new EJBObject or EJBLocalObject
Throws:
javax.naming.NamingException - if thrown by JNDI
java.lang.reflect.InvocationTargetException - if thrown by the create method

Spring Framework