· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

从零开始开发一个分布式的J2EE应用程序

发布时间:2007.05.30 05:47     来源:赛迪网    作者:龚勋

1. 安装

可以从以下网址下载一个J2EE(j2sdkee-1_3-beta2-win.exe):http://java.sun.com/j2ee/j2sdkee-beta/index.html"。也许你已装了旧版的J2EE SDK 产品,如果是,在安装新下载的J2EE之前请先卸载或删掉旧版的J2EE SDK。运行j2sdkee-1_3-beta2-win.exe,按安装步骤安装好J2EE。这里假设你的J2EE安装在:C:\j2sdkee1.3 目录下。

2. 设置环境变量

在运行J2EE SDK之前,你必须设置以下环境变量:

J2EE_HOME - 你的J2EE SDK所安装的目录。如本例中的:C:\j2sdkee1.3 。

JAVA_HOME - 你的Java 2 SDK 所安装的目录。

PATH - 设置为你安装J2EE SDK目录下的bin目录。如本例的的:C:\j2sdkee1.3\bin 。

ClassPath - 增添%J2EE_HOME%\lib\j2ee.jar到ClassPath中。本例中也可写为:C:\j2sdkee1.3\lib\j2ee.jar

3. 运行J2EE

Dos命令行敲入以下命令:

%J2EE_HOME%\bin\j2ee -verbose

启动成功后,在IE浏览器中访问HTTP://localhost:8000 可以看到默认的主页信息。

4. 编写和运行HelloWorld程序

J2EE应用程序一般使用RMI(远程方法调用)来完成客户端与服务器的交互。当然,其间也少不了EJB的作用。本例为一个J2EE应用程序:客户端向服务器发送一个问候语:“Hello,Remote Object”。服务器收到该问候语后打印该问候语,并返回一字符串作为应答。客户端收到此应答后打印它。

RemoteInterface.java

/**
* 第一步:
* 定义一个新的接口继承javax.ejb.EJBObject。
* 新定义的接口中的每一个方法都必须抛出
* java.rmi.RemoteException异常。
*/
public interface RemoteInterface extends javax.ejb.EJBObject
{
public String message(String str)throws java.rmi.RemoteException;
}

RemoteObject.java

/**
* 第二步:
* 定义一个类来实现javax.ejb.SessionBean接口。
* 并在该类中实现在第一步中编写的接口中所定义的方法。
*/
public class RemoteObject implements javax.ejb.SessionBean
{
public String message(String str)throws java.rmi.RemoteException
{
System.out.println("Remote Object Received From Client:
  \""+str+"\""); //打印(从客户端)接收到的字符串。
return "Hello,I'm Remote Object,I received your message:
  \'"+str+"\'"; //返回一应答字符串。
}

public RemoteObject() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(javax.ejb.SessionContext sc) {}
}

RemoteHome.java

/**
* 第三步:
* 定义一个类继承javax.ejb.EJBHome 。
*/
public interface RemoteHome extends javax.ejb.EJBHome
{
RemoteInterface create()throws java.rmi.RemoteException,
 javax.ejb.CreateException;
}

Client.java

