Getting start(为了和tutorial的章节名字相对,以后所有章节采用英文名字)设置:在你开始运行所给的应用程序事例前,你应当按照步骤下载和配置服务器。1.下载示例代码:本教程的源代码在j2eetutorial/examples/src/ejb/converter文件夹下,当你下载并解压缩tutorial bundle的后,会找到这个目录。下载地址:http://java.sun.com/j2ee/download.html#tutoril2.下载build工具(ant)为了运行实例,你必须下载并且安装j2ee sdk和ant。j2ee sdk下载地址:http://java.sun.com/j2ee/download.html#sdk;ant下载地址:http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/bin按照提示解压缩或者安装即可。3.检查环境变量在系统的环境变量中,设置如下:JAVA_HOME: j2se sdk安装的目录J2EE_HOME: j2ee sdk安装的目录ANT_HOME: ant安装的目录PATH: 里面必须含有j2se,j2ee,ant下的bin目录4.运行j2ee服务器在命令提示行下输入j2ee -verbose-verbose不是必需的,但是有利于debug。要停止服务,输入j2ee -stop5.运行deploytool你可以使用2种模式,命令行或者GUI。这里推荐大家使用GUI。运行了j2ee后,在命令提示行输入deploytool。建立j2ee应用程序这个简单的应用程序含有3个组件:一个enterprise bean,一个j2ee客户,一个web组件。在建造这些组件之前,你必须建立一个j2ee应用名字叫CoverterApp,这个会被存储在ConverterApp.ear的文件中1.在deploytool中,选择FileNewApplication。2.点Browse。3.选择目录j2eetutorial/examples/src/ejb/converter。4.输入文件名字ConverterApp.ear。5.点New Application。6.点OK。建立enterprise bean一个enterprise bean是一个包含了商业逻辑的服务器组件。在运行时,客户通过调用enterprise bean的方法执行商业逻辑。在这个例子中,这个bean是一个无状态的会话bean名字是CoverterEJB。源代码在j2eetutorial/examples/src/ejb/converter directory。一个enterprise bean包含3个部分:1.Remote interface 2.Home interface 3.Enterprise bean class 一个Remote interface定义了客户可以调用的方法,方法实现于enterprise bean代码,这个实例的Remote interface如下:import javax.ejb.EJBObject;import java.rmi.RemoteException;import java.math.*;public interface Converter extends EJBObject { public BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException; public BigDecimal yenToEuro(BigDecimal yen) throws RemoteException;}一个home interface允许一个客户创建,查询或者删除一个enterprise bean。ConverterHome interface含有一个创建方法,返回一个remote interface 类型。import java.io.Serializable;import java.rmi.RemoteException;import javax.ejb.CreateException;import javax.ejb.EJBHome;public interface ConverterHome extends EJBHome { Converter create() throws RemoteException, CreateException;}这个示例的enterprise bean类名字是ConverterBean。这个类实现2个商业方法,dollarToYen和yenToEuro。import java.rmi.RemoteException; import javax.ejb.SessionBean;import javax.ejb.SessionContext;import java.math.*;public class ConverterBean implements SessionBean { BigDecimal yenRate = new BigDecimal("121.6000"); BigDecimal euroRate = new BigDecimal("0.0077"); public BigDecimal dollarToYen(BigDecimal dollars) { BigDecimal result = dollars.multiply(yenRate); return result.setScale(2,BigDecimal.ROUND_UP); } public BigDecimal yenToEuro(BigDecimal yen) { BigDecimal result = yen.multiply(euroRate); return result.setScale(2,BigDecimal.ROUND_UP); } public ConverterBean() {} public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sc) {}}现在你可以去编译这些类 1.在命令提示行进入j2eetutorial/examples目录2.输入以下命令ant converterant自动编译这些文件,编译好的文件放在j2eetutorial/examples/build/ejb/converter目录下。打包enterprise bean在deploytool下,选择FileNewEnterprise Bean1.点Next2.在Application button选择Create New JAR File,在下拉菜单选择ConverterApp,在JAR Display Name输入ConverterJAR,点Edit,在数形目录上输入j2eetutorial/examples/build/ejb/converter directory,选择这些类并且点Add:Converter.class, ConverterBean.class, and ConverterHome.class,点OK,点Next。3.选择Bean Type为Session,选择Stateless,Enterprise Bean Class 下拉菜单选择ConverterBean, Enterprise Bean Name为ConverterEJB。在Remote Home Interface选择ConverterHome,在Remote Interface选择Converter,点Next。4.点Finish。创建客户端一个j2ee应用程序客户端是用java写成的。他和服务器端运行在不同的jvm中。示例程序的客户端源代码j2eetutorial/examples/src/ejb/converter/ConverterClient.java。你在运行ant的同时也同时编译了此客户端。一个客户端需要执行这些基本任务:1 Locating the home interface 2 Creating an enterprise bean instance 3 Invoking a business method ConverterHome interface定义了life-cycle methods比如creats,在ConverterClient可以执行create方法前,他必须定位并且示例化一个ConverterHome类型的对象。1 创建initial naming contextContext initial = new InitialContext();上下文是JNDI的一部分。一个上下文是一个名字和对象binding的集合。2 取得客户的环境命名上下文 Context myEnv = (Context)initial.lookup("java:comp/env");3 取得binding在ejb/SimpleConverter上的对象Object objref = myEnv.lookup("ejb/SimpleConverter"); ejb/SimpleConverter被binding在一个enterprise bean引用上,这是一个enterprise bean逻辑的名字。4 缩小指向ConverterHome对象的引用ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objref, ConverterHome.class);为了取得一个bean实例,客户在ConverterHome调用create方法 Converter currencyConverter = home.create();调用商业方法也很简单,这个客户调用dollarToYen方法如下:BigDecimal param = new BigDecimal ("100.00");BigDecimal amount = currencyConverter.dollarToYen(param);客户端程序:The full source code for the ConverterClient program follows. import javax.naming.Context;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;import java.math.BigDecimal;public class ConverterClient { public static void main(String[] args) { try { Context initial = new InitialContext(); Object objref = initial.lookup ("java:comp/env/ejb/SimpleConverter"); ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class); Converter currencyConverter = home.create(); BigDecimal param = new BigDecimal ("100.00"); BigDecimal amount = currencyConverter.dollarToYen(param); System.out.println(amount); amount = currencyConverter.yenToEuro(param); System.out.println(amount); System.exit(0); } catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); } } }打包客户端在deploytool选择New Application Client1 点next2 选择ConverterApp,点edit,在j2eetutorial/examples/build/ejb/converter目录下选择ConverterClient.class点add,点ok,点next。3 在Main Class下拉菜单选择,选择ConverterClient,Display Name为ConverterClient,在Callback Handler Class选择container-managed authentication,点next,点finish。4 在主程序的树选择ConverterClient,选择EJB Refs卡片,在Coded Name column输入ejb/SimpleConverter,在Type column 选择Session,在Interfaces column选择Remote,在Home Interface选择ConverterHome,在Local/Remote Interface column输入Converter。建立web客户端web客户端包含在jsp文件中:j2eetutorial/examples/src/ejb/converter/index.jsp。jsp文件不需要编译。打包web客户端在deploytool的主界面下选择FileNewWeb Component1 next2 选择Create New WAR File,并选择ConverterApp,点edit,在树形目录上面输入j2eetutorial/examples/build/ejb/converter,选择index.jsp然后点add,点ok,点next。3 选择jsp4 在JSP Filename选择index.jsp,点finish5 在主程序的树选择ConverterWAR,选择EJB Refs卡片,点add,在Coded Name column, 输入ejb/TheConverter,其他和客户端设置相同。指定JNDI名称:尽管客户端和web客户端使用相同的bean,但是他们使用不同的名字来使用这个相同的bean,客户端使用ejb/SimpleConverter,而web客户端使用ejb/TheConverter。你必须设置JNDI的名称。在树形目录下选择ConverterApp,选择JNDI Names卡片,在所有的JNDI栏输入MyConverter。配置这个J2EE应用程序1 选择Tools-〉Deploy2 选择Return Client Jar3 输入需要生成jar文件的地址4 点next5 确认JDNI name正确后点next6 在WAR Context Root dialog box,输入converter7 点next8 finish运行J2EE客户端1 在命令行进入j2eetutorial/examples/src/ejb/converter目录2 保证这个目录含有ConverterApp.ear 3 设置环境变量APPCPATH包含ConverterAppClient.jar4 输入以下命令 runclient -client ConverterApp.ear -name ConverterClient -textauth5 用户名:guest 密码:guest1236 运行成功显示如下: Binding name:'java:comp/env/ejb/SimpleConverter' 12160.00 0.77 Unbinding name:'java:comp/env/ejb/SimpleConverter'运行web客户端在浏览器地址输入http://:8000/converter即可host是本机名或者localhost
用j2ee实现的一个简单的会话bean(译自j2ee tutorial)
字体: 小 中 大 | 打印 发表于: 2009-3-02 16:01 作者: edwin1988ab 来源: JAVA中文站社区门户
查看全部回复
我也来说两句
