Getting start(为了和tutorial的章节名字相对,以后所有章节采用英文名字)
设置:
在你开始运行所给的应用程序事例前,你应当按照步骤下载和配置服务器。
1.下载示例代码:
本教程的源代码在j2eetutorial/examples/src/ejb/converter文件夹下,当你下载并解压缩tutorial bundle的后,会找到这个目录。
下载地址:http://Java.sun.com/j2ee/download.Html#tutoril
2.下载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 -stop
5.运行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 converter
ant自动编译这些文件,编译好的文件放在j2eetutorial/examples/build/ejb/converter目录下。
打包enterprise bean
在deploytool下,选择FileNewEnterprise Bean
1.点Next
2.在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 context
Context 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 Client
1 点next
2 选择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 Component
1 next
2 选择Create New WAR File,并选择ConverterApp,点edit,在树形目录上面输入j2eetutorial/examples/build/ejb/converter,选择index.jsp然后点add,点ok,点next。
3 选择jsp
4 在JSP Filename选择index.jsp,点finish
5 在主程序的树选择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-〉Deploy
2 选择Return Client Jar
3 输入需要生成jar文件的地址
4 点next
5 确认JDNI name正确后点next
6 在WAR Context Root dialog box,输入converter
7 点next
8 finish
运行J2EE客户端
1 在命令行进入j2eetutorial/examples/src/ejb/converter目录
2 保证这个目录含有ConverterApp.ear
3 设置环境变量APPCPATH包含ConverterAppClient.jar
4 输入以下命令 runclient -client ConverterApp.ear -name ConverterClient
-textauth
5 用户名:guest 密码:guest123
6 运行成功显示如下: Binding name:'java:comp/env/ejb/SimpleConverter'
12160.00
0.77
Unbinding name:'java:comp/env/ejb/SimpleConverter'
运行web客户端
在浏览器地址输入http://:8000/converter
即可
host是本机名或者localhost
(出处:http://www.knowsky.com)