Starting with JOnAS 2.6 with its web container service, it is possible to access an enterprise Java bean and its environment in a J2EE-compliant way.
The following sections describe:
How to access the Remote Home interface of a bean.
How to access the Local Home interface of a bean.
How to access the environment of a bean.
How to start transactions in servlets.
Note | |
---|---|
All the following code examples are taken from the The EarSample example provided in the JOnAS distribution. |
In this example the servlet gets the Remote Home interface OpHome registered in JNDI using an EJB reference, then creates a new instance of the Session Bean:
import javax.naming.Context; import javax.naming.InitialContext; //remote interface import org.objectweb.earsample.beans.secusb.Op; import org.objectweb.earsample.beans.secusb.OpHome; Context initialContext = null; try { initialContext = new InitialContext(); } catch (Exception e) { out.print("<li>Cannot get initial context for JNDI: "); out.println(e + "</li>"); return; } // Connecting to OpHome through JNDI OpHome opHome = null; try { opHome = (OpHome) PortableRemoteObject.narrow(initialContext.lookup \ ("java:comp/env/ejb/Op"), OpHome.class); } catch (Exception e) { out.println("<li>Cannot lookup java:comp/env/ejb/Op: " + e + "</li>"); return; } // OpBean creation Op op = null; try { op = opHome.create("User1"); } catch (Exception e) { out.println("<li>Cannot create OpBean: " + e + "</li>"); return; } |
Note that the following elements must be set in the web.xml file tied to this web application:
<ejb-ref> <ejb-ref-name>ejb/Op</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>org.objectweb.earsample.beans.secusb.OpHome</home> <remote>org.objectweb.earsample.beans.secusb.Op</remote> <ejb-link>secusb.jar#Op</ejb-link> </ejb-ref> |
The following example shows how to obtain a local home interface OpLocalHome using an EJB local reference:
//local interfaces import org.objectweb.earsample.beans.secusb.OpLocal; import org.objectweb.earsample.beans.secusb.OpLocalHome; // Connecting to OpLocalHome thru JNDI OpLocalHome opLocalHome = null; try { opLocalHome = (OpLocalHome) initialContext.lookup("java:comp/env/ejb/OpLocal"); } catch (Exception e) { out.println("<li>Cannot lookup java:comp/env/ejb/OpLocal: " + e + "</li>"); return; } |
This is found in the web.xml file:
<ejb-local-ref> <ejb-ref-name>ejb/OpLocal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>org.objectweb.earsample.beans.secusb.OpLocalHome </local-home> <local>org.objectweb.earsample.beans.secusb.OpLocal</local> <ejb-link>secusb.jar#Op</ejb-link> </ejb-local-ref> |
In this example, the servlet seeks to access the component's environment:
String envEntry = null; try { envEntry = (String) initialContext.lookup("java:comp/env/envEntryString"); } catch (Exception e) { out.println("<li>Cannot get env-entry on JNDI " + e + "</li>"); return; } |
This is the corresponding part of the web.xml file:
<env-entry> <env-entry-name>envEntryString</env-entry-name> <env-entry-value>This is a string from env-entry</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> |
The servlet wants to start transactions via the UserTransaction:
import javax.transaction.UserTransaction; // We want to start transactions from client: get UserTransaction UserTransaction utx = null; try { utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); } catch (Exception e) { out.println("<li>Cannot lookup java:comp/UserTransaction: " + e + "</li>"); return; } try { utx.begin(); opLocal.buy(10); opLocal.buy(20); utx.commit(); } catch (Exception e) { out.println("<li>exception during 1st Tx: " + e + "</li>"); return; } |