开发第一个分布式的j2ee应用

原创 2004年07月14日 20:23:00

大笑微笑生气吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头生气微笑大笑


偷笑我爱北京天安门偷笑


偷笑天安门上太阳升偷笑


偷笑伟大领袖毛主席偷笑


偷笑指引我们向前进偷笑

偷笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑偷笑

<font size="2">这里先引用Charly的Windows2000下安装J2EE和部署J2EE应用程序中的部门内容<br />1. 安装<br />可以从以下网址下载一个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 目录下。<br /><br />2. 设置环境变量<br />在运行J2EE SDK之前,你必须设置以下环境变量:<br />J2EE_HOME - 你的J2EE SDK所安装的目录。如本例中的:C:/j2sdkee1.3 。<br />JAVA_HOME - 你的Java 2 SDK 所安装的目录。<br />PATH - 设置为你安装J2EE SDK目录下的bin目录。如本例的的:C:/j2sdkee1.3/bin 。<br />ClassPath - 增添%J2EE_HOME%/lib/j2ee.jar到ClassPath中。本例中也可写为:C:/j2sdkee1.3/lib/j2ee.jar<br /><br />3. 运行J2EE<br />Dos命令行敲入以下命令:<br />%J2EE_HOME%/bin/j2ee -verbose<br />显示以下信息表示运行成功:(不同的版本显示可能不同)<br />J2EE server listen port: 1050<br />Naming service started:1050<br />Binding DataSource, name = jdbc/EstoreDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true<br />Binding DataSource, name = jdbc/DB2, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true<br />Binding DataSource, name = jdbc/Cloudscape, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true<br />Binding DataSource, name = jdbc/InventoryDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true<br />Binding DataSource, name = jdbc/DB1, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true<br />Binding DataSource, name = jdbc/XACloudscape, url = jdbc/XACloudscape__xa<br />Binding DataSource, name = jdbc/XACloudscape__xa, dataSource = COM.cloudscape.core.RemoteXaDataSource@330913<br />Starting JMS service ... Initialization complete - waiting for client requests<br />Binding : &lt; JMS Destination : jms/Queue , javax.jms.Queue &gt;<br />Binding : &lt; JMS Destination : jms/Topic , javax.jms.Topic &gt;<br />Binding : &lt; JMS Cnx Factory : jms/TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : jms/QueueConnectionFactory , Queue , No properties >
Binding : < JMS Cnx Factory : QueueConnectionFactory , Queue , No properties >
Starting web service at port:8000
Starting secure web service at port:7000
Apache Tomcat/4.0-b4-dev
Starting web service at port:9191
Apache Tomcat/4.0-b4-dev
J2EE server startup complete.

启动成功后,在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】企业级项目开发总结--JMS基础篇

前面回顾到EJB,说了SessionBean和EntityBean还没提到MessageDrivenBean,我们先了解JMS以后再来谈MessageDrivenBean.下面来看学习和使用JMS必须...
  • zhuanzhe117
  • zhuanzhe117
  • 2015年09月23日 11:16
  • 1968

J2EE 企业级应用架构简述

企业应用的特点 多环境多系统的交互海量数据、高并发、高TPS安全等级高自动化集群管理 架构的原则 CAP原则(一致性、可用性、分区容错性)复杂的事情简单化 ...
  • zwx19921215
  • zwx19921215
  • 2017年03月12日 20:12
  • 684

Java及J2EE Web核心开发技术

精选J2EE Web应用系统开发中所涉及的主要核心应用技术,如面向对象程序设计、Java语言的基本语法、J2EE Web核心开发技术、JDBC数据库访问技术及应用等方面的课程内容,这些核心技术相互组合...
  • shenmanli
  • shenmanli
  • 2015年03月16日 10:34
  • 527

javaweb开发和j2ee区别

J2EE是一种规范,是一种基于框架的开发.      1 javaweb开发  基于JAVA的一般WEB开发,包括了JSP/SERVLET 需要WEB服务器的支持,比如TOMCAT等.(因此只有...
  • hitlisheng
  • hitlisheng
  • 2013年06月10日 09:26
  • 11869

J2EE企业级开发基础教程(1) - Hello World

1 Java语言介绍 1.1 Java语言历史 1995年5月23日,在SunWorld会议上,Sun公司正式展示Java语言,这一天通常称为Java语言诞生日。 1996年,Java语言发布1.0版...
  • herry16354
  • herry16354
  • 2015年03月02日 22:51
  • 660

浅谈JAVA常用分布式实现方式及优缺点

常用的有EJB、rmi、Web Service,还有Hessian、NIO等,它们的优缺点比较比下: 1:EJB     优势:可扩展性好,安全性强,支持分布式事务处理。     劣...
  • whb123andy
  • whb123andy
  • 2015年12月14日 17:28
  • 7174

5个强大的Java分布式缓存框架

以下是我从网络中摘抄的关于java 缓存的一些博文,方便使用时候对他们进行对比和理解。 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑...
  • supingemail
  • supingemail
  • 2015年04月28日 10:30
  • 1922

java分布式通信系统(J2EE分布式服务器架构)

一、序言 近几个月一直从事一个分布式异步通信系统,今天就整理并blog一下. 这是一个全国性的通信平台,对性能,海量数据,容错性以及扩展性有非常高的要求,所以在系统的架构上就不能简单的采用...
  • xyw591238
  • xyw591238
  • 2016年07月11日 16:04
  • 4496

Intellij IDEA开发第一个android应用教程

用惯eclipse的同学们可以试试通过Intellij IDEA来开发一个android应用。下面是具体的教程。 首先:下载Intellij IDEA。最新版本是12。官方提供两个版本。一个是C...
  • cl19920930
  • cl19920930
  • 2013年05月19日 22:03
  • 410

java中的分布式应用(一)之分布式介绍

分布式概念 要理解分布式系统,主要需要明白一下2个方面: 1.分布式系统一定是由多个节点组成的系统。 其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。 2.这些连通的节点上部署了...
  • zzjstudent
  • zzjstudent
  • 2016年08月23日 11:02
  • 24286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发第一个分布式的j2ee应用
举报原因:
原因补充:

(最多只允许输入30个字)