org.openejb.core.ivm
Class BaseEjbProxyHandler

java.lang.Object
  extended byorg.openejb.core.ivm.BaseEjbProxyHandler
All Implemented Interfaces:
InvocationHandler, Serializable
Direct Known Subclasses:
EjbHomeProxyHandler, EjbObjectProxyHandler

public abstract class BaseEjbProxyHandler
extends Object
implements InvocationHandler, Serializable

This InvocationHandler and its proxy are serializable and can be used by HomeHandle, Handle, and MetaData to persist and revive handles. It maintains its original client identity which allows the container to be more discerning about allowing the revieed proxy to be used. See StatefulContaer manager for more details.

Author:
David Blevins, Richard Monson-Haefel
See Also:
Serialized Form

Field Summary
 RpcContainer container
          The RpcContainer that the bean deployment this stub hanlder represents is deployed in.
 Object deploymentID
          The unique id of the bean deployment that this stub handler represents.
 DeploymentInfo deploymentInfo
          The DeployemtnInfo object if the bean deployment that this stub handler represents.
protected  boolean doIntraVmCopy
           
 boolean inProxyMap
           
protected  boolean isInvalidReference
           
protected static Hashtable liveHandleRegistry
          keeps track of live BaseEjbProxyHanlders in this VM.
 Object primaryKey
          The primary key of the bean deployment or null if the deployment is a bean type that doesn't require a primary key
 
Constructor Summary
BaseEjbProxyHandler(RpcContainer container, Object pk, Object depID)
          Constructs a BaseEjbProxyHandler representing the specifed bean deployment.
 
Method Summary
protected abstract  Object _invoke(Object proxy, Method method, Object[] args)
          Overridden by subclasses and called by invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]).
protected abstract  Object _writeReplace(Object proxy)
           
protected  void checkAuthorization(Method method)
          Checks if the caller of the specified method is authorized to access and execute it.
protected  Object[] copyArgs(Object[] objects)
           
protected  Object copyObj(Object object)
           
 boolean equals(Object obj)
           
abstract  ProxyInfo getProxyInfo()
           
protected  Object getThreadSpecificSecurityIdentity()
           
 int hashCode()
           
protected static void invalidateAllHandlers(Object key)
           
 void invalidateReference()
          Invalidates this reference so that it can not be used as a proxy for the bean identity.
 Object invoke(Object proxy, Method method, Object[] args)
          Preserves the context of the current thread and passes the invoke on to the BaseEjbProxyHandler subclass where the Container will be asked to invoke the method on the bean.
 boolean isLocal()
           
protected static void registerHandler(Object key, BaseEjbProxyHandler handler)
           
 void setIntraVmCopyMode(boolean on)
          This method enables/disables the copy process of the arguments and return value to and from a regular EJB invocation.
 void setLocal(boolean isLocal)
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

liveHandleRegistry

protected static final Hashtable liveHandleRegistry
keeps track of live BaseEjbProxyHanlders in this VM. So that related handlers can be removed if necessary. Currently this registry is only used to track live EjbObjectProxyHandlers. The EjbObjectProxyHandlers are tracked to allow remove() operations and invalidate exceptions to be propagated to the proper handler instances. There are several scenarios where this is useful:

deploymentID

public final Object deploymentID
The unique id of the bean deployment that this stub handler represents.


primaryKey

public final Object primaryKey
The primary key of the bean deployment or null if the deployment is a bean type that doesn't require a primary key


inProxyMap

public boolean inProxyMap

deploymentInfo

public transient DeploymentInfo deploymentInfo
The DeployemtnInfo object if the bean deployment that this stub handler represents.


container

public transient RpcContainer container
The RpcContainer that the bean deployment this stub hanlder represents is deployed in.


isInvalidReference

protected boolean isInvalidReference

doIntraVmCopy

protected boolean doIntraVmCopy
Constructor Detail

BaseEjbProxyHandler

