Huihoo.org - Open Enterprise Foundation

 Last Modified: 2003.04.27

JBOSS开放源代码的EJB服务器


(来源:http://www.swm.com.cn)

J2EE在Sun和IBM等公司的努力下逐渐成为工业标准,现在大约有几十家J2EE应用服务器提供商。最流行的J2EE服务器报价为50000美元(中等规模的安装)。中小企业和普通开发者是无力承担的。

J2EE主要包含以下规范:
* 中间件(middleware) 包括Enterprise Java Bean (EJB)和Java Message Service (JMS)等分布式企业计算的构件(Component)。

* 名称和目录 JNDI(Java Naming and Directory Interface)API用于查找服务和构件。

* 表示(Presentation) 服务器端小程序(Servlet)和Java 服务器页(JSP)支持Web/HTTP浏览器访问

* 事务(Transaction) Java Transaction API(JTA)/Java Transaction Service(JTS)。

关于J2EE的详细资料请参阅其主页http://java.sun.com/j2ee/。

EJB作为J2EE架构中最重要的构件,是服务器端分布式计算模型的核心。EJB服务器是EJB的容器,控制EJB的运行,并且为它提供重要的系统级的服务—事务处理、安全、远端访问、数据库访问等。由此带来的是应用开发的简化,按照EJB的规范开发EJB,运行时由EJB容器负责事务处理,安全,生命周期。典型的J2EE多层应用的结构见图

1,中间层就是J2EE应用服务器,包含Web服务器和EJB服务器。Web服务器包含Web容器和Web构件(Servlet和JSP),EJB服务器包含EJB容器和EJB部件。客户程序包含各种Web浏览器和应用程序,EIS为传统的数据库和企业应用(ERP等)。客户程序与中间层通过HTTP,HTTPS,RMI,CORBA等协议进行数据交换,中间层与EIS通过JDBC等方法实现通讯。

EJB服务器是J2EE应用服务器的一个重要部分。Sun的J2EE SDK,ibm的Websphere,BEA的Weblogic等J2EE实现均内含EJB服务器。也有一些J2EE规范是独立实现的。像本系列第一篇所提及的Tomcat就是Web服务器的实现,本文介绍的Jboss是一个独立的EJB服务器的实现(Jboss的目标是一个源代码开放的J2EE环境,然而现在它只是一个完整的EJB服务器,与其他的Web服务器Tomcat、Jetty的整合也是一个方向)。

EJB(规范1.0-2.0)可以分成两类,会话Bean (Session Bean) 和实体Bean(Entity Bean)。
一般来讲会话Bean是用于商业逻辑计算,实体Bean是用于封装数据库访问。必须根据不同的情况选择这两类EJB。

JBOSS介绍

JBOSS是开放源代码的,遵从J2EE规范的,100%纯java的EJB服务器。Jboss的开发团队有500多人,核心开发人员有50多个,均为J2EE专家。Jboss的用户数以万计,遍及世界。JBOSS采用Java Manage eXtension API 实现软件模块的集成与管理(见图2)。
JBOSS的详细资料请参阅其主页http://www.jboss.org。

JBOSS Suite由以下几个模块(或者API)组成:

Jboss/server Jboss服务器,核心是一个EJB容器,全面支持EJB1.1规范。

Jboss/SpyderMQ JMS的 纯java实现,支持JMS 1.0.2规范。

Jboss/Jaws Just Another Web Storage的缩写,Jaws API实现java对象和关系数据库的映射,Jboss用它实现EJB的连续化(Persistence)。Jaws还增加了Minerva JDBC 连接池(Connection Pooling)模块,以提高访问数据库的效率。

Jboss/Zola Zola提供jboss例程序,来说明J2EE应用的开发和在jboss中的实施(Deploy)。Zola中包含一个例子Zol WebStore,可以作为Web商店,基于JSP、Servlet、EJB,实现在线购物,支持Web和WAP访问。

Jboss/Zoap 支持Simple Object Access Protocol (SOAP) 访问,SOAP是由Microsoft和IBM提出的一个支持世界范围分布式的松耦合的信息交换协议。

SOAP规范的主页位于http://www.w3.org/TR/2000/NOTE-SOAP-20000508/。

Jboss/Castor 与Castor的整合,提供Java Data Object(JDO)支持,实现新的EJB连续化方法。

Jboss/Tomcat 与Tomcat的整合,提供完整的J2EE环境。
Tomcat的主页位于http://jakarta.apache.org/。

Jboss/Jetty 与Jetty的整合,提供完整的J2EE环境。
Jetty的主页位于http://jetty.mortbay.com/。

Jboss/Test Jboss测试环境。

JBOSS使用

Jboss的运行需要JDK 1.2.2 或者1.3。Sun的JDK 1.3位于http://java.sun.com/j2se。安装和使用纯Java的Jboss非常简单,从jboss的主页下载二进制的版本,

jBoss-2.0_FINAL.zip Windows 32
jBoss-2.0_FINAL.tar.gz Unix/Linux

直接解压缩后,呈现下述目录结构:
* bin ——包含可自举的JAR文件run.jar和操作系统相关的启动脚本。run.bat为Windows脚本,run.sh 为UNIX/Linux脚本。
* conf ——包含Jboss自身和其他模块需要的配置文件。
*db——数据库存储所用的目录或配置文件db.properties。
* deploy ——放置EJB-JAR 文件到本目录,实施EJB应用。
* docs——包含Jboss/Server的文档。
* docs/api——包含Jboss/Server的Javadoc文档。
* lib——包含自举JAR文件所需的JMX文件。
* lib/ext——Jboss/Server运行所需要的其他(JAR)文件 。无需配置,Server启动脚本会自动把它们添加到CLASSPATH中。
* log——存储日志文件或配置文件log.properties。
* tmp——存储临时文件或配置文件tmp.properties。

下面以Jboss/Test为基础,介绍EJB应用的实施过程。
关于EJB的书籍,你可以参考Ed Roman的Master Enterprise JavaBeans - and the Java 2 Platform, Enterprise Edition(Willy, 1999,电子版可以在网站http://theserverside.com下载), 以及Richard Monson-Haefel的Enterprise JavaBeans, Second edition (Oreilly, 2000)。

下载Jboss/Test的源代码jbosstest-cvs-sources.zip,解压缩到目录${JBTPATH}中。设置JAVA_HOME指向JDK的安装目录,并且添加${JAVA_HOME}/bin到系统PATH变量中。进入目录${JBTPATH}/src/build,运行相应的脚本编译EJB应用。

【WIN32】
set JBTPATH=c:\jbosstest
set JAVA_HOME=c:\jdk1.3
set PATH=%JAVA_HOME%\bin;%PATH%
cd %JBTPATH%\src\build
build

【UNIX/LINUX BASH】
JBTPATH=/usr/local/jbosstest
JAVA_HOME=/usr/local/jdk1.3
PATH=$JAVA_HOME/bin:$PATH
cd $JBTPATH/src/build
build.sh

如果成功的话,就会在${JBTPATH}中创建一个dist目录,其结构如下:
bin:包含EJB客户程序的脚本。
deploy:包含编译生成的EJB-JAR,可以在Jboss中实施。
lib:包含客户程序运行所需的文件。
复制deploy目录的EJB-JAR到${JBOSS_HOME}/deploy目录就完成了实施过程。

确认JAVA_HOME指向JDK的安装路径,启动jboss服务器,然后运行${JBTPATH}/dist/bin中相应的测试脚本,就可以观察到客户程序的输出。

Jboss与Web 服务器(Tomcat和Jetty)
Tomcat与Jetty均为支持HTML/JSP/Servlet的Web服务器,与Jboss集成为完整的产品级的J2EE服务器。用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便。Jboss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。

小结
Jboss作为 “第三代”应用服务器,对于J2EE开发人员和用户而言是难得的教材。与Linux等开放源代码的系统相结合,在服务器端企业级应用方面更是一股不可低估的力量。