/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.ejb; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; import java.rmi.RemoteException; import javax.ejb.EJBContext; import javax.ejb.EJBLocalObject; import javax.ejb.EJBObject; import javax.ejb.SessionContext; import javax.ejb.SessionBean; import javax.ejb.EJBException; /** * The enterprise context for stateless session beans. * * @author Rickard Öberg * @author Sebastien Alborini * @version $Revision: 1.17 $ */ public class StatelessSessionEnterpriseContext extends EnterpriseContext { // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- EJBObject ejbObject; EJBLocalObject ejbLocalObject; SessionContext ctx; // Static -------------------------------------------------------- // Constructors -------------------------------------------------- public StatelessSessionEnterpriseContext(Object instance, Container con) throws Exception { super(instance, con); ctx = new SessionContextImpl(); ((SessionBean)instance).setSessionContext(ctx); try { Method ejbCreate = instance.getClass().getMethod("ejbCreate", new Class[0]); ejbCreate.invoke(instance, new Object[0]); } catch (InvocationTargetException e) { Throwable ex = e.getTargetException(); if (ex instanceof EJBException) throw (Exception)ex; else if (ex instanceof RuntimeException) throw new EJBException((Exception)ex); // Transform runtime exception into what a bean *should* have thrown else if (ex instanceof Exception) throw (Exception)ex; else throw (Error)ex; } } // Public -------------------------------------------------------- public void setEJBObject(EJBObject eo) { ejbObject = eo; } public EJBObject getEJBObject() { return ejbObject; } public void setEJBLocalObject(EJBLocalObject eo) { ejbLocalObject = eo; } public EJBLocalObject getEJBLocalObject() { return ejbLocalObject; } public SessionContext getSessionContext() { return ctx; } // EnterpriseContext overrides ----------------------------------- public void discard() throws RemoteException { ((SessionBean)instance).ejbRemove(); } public EJBContext getEJBContext() { return ctx; } // Package protected --------------------------------------------- // Protected ----------------------------------------------------- // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- protected class SessionContextImpl extends EJBContextImpl implements SessionContext { public EJBObject getEJBObject() { if (((StatelessSessionContainer)con).getProxyFactory()==null) throw new IllegalStateException( "No remote interface defined." ); if (ejbObject == null) { ejbObject = (EJBObject) ((StatelessSessionContainer)con).getProxyFactory().getStatelessSessionEJBObject(); } return ejbObject; } public EJBLocalObject getEJBLocalObject() { if (con.getLocalHomeClass()==null) throw new IllegalStateException( "No local interface for bean." ); if (ejbLocalObject == null) { ejbLocalObject = ((StatelessSessionContainer)con).getLocalProxyFactory().getStatelessSessionEJBLocalObject(); } return ejbLocalObject; } } }