站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题jboss下ejb简介

jboss下ejb简介

摘要: 由于本文主要介绍JBoss3.0中不同类型EJB的配置和部署,不对基本的EJB开发做太多的描述,所以希望读者具有J2EE和EJB的经验。想要了解有关信息请查阅参考资料1。
1.JBoss简介

JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术,并且它还在the JavaWorld Editors' Choice 2002评选中获得“最佳Java应用服务器”大奖。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。有关JBoss的详细信息请参阅其主页http://www.jboss.org。

刚开始使用JBoss进行EJB开发时,由于可供参考的资源不是很多,所以有一个比较困难的起步阶段。JBoss的配置和使用没有提供图形向导界面,所以开发部署EJB相对比较复杂。本文通过尽量具体的演示来对JBoss3.0下的EJB开发和部署的进行一个简单的介绍,从而使刚开始使用JBoss的用户可以很快地进入到真正的J2EE应用开发中。

由于本文主要介绍JBoss3.0中不同类型EJB的配置和部署,不对基本的EJB开发做太多的描述,所以希望读者具有J2EE和EJB的经验。想要了解有关信息请查阅参考资料1。

2.JBoss3.0中基本的ejb配置和部署
根据J2EE规范的要求,一个基本的ejb jar包使用的描述文件是ejb-jar.xml。web应用的war包使用的是web.xml。企业应用的ear包使用的是application.xml。这些配置文件都是中性的和平台无关的。同时应用服务器可以使用一些其他的配置文件用于描述特定服务器的相关信息。在JBoss中这样的文件有jboss.xml,jboss-web.xml等。JBoss容器中这些文件不是必须的,如果提供了那么jboss.xml和ejb-jar.xml放在同一目录下,jboss-web.xml和web.xml放在同一目录下。关于jboss.xml和jboss-web.xml的规范请参考JBoss安装目录下docs/dtd/目录下的对应的DTD文件。

2.1 JBoss中关于EJB客户端的配置:
调用EJB的客户端可以是JSP、Servlet或客户端应用程序。如果客户端和服务器不在同一个Java VM上,那么在客户端必须提供一个jndi.properties文件告诉客户端进行有关JNDI命名服务的信息,并且把这个文件所在目录设定到环境变量classpath中。

以下是一个jndi.properties的样例:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099 (服务器地址和端口号)
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
通过这个文件和JBoss的一些客户端类库,就可以使用JBoss提供的EJB对象服务了。

2.2 JBoss中部署EJB:
首先介绍JBoss容器中部署各类EJB对象的两种方法。下面的演示以Session Bean为例,客户端是一个本机上的web应用。这里不对演示程序进行具体介绍。

第一种方式:

把开发好的ejb jar包和web应用的war包公共放在deploy目录下。

演示1:不需要jboss.xml文件和其他任何特殊的设置。

ejb-jar.xml:



······

ejbtest

······



客户端:web应用中对web.xml不需要添加ejb信息,不需要jboss-web.xml文件。引用ejb对象的jsp文件如下:

       ······

InitialContext ctx = new InitialContext();

Object objref = ctx.lookup("ejbtest"); //使用 beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

······




演示2:使用jboss.xml文件。

在缺省情况下JBoss的JNDI服务将通过ejb-jar.xml中XXX中的XXX来使用EJB的home interface。但是如果有多个ejb对象在相同的ejb jar包中,在ejb-jar.xml中通过XXX就可能不能很好的表示某一个ejb对象,所以一般我们希望可以提供一些附加的信息,例如采用这样的格式"[应用名]/[bean名]"来引用一个EJB对象。这时JNDI服务就可能不能正确地找到你的ejb对象,我们就需要使用jboss.xml文件,通过它实现jndi 名到ejb名的重定向。这个文件必须和ejb-jar.xml一起放到META-INFO目录下。

ejb-jar.xml:



······

ejbtest

······



jboss.xml:



ejbtest

example/ejbtest





客户端:需要使用新的jndi名进行ejb定位。

······

InitialContext ctx = new InitialContext();

Object objref = ctx.lookup("example/ejbtest"); //使用 beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);

······


第二种方式:

把ejb和web应用包装成一个企业应用包。部署ear时可以简单地把通过application.xml描述ejb jar包和web应用的war包,同样在web.war中不需要提供特殊的信息就可以和第一种方式一样使用ejb对象。客户端代码也不需要进行改动。这里不再举例说明。

此外我们可以进行更进一步的部署,这时需要使用到web.xml和jboss-web.xml。jboss-web.xml是JBoss提供的一个针对web应用进行配置的文件。jboss-web.xml和web.xml一起放在web应用的WEB-INF目录下。

演示1:改动web.xml文件,添加标记,不使用jboss-web.xml文件。

(注意包括内部引用和外部引用。如果是同一个单元的可以通过直接进行引用,而不用提供其他信息。)

web.xml:

······



ejb/ejbtest