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:
<ejb-jar>
······
<ejb-name>ejbtest</ejb-name>
······
</ejb-jar>
客户端:web应用中对web.xml不需要添加ejb信息,不需要jboss-web.xml文件。引用ejb对象的jsp文件如下:
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("ejbtest"); //使用<ejb-name> beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
······
演示2:使用jboss.xml文件。
在缺省情况下JBoss的JNDI服务将通过ejb-jar.xml中<ejb-name>XXX</ejb-name>中的XXX来使用EJB的home interface。但是如果有多个ejb对象在相同的ejb jar包中,在ejb-jar.xml中通过<ejb-name>XXX</ejb-name>就可能不能很好的表示某一个ejb对象,所以一般我们希望可以提供一些附加的信息,例如采用这样的格式"[应用名]/[bean名]"来引用一个EJB对象。这时JNDI服务就可能不能正确地找到你的ejb对象,我们就需要使用jboss.xml文件,通过它实现jndi 名到ejb名的重定向。这个文件必须和ejb-jar.xml一起放到META-INFO目录下。
ejb-jar.xml:
<ejb-jar>
······
<ejb-name>ejbtest</ejb-name>
······
</ejb-jar>
jboss.xml:
<jboss>
<ejb-name>ejbtest</ejb-name>
<jndi-name>example/ejbtest</jndi-name>
</jboss>
客户端:需要使用新的jndi名进行ejb定位。
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("example/ejbtest"); //使用<jndi-name> 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文件,添加<ejb-ref>标记,不使用jboss-web.xml文件。
(注意<ejb-ref>包括内部引用和外部引用。如果是同一个单元的可以通过<ejb-link>直接进行引用,而不用提供其他信息。)
web.xml:
······
<ejb-ref>
<ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式-->
<ejb-ref-type>Session</ejb-ref-type>
<home>org.zcx.test.zcxejb1Home</home>
<remote>org.zcx.test.zcxejb1</remote>
<ejb-link>ejbtest</ejb-link> <!--必须和被应用的ejb-name匹配-->
</ejb-ref>
······
客户端:由于在web.xml中引入ejb引用描述这时ejb定位发生了变化:
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); //使用java:comp/env命名空间 beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
······
演示2:联合使用web.xml和jboss-web.xml
web.xml
······
<ejb-ref>
<ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式-->
<ejb-ref-type>Session</ejb-ref-type>
<home>org.zcx.test.zcxejb1Home</home>
<remote>org.zcx.test.zcxejb1</remote>
</ejb-ref>
······
jboss-web.xml
<ejb-ref>
<ejb-ref-name> ejb/ejbtest </ejb-ref-name>
<jndi-name> example/ejbtest </jndi-name> <!-- 这里对应ejb对象的jndi名-->
</ejb-ref>
客户端:
nitialContext ctx = new InitialContext();
Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
以上的所有演示说明了ejb-jar.xml、jboss.xml、web.xml、jboss-web.xml之间的基本关系和它们的使用方式。它们是部署各类ejb对象的关键文件。接下来介绍针对不同类型的ejb对象所需要的特殊配置。
3.JBoss3.0中对于CMP2.0 Entity Bean的有关配置
JBoss3.0中JBossCMP引擎实现了EJB2.0 CMP2.0规范。JBoss3.0以前的版本CMP的引擎是Jaws,它通过standardjaws.xml和jaws.xml进行有关的配置。在新的JBossCMP引擎中Jboss3.0通过standardjbosscmp-jdbc.xml和josscmp-jdbc.xml来配置Entity Bean。JBoss3.0首先处理standardjbosscmp-jdbc.xml然后根据ejb jar中是否提供jbosscmp-jdbc.xml来做进一步处理。通过standardjbosscmp-jdbc.xml和jbosscmp-jdbc.xml可以为entity bean的部署提供如下的功能有:
l 指定所使用的数据源和对应的类型映射
l 指定一些引擎关心的属性
l 指定引擎如何创建和管理数据库表的原则
l 描述finder和ejbSelect方法
l 指定属性和字段的类型映射
这里主要根据standardjbosscmp-jdbc.xml/jbosscmp-jdbc.xml介绍CMP2.0的配置方法。JBoss中原有的Jaws引擎的配置方法和新的JBossCMP的配置方法类似。这些文件的具体的信息可以参考JBoss安装路径下\docs\dtd中对应的DTD文件。
3.1增加新的数据源
JBoss自带的数据库是Hypersonic数据库,我们可以增加一些新的数据源。具体的步骤很简单,参照Jboss安装目录下\docs\examples\jca中的*-service.xml文件可以增加找到对应类型的数据库配置样本文件。以mysql-service.xml文件为例,它可以配置一个MySQL数据库作为Entity Bean的数据源。以下演示创建一个名为MySQLDS的MySQL数据源。
图一是配置好的mysql-service.xml文件的一段代码样本,通过属性设置可以定制数据源的名称和有关连接的其他属性。注意该文件中所有name属性必须保持一致。
图一 mysql-servic.xml的样本代码
在配置好这个文件后,把它部署在JBoss的deploy目录下,把对应的jdbc驱动也放在lib目录下。重新启动Jboss就会加载这个新的数据源。
3.2 Entity Bean 对数据源的使用
第一种方式:
直接改动standardjbosscmp-jdbc.xml。把原有的数据源java:/DefautlDS屏蔽掉使用新的数据源java:/MySQLDS。(Java前缀是必须的。)不需在其他地方作改动。JBoss会实现新的数据源做为缺省的数据源。图二是一个配置好的文件片断。
图二 standardjbosscmp-jdbc.xml的样本代码
第二种方式:
由于有可能不同的Entity Bean使用不同的数据源,而不是都使用同样的缺省配置,所以必须为单独的Entity Bean提供定制数据源信息的支持。这时不需要改动standardjbosscmp-jdbc.xml文件,可以通过在Entity Bean的jar包中META-INFO目录下添加新的部署文件jbosscmp-jdbc.xml来完成。通过这个文件可以描述特定的Entity Bean的关于数据源的配置信息。图三是一个配置好的文件片断。
图三 jbosscmp-jdbc.xml的样本代码
4.JBoss3.0中对于Message Driven Bean的配置
在JBoss中开发MDB需要使用JMS功能。JMS是Sun公司开发的面向消息的中间件API。它的主要目的是创造一种统一的面向消息编程的JavaAPI,从而避免使用提供商特定的API。现在有几种不同的JMS系统可供使用。JBoss3.0中提供的是JBossMQ。
4.1 JBoss3.0中配置JMS服务
在JBoss3.0中与JMS服务相关的配置文件包括两个文件:jbossMQ-service.xml
分享到:
相关推荐
在Java企业版(Java EE)应用开发中,EJB(Enterprise JavaBeans)是核心组件,用于构建可扩展、安全和事务处理的服务器端应用程序。JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括...
在本文中,我们将深入探讨如何使用JBOSS服务器与EJB3.0相结合,并结合MySQL数据库进行企业级应用开发。JBOSS是一个流行的开源Java应用服务器,它支持EJB(Enterprise JavaBeans)3.0规范,这是一个用于构建企业级...
通过本文的介绍,我们深入了解了如何使用MyEclipse和JBoss进行EJB开发,从项目创建到最终部署的整个流程。掌握了这些知识,开发者可以更加高效地开发出高质量的企业级应用程序。无论是新手还是有经验的开发者,理解...
描述中提到的“Eclipse+JBoss开发环境下必不可少的东东”,暗示了这份资料可能是开发者在使用Eclipse与JBoss集成进行EJB开发时的重要参考资料,可能包含了配置指南、步骤说明、示例代码等,帮助开发者理解如何在2003...
总的来说,MyEclipse结合JBoss提供了一个高效、便捷的EJB开发环境,使开发者能够轻松地利用EJB技术来构建企业级应用。无论是新手还是经验丰富的开发者,都可以从中受益,实现更高质量的Java EE项目开发。
《精通JBoss——EJB与Web Services开发精解》是一本深入探讨企业级Java应用开发的专业书籍...通过阅读和实践书中的例子,读者将能够自信地应对实际项目中遇到的各种挑战,成为真正的JBoss、EJB和Web Services开发专家。
### jBoss EJB 3.0 开发指南 #### 一、引言 随着 Java 技术的发展,企业级应用的复杂度不断提高,EJB(Enterprise ...通过这些步骤,开发者可以快速上手 EJB 3.0 的开发,并将其应用于实际的企业级应用开发中。
在IT行业中,开发企业级应用程序通常涉及到多个技术的集成,如Eclipse作为IDE,Jboss作为应用服务器,以及MySql作为数据库系统。本教程将详细阐述如何利用这些工具来开发EJB(Enterprise JavaBeans)。 **Eclipse**...
本文将围绕“Jboss下开发ejb应用之一会话bean的应用”这一主题,深入探讨如何在Jboss应用服务器上开发和部署会话Bean,以及涉及到的相关工具和源码。 会话Bean是EJB的一种类型,它代表了业务逻辑组件,为客户端提供...
在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...
EJB3是Java EE平台中的一个核心组件,它极大地简化了企业级Java组件的开发,通过注解驱动和POJO(Plain Old Java Object)模型,降低了EJB的复杂性。 1. **EJB3概述** EJB3是Java EE6规范中的重要部分,它引入了...
【标题】"jboss 测试EJB 的例子" 涉及的知识点主要围绕Java企业版(Java EE)中的核心组件——Enterprise JavaBeans(EJB)。EJB是Java平台上的一个标准,用于构建可扩展、安全且事务处理能力强大的分布式企业级应用...
本篇文章将深入探讨在JBoss应用服务器上开发EJB应用,特别是实体Bean的使用。 标题:“Jboss下开发ejb应用之一实体bean的应用” 首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与...
通过上述步骤,我们不仅了解了 EJB 3.0 的基本概念及其与早期版本的区别,还学习了如何在 Eclipse 中整合 JBoss 来开发和部署一个简单的 EJB 3.0 应用。这种集成开发方式大大简化了开发过程,提高了开发效率,同时也...
【JBoss + EJB】是Java企业版(Java EE)中的关键组成部分,JBoss是一个开源的应用服务器,而EJB(Enterprise JavaBeans)是Java EE中用于构建可复用的、安全的、分布式的企业级应用程序的核心组件。这篇博客文章将...
在 JBoss 7.1 中部署这些组件,你需要配置 `jboss-ejb3.xml` 或 `ejb-jar.xml` 配置文件来声明 EJB 组件,同时在 `jboss-as-client.xml` 中设置客户端连接的配置,以便正确地连接到服务器。 开发 EJB 时,你需要...
标题"jboss ejb 3.zip"和描述中的"jboss ejb 3.zip"都指向同一个主题,即JBoss企业级JavaBean(EJB)3.0版本的相关内容。JBoss是Red Hat公司的一个开源应用服务器,而EJB是Java平台上用于构建可扩展、分布式、安全和...
总之,【JBoss Myeclipse EJB3 First Demo】是一个很好的起点,它将帮助你理解EJB3的基本概念,掌握如何在MyEclipse环境中使用JBoss服务器进行EJB开发。通过实践这个教程,你不仅能够学习到EJB3的核心功能,还能提升...