/*
* JBoss, the OpenSource EJB server
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.ejb.plugins.jrmp.interfaces;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
import javax.ejb.EJBHome;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* An abstract base proxy class from which all bean proxys extend from.
*
* @author Jason Dillon <jason@planet57.com>
* @version $Revision: 1.1.4.3 $
*/
public abstract class BeanProxy
extends GenericProxy
{
// Constants -----------------------------------------------------
/** Serial Version Identifier. */
private static final long serialVersionUID = -4177999312297604904L;
// Attributes ----------------------------------------------------
// Static --------------------------------------------------------
/** {@link EJBObject#getPrimaryKey} method reference. */
protected static final Method GET_PRIMARY_KEY;
/** {@link EJBObject#getHandle} method reference. */
protected static final Method GET_HANDLE;
/** {@link EJBObject#getEJBHome} method reference. */
protected static final Method GET_EJB_HOME;
/** {@link EJBObject#isIdentical} method reference. */
protected static final Method IS_IDENTICAL;
/**
* Initialize {@link EJBObject} method references.
*/
static
{
try
{
final Class[] empty = {};
final Class type = EJBObject.class;
GET_PRIMARY_KEY = type.getMethod("getPrimaryKey", empty);
GET_HANDLE = type.getMethod("getHandle", empty);
GET_EJB_HOME = type.getMethod("getEJBHome", empty);
IS_IDENTICAL = type.getMethod("isIdentical", new Class[] { type });
}
catch (Exception e)
{
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
// Constructors --------------------------------------------------
/**
* No-argument constructor for externalization.
*/
public BeanProxy() {}
/**
* Initialze.
*
* @param name The JNDI name of the container that we proxy for.
* @param container The remote interface of the invoker for which
* this is a proxy for.
* @param optimize True if the proxy will attempt to optimize
* VM-local calls.
*/
protected BeanProxy(final String name,
final ContainerRemote container,
final boolean optimize)
{
super(name, container, optimize);
}
// Public --------------------------------------------------------
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
/**
* Get a EJBHome reference for this proxy.
*
* @return EJBHome reference.
*
* @throws NamingException Failed to create InitalContext or lookup
* EJBHome reference.
*/
protected EJBHome getEJBHome() throws NamingException
{
// get a reference to the correct context
final InitialContext ctx = createInitialContext();
try
{
return (EJBHome)ctx.lookup(name);
}
finally
{
ctx.close();
}
}
/**
* Test the identitiy of an EJBObject.
*
* @param a EJBObject.
* @param b Object to test identity with.
* @return True if objects are identical.
*
* @throws RemoteException Failed to get primary key.
* @throws ClassCastException Not an EJBObject instance.
*/
protected Boolean isIdentical(final Object a, final Object b)
throws RemoteException
{
if( a == null )
return Boolean.FALSE;
final EJBObject ejb = (EJBObject)a;
final Object pk = ejb.getPrimaryKey();
return new Boolean(pk.equals(b));
}
// Private -------------------------------------------------------
// Inner classes -------------------------------------------------
}