Lawyer bean package com.ack.j2ee.ejb.session; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.RemoveException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.SessionSynchronization; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; public class LawyerBean implements SessionBean, SessionSynchronization { private SessionContext sessionContext; // called after transaction begin happens on a business method public void afterBegin() { System.out.println( "### just begun transaction" ); } // called just before a transaction completes on a business method public void beforeCompletion() { System.out.println( "### about to complete transaction" ); } // called after the transaction and reports whether it // was committed or not public void afterCompletion( boolean committed ) { System.out.println( "### after transaction: committed -> " + committed ); } public void sendHimDown( String criminal ) { ReporterLocal reporter = 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/journalist" ); // then its business as usual once we have the ejbObject ReporterLocalHome home = (ReporterLocalHome) PortableRemoteObject. narrow( ejbObject, ReporterLocalHome.class ); reporter = home.create(); reporter.makeStory( criminal, true ); } catch( NamingException nex ) { throw new EJBException( "cannot find informer", nex ); } catch( CreateException cex ) { throw new EJBException( "problem getting informed", cex ); } finally { if( reporter != null ) { try { reporter.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; } }