Equalizer bean package com.ack.j2ee.ejb.session; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.RemoveException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; /** * Equalizer ... one the top CIA informers cia/grass Session com.ack.j2ee.ejb.session.EqualizerHome com.ack.j2ee.ejb.session.Equalizer Equalizer */ public class EqualizerBean implements SessionBean { private SessionContext sessionContext; public String getTimeOfHit() throws RemoteException { Informer informer = null; try { InitialContext ctx = new InitialContext(); // note that by making the Informer session bean an ejb link, // it can be accessed from within its naming environment, // that is 'java:comp/env' by using the name specified // within its deployment descriptor, that is 'cia/grass' Object ejbObject = ctx.lookup( "java:comp/env/cia/grass" ); // then its business as usual once we have the ejbObject InformerHome home = (InformerHome) PortableRemoteObject. narrow( ejbObject, InformerHome.class ); informer = home.create(); return "Assassination Time: " + informer.getTheTime(); } catch( NamingException nex ) { throw new EJBException( "cannot find informer", nex ); } catch( CreateException cex ) { throw new EJBException( "problem getting informed", cex ); } finally { if( informer != null ) { try { informer.remove(); } catch( RemoveException rex ) { throw new EJBException( "problem getting rid of informer", rex ); } } } } public void ejbCreate() throws CreateException { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext( SessionContext sessionContext ) { this.sessionContext = sessionContext; } }