org.springframework.ejb.access
Class SimpleRemoteSlsbInvokerInterceptor

java.lang.Object
  extended byorg.springframework.jndi.JndiAccessor
      extended byorg.springframework.jndi.JndiLocatorSupport
          extended byorg.springframework.jndi.JndiObjectLocator
              extended byorg.springframework.ejb.access.AbstractSlsbInvokerInterceptor
                  extended byorg.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor
                      extended byorg.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor
All Implemented Interfaces:
Advice, InitializingBean, Interceptor, MethodInterceptor
Direct Known Subclasses:
SimpleRemoteStatelessSessionProxyFactoryBean

public class SimpleRemoteSlsbInvokerInterceptor
extends AbstractRemoteSlsbInvokerInterceptor

Basic invoker for a remote Stateless Session Bean. "Creates" a new EJB instance for each invocation.

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).

This invoker is typically used with an RMI business interface, which serves as super-interface of the EJB component interface. Alternatively, this invoker can also proxy a remote SLSB with a matching non-RMI business interface, i.e. an interface that mirrors the EJB business methods but does not declare RemoteExceptions. In the latter case, RemoteExceptions thrown by the EJB stub will automatically get converted to Spring's unchecked RemoteAccessException.

Since:
09-May-2003
Author:
Rod Johnson, Juergen Hoeller
See Also:
RemoteAccessException, AbstractSlsbInvokerInterceptor.setLookupHomeOnStartup(boolean), AbstractSlsbInvokerInterceptor.setCacheHome(boolean), AbstractRemoteSlsbInvokerInterceptor.setRefreshHomeOnConnectFailure(boolean)

Field Summary
 
Fields inherited from class org.springframework.jndi.JndiLocatorSupport
CONTAINER_PREFIX
 
Fields inherited from class org.springframework.jndi.JndiAccessor
logger
 
Constructor Summary
SimpleRemoteSlsbInvokerInterceptor()
           
 
Method Summary
protected  Object doInvoke(MethodInvocation invocation)
          This implementation "creates" a new EJB instance for each invocation.
protected  EJBObject getSessionBeanInstance()
          Return an EJB instance to delegate the call to.
protected  void releaseSessionBeanInstance(EJBObject ejb)
          Release the given EJB instance.
 
Methods inherited from class org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor
invoke, isConnectFailure, isHomeRefreshable, lookup, newSessionBeanInstance, refreshAndRetry, removeSessionBeanInstance, setHomeInterface, setRefreshHomeOnConnectFailure
 
Methods inherited from class org.springframework.ejb.access.AbstractSlsbInvokerInterceptor
afterPropertiesSet, create, getCreateMethod, getHome, refreshHome, setCacheHome, setLookupHomeOnStartup
 
Methods inherited from class org.springframework.jndi.JndiObjectLocator
getJndiName, setJndiName
 
Methods inherited from class org.springframework.jndi.JndiLocatorSupport
convertJndiName, isResourceRef, 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

SimpleRemoteSlsbInvokerInterceptor

public SimpleRemoteSlsbInvokerInterceptor()
Method Detail

doInvoke

protected Object doInvoke(MethodInvocation invocation)
                   throws Throwable
This implementation "creates" a new EJB instance for each invocation. Can be overridden for custom invocation strategies.

Alternatively, override getSessionBeanInstance and releaseSessionBeanInstance to change EJB instance creation, for example to hold a single shared EJB instance.

Specified by:
doInvoke in class AbstractRemoteSlsbInvokerInterceptor
Parameters:
invocation - the AOP method invocation
Returns:
the invocation result, if any
Throws:
Throwable - in case of invocation failure
See Also:
AbstractSlsbInvokerInterceptor.getHome(), AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance()

getSessionBeanInstance

protected EJBObject getSessionBeanInstance()
                                    throws NamingException,
                                           InvocationTargetException
Return an EJB instance to delegate the call to. Default implementation delegates to newSessionBeanInstance.

Throws:
NamingException - if thrown by JNDI
InvocationTargetException - if thrown by the create method
See Also:
AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance()

releaseSessionBeanInstance

protected void releaseSessionBeanInstance(EJBObject ejb)
Release the given EJB instance. Default implementation delegates to removeSessionBeanInstance.

Parameters:
ejb - the EJB instance to release
See Also:
AbstractRemoteSlsbInvokerInterceptor.removeSessionBeanInstance(javax.ejb.EJBObject)


Copyright (C) 2003-2004 The Spring Framework Project.