Oracle® Application Server Containers for J2EE Enterprise JavaBeans Developer's Guide
10g Release 2 (10.1.2) Part No. B15505-01 |
|
![]() Previous |
![]() Next |
All EJB clients implement the following steps to instantiate a bean, invoke its methods, and destroy the bean:
Look up the home interface through a JNDI lookup. Follow JNDI and the EJB specification conventions for retrieving the bean reference, including setting up JNDI properties if the bean is remote to the client. See "How to Lookup the EJB Reference".
Narrow the returned object from the JNDI lookup to the home interface, as follows:
Create instances of the bean in the server through the returned object. Invoking the create
method on the home interface causes a new bean to be instantiated and returns a bean reference.
Note: For entity beans that are already instantiated, you can retrieve the bean reference through one of its finder methods. |
Invoke business methods, which are defined in the component (remote or local) interface.
After you are finished, invoke the remove
method. This will either remove the bean instance or return it to a pool. The container controls how to act on the remove
method.
These steps are demonstrated in Example 2-2.
Example 2-2 A Servlet Acting as a Local Client
The following example is executed from a servlet that is collocated with the Hello bean. Thus, the session bean uses the local interface, and the JNDI lookup does not require JNDI properties.
Note: The JNDI name is specified in the<ejb-local-ref> element in this session bean EJB deployment descriptor as follows:
|
package hello; import javax.servlet.http.*; import javax.servlet.*; import javax.ejb.*; import javax.naming.*; import java.io.IOException; public class HelloServlet extends HttpServlet { HelloLocalHome helloHome; HelloLocal hello; public void init() throws ServletException { try { // 1. Retreive the Home Interface using a JNDI Lookup // Retrieve the initial context for JNDI. // No properties needed when local Context context = new InitialContext(); // Retrieve the home interface using a JNDI lookup using // the java:comp/env bean environment variable // specified in web.xml helloHome = (HelloLocalHome) context.lookup("java:comp/env/ejb/HelloBean"); //2. Narrow the returned object to be an HelloHome object. // Since the client is local, cast it to the correct object type. //3. Create the local Hello bean instance, return the reference hello = (HelloLocal)helloHome.create(); } catch(NamingException e) { throw new ServletException("Error looking up home", e); } catch(CreateException e) { throw new ServletException("Error creating local hello bean", e); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); ServletOutputStream out = response.getOutputStream(); try { out.println("<html>"); out.println("<body>"); //4. Invoke a business method on the local interface reference. out.println(hello.sayHello("James Earl")); out.println("</body>"); out.println("</html>"); } catch(EJBException e) { out.println("EJBException error: " + e.getMessage()); } catch(IOException e) { out.println("IOException error: " + e.getMessage()); } finally { out.close(); } } }
Note:: You can download this example on OTN from the OC4J sample code page athttp://www.oracle.com/technology/tech/java/oc4j/demos/ on the OTN Web site.
|
Example 2-3 A Java Client as a Remote Client
The following example is executed from a pure Java client that is a remote client. Any remote client must set up JNDI properties before retrieving the object, using a JNDI lookup.
Note: The JNDI name is specified in the<ejb-ref> element in the this client's application-client.xml file—as follows:
|
The jndi.properties
file for this client is as follows:
java.naming.factory.initial= com.evermind.server.ApplicationClientInitialContextFactory java.naming.provider.url=opmn:ormi://opmnhost:oc4j_inst1/helloworld java.naming.security.principal=admin java.naming.security.credentials=welcome
The pure Java client that invokes Hello
remotely is as follows:
package hello; import javax.ejb.*; import javax.naming.*; import javax.rmi.PortableRemoteObject; import java.io.*; import java.util.*; import java.rmi.RemoteException; /* * A simple client for accessing an EJB. */ public class HelloClient { public static void main(String[] args) { System.out.println("client started..."); try { // Initial context properties are set in the jndi.properties file //1. Retrieve remote interface using a JNDI lookup*/ Context context = new InitialContext(); // Lookup the HelloHome object. The reference is retrieved from the // application-local context (java:comp/env). The variable is // specified in the application-client.xml). Object homeObject = context.lookup("java:comp/env/Helloworld"); //2. Narrow the reference to HelloHome. Since this is a remote // object, use the PortableRemoteObject.narrow method. HelloHome home = (HelloHome) PortableRemoteObject.narrow (homeObject, HelloHome.class); //3. Create the remote object and narrow the reference to Hello. Hello remote = (Hello) PortableRemoteObject.narrow(home.create(), Hello.class); //4. Invoke a business method on the remote interface reference. System.out.println(remote.sayHello("James Earl")); } catch(NamingException e) { System.err.println("NamingException: " + e.getMessage()); } catch(RemoteException e) { System.err.println("RemoteException: " + e.getMessage()); } catch(CreateException e) { System.err.println("FinderException: " + e.getMessage()); } } }
Note: You can download this example on OTN from the OC4J sample code page athttp://www.oracle.com/technology/tech/java/oc4j/demos/ on the OTN Web site.
|