jboss是一个开放源码的ejb服务器,它与其它服务器整合后可以提供一个完整的j2ee平台。本文介绍如何在linux环境下安装和配置jboss,以及如何在jboss平台上实现ejb的开发和部署。
作为j2ee架构中最重要的构件,ejb是实现服务器端分布式计算的核心。ebj服务器是ejb的容器,它控制着ejb的运行,并为其提供事务处理、数据库访问、安全控制等一系列系统级的服务。
ejb服务器是j2ee应用服务器的一个重要组成部分。sun公司的j2ee sdk、ibm公司的websphere,以及bea公司的weblogic等j2ee实现都内嵌了ejb服务器。虽然jboss目前还不是一个完整的j2ee应用服务器,但它却是一个完整的ejb服务器,在与tomcat、jetty等web服务器整合后,能够提供一个完整的j2ee平台。
jboss最大的优点在于它是源代码开放的自由软件,并完全遵循j2ee规范。由于jboss强大的功能和优异的性能,以及与linux等gnu项目的结合,目前已经成为j2ee服务器端企业级应用的一股强大力量。
安装jboss
jboss的安装和配置相对比较简单。首先到http://www.jboss.org上下载jboss软件包。目前jboss的最高版本为3.0,建议下载相对稳定的jboss2.4.4和tomcat3.2.3集成的二进制软件包,这样就避免了单个软件包下载后jboss和tomcat之间的配置问题。
下载的软件包解压缩到/usr目录后,将生成/usr/jboss-2.4.4_tomcat-3.2.3这目录。为方便今后的使用,把该目录更名为/usr/jb_tom。在/usr/jb_tom目录下可以找到/usr/jb_tom/jboss和/usr/jb_tom/tomcat两个子目录,它们分别为jboss和tomcat的根目录。
在正式启动jboss之前,应该先安装好jdk(建议安装jdk 1.3以上的版本),并将环境变量classpath设置好。位于/usr/jb_tom/jboss/bin目录下的run_withtomcat.sh文件是jboss和tomcat的启动脚本,按照jboss和tomcat的默认配置,运行该脚本后将分别在8080和8083端口启动jboss和tomcat的http服务。如果一切正常,此时在浏览器中输入http://localhost:8080将出现tomcat的首页,而输入http://localhost:8080则出现无错误的空白页面。
创建ejb
下面以一个简单的无状态会话bean为例,讲述如何为jboss平台编写ejb。按照ejb规范,一个ejb中至少应该包含如下三个类的实现:
◆远程接口
远程接口暴露了整个ejb对外界的接口,在本例中远程接口封装在greet.greet类中。
◆本地接口
本地接口描述了创建、管理和销毁ejb时的行为,在本例中本地接口封装在greet.greethome类中。
◆bean类
bean类实现了远程接口中定义的所有方法,在本例中bean类封装在greet.greatbean类中。
ejb在发布时是以一个jar包的形式提供的。ejb服务器要求该jar包中必须包含所有的类文件和相应的部署文件,并且要按照ejb开发时的目录结构进行组织。在我们的例子中,所有的类文件都位于greet目录下,部署文件则位于meta-inf目录下,相应的目录结构为:
greet
+-- greet.java
+-- greethome.java
+-- greetbean.java
meta-inf
+-- ejb-jar.xml
+-- jboss.xml
1.定义远程接口
ejb向外界暴露的接口都在远程接口中进行定义,本例中的ejb只向外界提供了一个接口为calculatemagic,相应的源文件为greet.java,代码如下:
package greet;
import javax.ejb.ejbobject;
import java.rmi.remoteexception;
/**
* 这个接口为‘greet’定义了远程接口
public interface greet extends ejbobject
{
public double calculatemagic(double seed) throws remoteexception;
}
2.定义本地接口
ejb的本地接口对创建、管理和销毁ejb的行为进行了描述,本地接口至少应该提供create()方法,以便对ejb创建时的行为进行相应的描述。例子中本地接口对应的源文件为greethome.java,代码如下:
package greet;
import java.io.serializable;
import java.rmi.remoteexception;
import javax.ejb.createexception;
import javax.ejb.ejbhome;
public interface greethome extends ejbhome
{
greet create() throws remoteexception, createexception;
}
3. 实现bean类
ejb真正完成的工作是在bean类中实现的,bean类必须为远程接口中定义的所有方法提供相应的实现。本例中的bean类对应的源文件为greetbean.java:
package greet;
import java.rmi.remoteexception;
import javax.ejb.sessionbean;
import javax.ejb.sessioncontext;
public class greetbean implements sessionbean
{
public double calculatemagic(double seed) {
system.out.println ("someone called `calculatemagic!'");
return seed * math.random();
}
public greetbean() {}
public void ejbcreate() {
system.out.println("create greet ejb.");
}
public void ejbremove() {
system.out.println("remove greet ejb.");
}
public void ejbactivate() {
system.out.println("activate greet ejb");
}
public void ejbpassivate() {
system.out.println("passivate greet ejb");
}
/**
* set context for `greet' ejb
*/
public void setsessioncontext(sessioncontext sc) {
system.out.println("set context for greet ejb");
}
}
在给出ejb的接口定义并提供了bean类的具体实现后,用下面的命令对这些.java文件进行编译,生成相应的.class文件:
javac *.java -classpath /usr/jb_tom/jboss/lib/ext/jboss-j2ee.jar:.
部署描述符
根据ejb规范,要想将ejb成功地部署到ejb服务器上,必须为ejb服务器提供相应的部署描述符。部署描述符对所要部署的ejb进行了说明,包括该ejb的远程描述符、本地描述符和bean类等信息。由于ejb服务器只有在获得这些基本信息后才能正确完成ejb的部署,因此编写ejb描述符是开发ejb时必不可少的一个环节。
对于不同的ejb服务器来说,部署同一ejb时所需的部署描述符可能并不相同。在jboss平台上,任何将要被部署的ejb都必须提供ejb-jar.xml和jboss.xml两个文件,这两个文件均位于jar包中的meta-inf目录下,用于对将要部署的ejb进行简要的说明。
ejb-jar.xml
ejb-jar.xml是ejb规范定义的标准部署描述符,在任何ejb服务器上部署ejb时都需要用到该部署描述符。本例中用到的ejb-jar.xml代码如下所示:
jboss.xml
虽然ejb-jar.xml对所有的ejb服务器都是通用的,但它并没有为ejb服务器提供将要被部署的ejb的全部信息。为了能够对ejb的部署进行更灵活的控制,大部分ejb服务器都要求ejb开发者同时提供另外一个文件来对将要部署的ejb进行描述,在jboss中该文件为jboss.xml,它也位于jar包中的meta-inf目录中。jboss.xml中可以对ejb对应的jndi名字以及相应的持久性进行说明,在本例中用到的jboss.xml如下所示:
部署ejb
开发ejb的最后一步是将其中所有的类文件和相应的部署描述符压缩成jar包,然后部署到ejb服务器上。在本例中,jar包的生成可以通过下面这条命令来实现:
jar cf greetejb.jar greet/*.class meta-inf/*.xml
该命令将greet目录下的.class文件和meta-inf目录下的.xml文件压缩成greetejb.jar文件。如果想知道生成的jar包是否正确地包含了所有的文件,可以用命令:
jar cvf greetejb.jar
来查看greetejb.jar中包含的文件。如果得到如下的类似信息,则说明所需的文件都已经被正确地包含在该压缩包中了,信息如下:
0 sun may 24 15:32:10 cst 2002 meta-inf/
68 sun may 24 15:32:10 cst 2002 meta-inf/manifest.mf
1007 sun may 24 14:35:46 cst 2002 greet/greetbean.class
209 sun may 24 14:35:46 cst 2002 greet/greet.class
251 sun may 24 14:35:46 cst 2002 greet/greethome.class
493 sun may 24 08:40:00 cst 2002 meta-inf/ejb-jar.xml
303 sun may 24 08:43:22 cst 2002 meta-inf/jboss.xml
生成的jar包在jboss上的部署相当简单,只需要将该文件复制到jboss的deploy目录下
闽公网安备 35060202000074号