Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530093
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:55:29

一起学习
部署EJB组件的艺术
(仙人掌工作室 )

Sun用“Write once,run anywhere”这一口号来推崇Java的跨平台移植能力。然而,对于大多数Java开发者来说,这个口号与其说反映了真实的Java应用部署,还不如说它代表着一个美好的、在一定程度上可以说远大的目标。例如,如果要让Java Applet在Netscape和IE浏览器中运行得完全一样,你得好好试验几次。类似地,在不同的Java兼容平台上,要让Java应用以完全同样的方式运行,你得耐心地进行一番辛苦的、彻底的测试。

但请不要误解我们的意思。Java是一种优秀的技术,特别是用来作为服务器端解决方案时,这一点尤其突出。我们认为,Java 2平台企业版(J2EE)是首选的Web服务开发环境。然而,对于Enterprise JavaBean(EJB),在不同的平台上部署同一EJB组件时也会出现一些与平台有关的问题。虽然我们完全有可能编写出部署方法统一的EJB代码,这些代码和应用服务器必须遵从同一版本的EJB规范。在很多情况下,要正确地安装和部署EJB,EJB的部署者必须针对不同的应用服务器进行不同的处理。

用初学者的眼光来看,本文介绍的是:在不同的应用服务器上部署同一EJB组件时,其部署过程的一些细微差别。这些应用服务器包括BEA的WebLogic、IBM的WebSphere和源代码开放组织的JBoss应用服务器。

一、EJB部署过程
在不同的应用服务器之间,EJB组件部署过程的不同由多种原因造成。首先,在描述如何部署EJB组件方面,EJB规范只提供了最小限度的指导。因此,供应商从不同的方向解释J2EE/EJB规范的这一部分,在为自己的平台定义组件部署步骤时,作出了各自的判断。

第二,组件部署是一个应用服务器供应商可以为其产品增值和增加独特功能的领域,供应商们把该过程标准化的热情不高。另外,这种部署标准的缺乏为应用服务器和Java IDE供应商带来了机会,使得它们能够集成自己的工具集,以便有效地方便EJB开发和部署——只有当你选择的IDE支持你的目标应用服务器时,这个过程才能得以简化。因此,对于一个给定的EJB,它的部署步骤必须根据具体情况进行分析,而且通常对于每一个应用服务器来说,部署步骤往往有所不同。

为了阐明这个问题,我们试验了两种EJB实现,一个LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)无状态会话Bean和一个简单的容器管理的实体(container-managed persistence,CMP)Bean。在这篇文章中,我们将了解把同一EJB部署到WebLogic、WebSphere和JBoss应用服务器时的主要不同之处。必须说明的是,虽然我们承认,如果利用与特定应用服务器密切关联的部署工具(例如,对于WebSphere服务器,使用VisualAge for Java),EJB部署过程将更加流畅;但是,这里我们将尽可能地用手工方式进行处理(利用vi/Emacs和JDK的jar工具编写代码、编写部署描述器文件、创建jar文件)。

为方便起见,文章最后提供了一个可下载的ZIP文件,它包含了本文用到的两个EJB示例,即HelloWorldLdap和ProfileTest。

二、HelloWorldLdap: LDAP无状态会话Bean
我们的第一个例子是一个无状态会话Bean,它从一个LDAP目录提取信息。用户(在这里是客户)可以在命令行指定一个LDAP服务器、email地址和DN(Distinguished Name)名称,EJB将从指定的目录提取该DN的所有属性。

类的路径问题可能干扰EJB和客户程序的编译。举例来说,我们选择把Netscape LDAP目录加入到第一个例子。一般而言,编译EJB代码的时候应该在类路径中指定J2EE JDK附带的j2ee.jar库,或者与它相当的库(对于JBoss,使用jboss.jar;对于WebLogic,使用weblogic.jar)。然而,编译客户程序的时候,类路径中还必须包含供应商的客户库,因为客户程序必须用到一个与特定供应商以及编译后的EJB组件有关的初始环境。另外,WebSphere客户程序还要求被部署的EJB jar文件也在classpath中。

成功地编译EJB之后就可以开始准备部署EJB。为部署Bean,META-INF目录下必须包含至少一个部署描述器(Deployment Descriptor)。本例的部署描述器ejb-jar.xml就位于该例子的META-INF目录下,在部署之前,我们把它和EJB类文件一起用jar打包。我们的第一个例子HelloWorldLdap有两个目录,即HelloWorldLdap和META-INF,这两个目录都属于同一目录层次。怀着以统一的方式部署Bean的希望,我们让EJB jar包包含以下内容:

HelloWorldLdap/
EjbLdapbean.class
EjbLdap.class
EjbLdapHome.class
EjbLdapClient.class

META-INF/
ejb-jar.xml


在Unix Shell下,我们用以下命令打包EJB:

> jar cvf HelloWorldLdap.jar META-INF/ HelloWorldLdap/*.class

接下来,我们把HelloWorldLdap.jar部署到前面提到的三个应用服务器上。以下内容介绍我们在部署过程中的发现。

2.1 BEA WebLogic 6.0 (Service Pack 2)

WebLogic有一个EJB部署准备工具,称为ejbc(即java weblogic.ejbc)。它有两个输入参数:包含类和部署描述器的jar文件的名字(例如,HelloWorldLdap.jar),以及我们为ejbc编译后的jar文件指定的名字(即HelloWeblogic.jar)。当jar文件编译不出现错误时,ejbc工具确实很不错;但如果EJB的构造存在问题,ejbc会变得相当恼人。尽管如此,ejbc仍旧是一个优秀的检验工具,它能够帮助我们在EJB部署之前找出错误。如果用ejbc编译jar文件,我们可以确信EJB能够在Weblogic上部署成功。

我们还试验了不用ejbc部署同一jar文件。对于简单的EJB,有可能获得成功;但是,不使用ejbc时,“热部署” EJB(在不关闭或者重新启动应用服务器的情况下,或者在不先行删除原有Bean实例的情况下,更新一个EJB)不能进行,而且此时我们不能再用ejbc进行确保部署成功的检验。

对于WebLogic,部署EJB时既可以简单地把jar文件复制到WL_HOME/config/your_domain/applications目录,或者也可以通过Web风格的管理控制台进行。在通过服务器日志报告部署中出现的问题时,WebLogic做得很出色。要检验部署是否成功,最简单的方法是利用管理控制台查看JNDI(Java Naming and Directory Interface)树。对于WebLogic,JNDI名字在另一个名为weblogic-ejb-jar.xml的部署描述器文件中指定。事实上,为了让示例EJB能够在WebLogic上部署成功,META-INF目录下必须存在这个部署描述器文件。


图一:利用Web界面的管理控制台把EJB部署到WebLogic。 下载本文示例代码


部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术部署EJB组件的艺术
阅读(121) | 评论(0) | 转发(0) |
0

上一篇:ejb内部资参之二

下一篇:ejb内部资参之一

给主人留下些什么吧!~~