/**
* 第四步:
* 定义客户端类。
*/
public class Client
{
public static void main(String[] args)
{
try
{
javax.naming.Context initContext=new javax.naming.InitialContext();
Object obj=initContext.lookup("HelloWorld"); 
//远程查找,由名字得到对应的对象。
RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.
 narrow(obj,RemoteHome.class);
RemoteInterface remote=home.create();
String receiveFromRemote=remote.message("Hello,Remote Object!");
//远程方法调用
System.out.println("Client Received From Remote Object: 
 \""+receiveFromRemote+"\"");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

假设以上四个Java文件存于C:\HelloWorld\下,编译它们如:C:\HelloWorld>javac *.java 。

5. 部署应用程序

启动Application Dopolyment Tool:新开一个Dos窗口,键入以下命令,%J2EE_HOME%\bin\deploytool 。该工具启动速度可能比较慢,要耐心等待。启动成功后会出现主界面(此时不要关闭Dos窗口)。在该界面中选 择 File菜 单 ,再选New Application项。在 Application File Name 输 入 :C:\HelloWorld\HelloWorld.ear 。在 Application Disply Name 输 入 你所喜欢的显示名如:HelloWorld。点 击 OK,在主界面的树形结构Files-->Applications下将增加新的一项:HelloWorld。这意味着产生了一个新的应用程序。接下来我们要做的就是部署该应用程序。在主界面的树形结构下选中HelloWorld,然后再在主界面的File菜单中选取New-->Enterprise Bean,在弹出的名为“New Enterprise Bean - Introduction”窗口中选取Next跳过第一步,在接下来的一步中,Create New EJB File in Application项中选HelloWorld,在EJB Display Name中填上你喜欢的名字如:Hello World EJB,点击Edit按钮,在弹出的窗口中,Start Directory中填:C:\HelloWorld\,在Available Files中展开树形结构C:\HelloWorld\,选取RemoteInterface.class、RemoteObject.class、RemoteHome.class、Client.class四项,点Add按钮添加,然后按OK确定。此时在Contents框中增加了该四个class。点Next进入下一步。Session项选Stateless,意为不保存session状态。Enterprise Bean Class选RemoteObject。Enterprise Bean Name中填上你喜欢的名字如:Hello World Bean。Remote Home Interface中选RemoteHome,Remote Interface中选RemoteInterface。选Next进入下一步。接下来的步骤可直接点Finish。这时主界面的树形结构中Files-->Application-->Hello World中将出现Hello World EJB-->Hello World Bean子项。在主界面的树形结构下选中Hello World,然后再在主界面的Tools菜单中选取Deploy,将弹出新的窗口名为“Deploy Hello World - Introduction”。Object to deploy中选Hello World,Target server中选localhost,选中Retuen Client Jar,在Client Jar File Name中填上:C:\HelloWorld\HelloWorldClient.jar。选Next进入下一步,在Application框的JNDI Name框中双击并填上HelloWorld,注意必须与Client.java中Object obj=initContext.lookup("HelloWorld")的“HelloWorld”保持一致。点Next进入下一步。点Finish完成。这时将出现Deployment Progress窗口。如果有误,该窗口将出现异常信息。如果一切正常,点OK便完成了部署工作。

6. 运行应用程序

新开一个Dos窗口。进入C:\HelloWorld\Classes目录下运行:C:\ HelloWorld\Classes>java -classpath %J2EE_HOME%\lib\j2ee.jar;.;HelloWorldClient.jar; Client 。运行成功则出现如下信息:Client Received From Remote Object: "Hello,I'm Remote Object,I received your message: 'Hello,Remote Object!'" 。而服务端Dos窗口(j2ee -verbose)中出现如下信息:Remote Object Received From Client: "Hello,Remote Object!" 。

好,到了这里大家应该都开始了一个真正的j2ee程序了吧?

可是现在有一个问题,EJB和J2EE的优点是在哪儿?什么是分布式的,在一台机器上那还叫什么分布系统吗?下面我将描述怎么把上面的程序变成分布式的。

如果您直接把client.class copy 到其他的机器上,肯定执行不了。因为你还需要一个home和remote接口,这两个文件在什么地方呢?在helloclient.jar这个包里面!所以你还需要这个包。把那个包也copy过去,执行一下,还是不可以。因为你的jndi名,只是个名字,程序怎么知道你要连的服务器在哪儿呀?所以原来的client代码你需要做如下的改动。改成:

Properties env = new Properties();

env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.cosnaming.CNCtxFactory");

env.put(javax.naming.Context.PROVIDER_URL,"iiop://wcy:1050");

//javax.naming.Context initContext=

new javax.naming.InitialContext(env);

Context initContext = new InitialContext(env);

Object obj=initContext.lookup("HelloWorld");

//远程查找,由名字得到对应的对象。

RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.

narrow(obj,RemoteHome.class);

RemoteInterface remote=home.create();

String receiveFromRemote=remote.message("Hello,Remote Object!");

//远程方法调用

System.out.println("Client Received From Remote Object:

\""+receiveFromRemote+"\"");

重新编译javac *.java成功后。把这个新的类copy到其他的机器上。

打入java -classpath %J2EE_HOME%\lib\j2ee.jar;.;HelloWorldClient.jar; Client

(责任编辑:龚勋)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· J2EE文萃:做好网站开发项目需求的分析 (05-28) · 用缓冲技术提高JSP应用的性能和稳定性 (05-28)
· 对使用Java Socket网络编程的详细讲解 (05-28) · J2EE基础:JSP文件上传原理的简单实现 (05-28)
· 实现高效Java编程规范的十一条基础规则 (05-28) · 彻底学习Java语言中的覆盖和重载的使用 (05-28)
· 用RMI建立一个分布式Java应用程序详解 (05-28) · JDBC中常用的类库和程序中具体实现方法 (05-28)
· Java基础:MVC设计模式减少编程复杂性 (05-28) · J2EE基础:Hibernate的使用的查询方式 (05-28)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..