王朝网络
分享
 
 
 

在JBoss下开发、部署EJB

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

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 test application

Test

GreetEJB

greet.GreetHome

greet.Greet

greet.GreetBean

Stateless

Bean

jboss.xml

虽然ejb-jar.xml对所有的EJB服务器都是通用的,但它并没有为EJB服务器提供将要被部署的EJB的全部信息。为了能够对EJB的部署进行更灵活的控制,大部分EJB服务器都要求EJB开发者同时提供另外一个文件来对将要部署的EJB进行描述,在JBoss中该文件为jboss.xml,它也位于JAR包中的META-INF目录中。jboss.xml中可以对EJB对应的JNDI名字以及相应的持久性进行说明,在本例中用到的jboss.xml如下所示:

GreetEJB

GreetingEJB

false

部署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目录下

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有