public BaseEjbProxyHandler(RpcContainer container,
                           Object pk,
                           Object depID)
Constructs a BaseEjbProxyHandler representing the specifed bean deployment.

Parameters:
container - The Container that the bean deployment this stub hanlder represents is deployed in.
pk - The primary key of the bean deployment or null if the deployment is a bean type that doesn't require a primary key.
depID - The unique id of the bean deployment that this stub handler will represent.
Method Detail

checkAuthorization

protected void checkAuthorization(Method method)
                           throws OpenEJBException
Checks if the caller of the specified method is authorized to access and execute it. Relies on the SecurityService assigned to the Container that this bean deployment is in to determine if the caller is authorized.

Parameters:
method - The method the caller is attempting to execute.
Throws:
OpenEJBException - If the caller does bot have adequate authorization to execute the specified method.

getThreadSpecificSecurityIdentity

protected Object getThreadSpecificSecurityIdentity()

setIntraVmCopyMode

public void setIntraVmCopyMode(boolean on)
This method enables/disables the copy process of the arguments and return value to and from a regular EJB invocation. In some cases it is desireable to skip the copy, e.g. when the invocation comes from an RMI or CORBA remote layer, where the arguemnts are already copies.


invoke

public Object invoke(Object proxy,
                     Method method,
                     Object[] args)
              throws Throwable
Preserves the context of the current thread and passes the invoke on to the BaseEjbProxyHandler subclass where the Container will be asked to invoke the method on the bean. When entering a container the ThreadContext will change to match the context of the bean being serviced. That changes the current context of the calling bean, so the context must be preserved and then resourced after request is serviced. The context is restored after the subclass' _invoke method returns.

Specified by:
invoke in interface InvocationHandler
Parameters:
proxy - The Proxy object that represents this bean deployment's EJBObject or EJBHome.
method - The EJBHome or EJBObject method the caller is invoking.
args - The parameters to the mehtod being invoked
Returns:
The result of invoking the appropriate method on the bean instance.
Throws:
Throwable

toString

public String toString()

hashCode

public int hashCode()

equals

public boolean equals(Object obj)

_invoke

protected abstract Object _invoke(Object proxy,
                                  Method method,
                                  Object[] args)
                           throws Throwable
Overridden by subclasses and called by invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]). Subclasses implement the main behavior of calling invoke on the Container that the bean deployment lives in.

Parameters:
proxy - The Proxy subclass that is the bean's EJBObject or EJBHome.
method - The bean method that the caller is attempting to invoke.
args - The arguments to the method being invoked.
Returns:
The result of invoking the appropriate method on the bean instance.
Throws:
Throwable

copyArgs

protected Object[] copyArgs(Object[] objects)
                     throws IOException,
                            ClassNotFoundException
Parameters:
objects - The object array you wish to dereference.
Returns:
An object array with new, equlivilent instances of the original objects contained in the array.
Throws:
IOException
ClassNotFoundException

copyObj

protected Object copyObj(Object object)
                  throws IOException,
                         ClassNotFoundException
Parameters:
object -
Returns:
An equlivilent instance of the original object.
Throws:
IOException
ClassNotFoundException

invalidateReference

public void invalidateReference()
Invalidates this reference so that it can not be used as a proxy for the bean identity. This method may be called when an InvalidateReferenceException is thrown by the container or when the bean identity associated with this proxy is explicitly removed, by calling one of the remove( ) methods.


invalidateAllHandlers

protected static void invalidateAllHandlers(Object key)

_writeReplace

protected abstract Object _writeReplace(Object proxy)
                                 throws ObjectStreamException
Throws:
ObjectStreamException

registerHandler

protected static void registerHandler(Object key,
                                      BaseEjbProxyHandler handler)

getProxyInfo

public abstract ProxyInfo getProxyInfo()

isLocal

public boolean isLocal()

setLocal

public void setLocal(boolean isLocal)


Copyright © 1999-2007 OpenEJB. All Rights Reserved.