J2EE编程起步 |
作者:佚名 发布时间:2005-04-02 来源:不详
|
为了帮助国内J2EE初学 助。
|
者,将J2EE部分文档进行编译,
|
期望能够对广大Java爱好者有所帮
|
本文将通过简单例子, 子的客户端作为Java独立应 会话,主要通过客户端应用 J2EE,则可以在doc/guides
|
描述如何利用EJB开发、部署和 用运行,由ConverterClient.ja 调用服务器端EJB类ConverterEJ /ejb/examples/converter目录
|
运行一个客户机/服务器应用。例 va类实现。它实现一个简单的实时 B.java来实现。如果你已经安装了 中找到这些例子。
|
为了实现本文所描述的简单例子,你需要完成以下任务: |
下面章节我们将就上述工作任务以及所涉及的知识点进行简单阐述。 |
实现本文提供例子的前 SDK,以及安装了相应操作 关于J2SE和J2EE的安装、配
|
提是您安装了Javasoft.com或相 系统版本的J2EE SDK(www.javas 置和其它进一步信息,请参阅产
|
关操作系统厂商网站下载的J2SE oft.com下载)并进行了正确配置。 品相关文档。
|
实现组件(Enterprise bean class ) |
远程接口定义了客户端能够调用的商 的,本文所涉及的Converter.java编码如
|
业方法,这些商业方法是有服务器端的企业组件实现 下:
|
import javax.ejb.EJBObject;//引入必须的包 |
import java.rmi.RemoteException; |
public interface Converter exten
|
ds EJBObject {//必须继承EJBObject类
|
public double dollar
|
ToYen(double dollars) throws
|
RemoteException;
|
public double yenToEuro(double y
|
en) throws RemoteException;
|
本地接口定义了员徐客 ConverterHome接口只定义
|
户端创建、查找或移动EJB的方 了一个create方法,返回远程接
|
法,本文所涉及的本地接口类 口类型,编码如下:
|
import java.io.Serializable; |
import java.rmi.RemoteException; |
import javax.ejb.CreateException; |
import javax.ejb.EJBHome; |
public interface Con
|
verterHome extends EJBHome {
|
|
Converter create() t
|
hrows RemoteException, Creat
|
eException;
|
本文中的企业组件(EJB)是一个无 实现了两个商业方法:dollarToYen和yen 方法一致,该类编码如下:
|
状态会话组件,命名为ConverterEJB.java,该组件 ToEuro,与远程接口Converter所定义客户端可访问
|
import java.rmi.RemoteException; |
import javax.ejb.SessionBean; |
import javax.ejb.SessionContext; |
public class ConverterEJB implem
|
ents SessionBean {
|
public double dollar
|
ToYen(double dollars) {
|
return dollars * 121.6000; |
public double yenToEuro(double yen) { |
public void ejbCreate() {} |
public void ejbRemove() {} |
public void ejbActivate() {} |
public void ejbPassivate() {} |
public void setSessi
|
onContext(SessionContext sc)
|
{}
|
ZDNet China | 新闻 | 产品 | 技
|
术 | 商务 | 下载 | 游戏 | 论坛 | 短信
|
C#/C++/C | Java | W
|
indows 开发 |Web 开发 | Unix
|
/Linux | 开发过程
|
现在需要对上述三个类 编译:
|
进行编译,在UNIX平台和NT/9X
|
平台上的编译略有区别,分别如下
|
1. 在下面的脚本compileEJB.sh中,将该成实际J2EE安装目录。 |
CPATH=.:$J2EE_HOME/lib/j2ee.jar |
javac -classpath "$CPATH" _ |
ConverterEJB.java ConverterHome.
|
java Converter.java
|
1. 在下面的compileEJ
|
B.bat批处理文件中,将该为实
|
际J2EE安装目录。
|
set CPATH=.;%J2EE_HOME%libj2ee.jar |
javac -classpath %CPATH% Convert
|
erEJB.java ConverterHome.java Converter.java
|
2. 运行批处理文件compileEJB.bat。 |
你不能够直接将企业组 后再部署。在本节,你将创 。
|
件(EJB)部署到J2EE服务器,必 建一个叫做ConverterApp的新J2
|
须将组件加到一个J2EE 应用中然 EE应用并保存为ConverterApp.ear
|
e. 文件命名为ConverterApp.ear. |
ZDNet China | 新闻
|
| 产品 | 技术 | 商务 | 下载
|
| 游戏 | 论坛 | 短信
|
C#/C++/C | Java | Windows 开发
|
|Web 开发 | Unix/Linux | 开发过程
|
现在需要对上述三个类 编译:
|
进行编译,在UNIX平台和NT/9X
|
平台上的编译略有区别,分别如下
|
1. 在下面的脚本compileEJB.sh中,将该成实际J2EE安装目录。 |
CPATH=.:$J2EE_HOME/lib/j2ee.jar |
javac -classpath "$CPATH" _ |
ConverterEJB.java ConverterHome.
|
java Converter.java
|
1. 在下面的compileEJB.bat批处理
|
文件中,将该为实际J2EE安装目录。
|
set CPATH=.;%J2EE_HOME%libj2ee.jar |
javac -classpath %CP
|
ATH% ConverterEJB.java Conve
|
rterHome.java Converter.java
|
2. 运行批处理文件compileEJB.bat。 |
你不能够直接将企业组 后再部署。在本节,你将创 。
|
件(EJB)部署到J2EE服务器,必 建一个叫做ConverterApp的新J2
|
须将组件加到一个J2EE 应用中然 EE应用并保存为ConverterApp.ear
|
e. 文件命名为ConverterApp.ear. |
ZDNet China | 新闻 | 产品 |
|
技术 | 商务 | 下载 | 游戏 | 论坛 | 短信
|
C#/C++/C | Java | Windows 开发
|
|Web 开发 | Unix/Linux | 开发过程
|
现在需要对上述三个类 编译:
|
进行编译,在UNIX平台和NT/9X
|
平台上的编译略有区别,分别如下
|
1. 在下面的脚本compileEJB.sh中,将该成实际J2EE安装目录。 |
CPATH=.:$J2EE_HOME/lib/j2ee.jar |
javac -classpath "$CPATH" _ |
ConverterEJB.java Co
|
nverterHome.java Converter.j
|
ava
|
1. 在下面的compileEJ
|
B.bat批处理文件中,将该为实
|
际J2EE安装目录。
|
set CPATH=.;%J2EE_HOME%libj2ee.jar |
javac -classpath %CP
|
ATH% ConverterEJB.java Conve
|
rterHome.java Converter.java
|
2. 运行批处理文件compileEJB.bat。 |
你不能够直接将企业组 后再部署。在本节,你将创 。
|
件(EJB)部署到J2EE服务器,必 建一个叫做ConverterApp的新J2
|
须将组件加到一个J2EE 应用中然 EE应用并保存为ConverterApp.ear
|
e. 文件命名为ConverterApp.ear. |
ZDNet China | 新闻 | 产品 | 技
|
术 | 商务 | 下载 | 游戏 | 论坛 | 短信
|
C#/C++/C | Java | W
|
indows 开发 |Web 开发 | Unix
|
/Linux | 开发过程
|
现在需要对上述三个类 编译:
|
进行编译,在UNIX平台和NT/9X
|
平台上的编译略有区别,分别如下
|
1. 在下面的脚本compileEJB.sh中,将该成实际J2EE安装目录。 |
CPATH=.:$J2EE_HOME/lib/j2ee.jar |
javac -classpath "$CPATH" _ |
ConverterEJB.java ConverterHome.
|
java Converter.java
|
1. 在下面的compileEJ
|
B.bat批处理文件中,将该为实
|
际J2EE安装目录。
|
set CPATH=.;%J2EE_HOME%libj2ee.jar |
javac -classpath %CPATH% Convert
|
erEJB.java ConverterHome.java Converter.java
|
2. 运行批处理文件compileEJB.bat。 |
你不能够直接将企业组 后再部署。在本节,你将创 。
|
件(EJB)部署到J2EE服务器,必 建一个叫做ConverterApp的新J2
|
须将组件加到一个J2EE 应用中然 EE应用并保存为ConverterApp.ear
|
e. 文件命名为ConverterApp.ear. |
客户端程序ConverterC 括以下步骤:
|
lient是一个独立运行的Java应
|
用,创建ConverterClient主要包
|
ConverterClient.java 源码展示了E
|
JB客户端最基本的任务实现,即:
|
ConverterHome接口定 create方法之前ConverterH
|
义了EJB声明周期方法如create ome对象必须被实例化,包括三
|
,在中ConverterClient 可以调用 个步骤:
|
Context initial = new InitialCon
|
text();
|
2. 查找与JNDI命名MyConverter绑定的对象 |
java.lang.Object objref = initia
|
l.lookup("MyConverter");
|
3. 限定指向ConverterHome对象的参考 |
(ConverterHome) Port
|
ableRemoteObject.narrow(objr
|
ef,
|
客户端通过调用本地接口ConvertHom create 方法返回组件Converter类型的对 业方法可以被客户端调用。当客户端调用 后调用ConverterEJB.ejbCreate 方法。
|
e对象的create方法创建ConverterEJB类对象, 象。然后,远程方法定义的在ConverterEJB实现的商 create 方法时,EJB容器将实例化ConverterEJB,然
|
Converter currencyConverter = ho
|
me.create();
|
完成上述任务后,调用商业方法就比 将相应的调用运行在J2EE服务器中的Conv dollarToYen的代码如下:
|
较简单了。你调用Converter对象的方法, EJB容器 erterEJB 例的方法。客户端调用商业方法
|
double amount = currencyConverte
|
r.dollarToYen(100.00);
|
下面是ConverterClient.java的完整源码: |
import javax.naming.Context; |
import javax.naming.InitialContext; |
import javax.rmi.PortableRemoteObject; |
public class ConverterClient { |
public static void main(String[]
|
args) {
|
Context initial = ne
|
w InitialContext();
|
Object objref = init
|
ial.lookup("MyConverter");
|
(ConverterHome)PortableRemoteObj
|
ect.narrow(objref,
|
Converter currencyConverter = ho
|
me.create();
|
double amount = currencyConverte
|
r.dollarToYen(100.00);
|
System.out.println(String.valueO
|
f(amount));
|
amount = currencyCon
|
verter.yenToEuro(100.00);
|
System.out.println(String.valueO
|
f(amount));
|
currencyConverter.remove(); |
System.err.println("Caught an un
|
expected exception!");
|
|
|
|
|
|