对企业开发人员来讲,难以编写分布式商务应用程序和其它任何较大的应用程序是他们今天所面临的一个共同问题。假如一个应用程序是分布式或在网络中以多重形式出现,那它应该是一个综合化的产物。EJB结构是Java平台上的服务器端组件模型,设计EJB结构的目的是通过使企业开发人员将注重力只集中于编写商务逻辑,从而解决上面所提出的问题。这些企业级bean使应用程序编程人员能够开发与平台无关、面向事务的分布式应用程序,而且这种应用程序可在众多厂商的服务器上运行。
尽管企业级bean减轻了应用程序编程人员处理系统功能的负担,但这些bean相当复杂,开发它们并不是一项简单的工作。以下几个部分将具体分析企业级bean的开发,并会通过一个具体实例来介绍如何通过可视化编程工具Jbuilder在Weblogic应用服务器下开发一个企业级bean。
企业级bean的开发
企业级bean有两种类型:会话bean和实体bean。它们在下列几个方面很相似:必须整合到应用程序中、必须部署到符合EJB规范的容器中,并且必须在符合EJB规范的服务器上运行。
开发企业级bean要完成四项主要的任务:即创建、包装、测试和部署。
要创建企业级bean,你必须遵循Sun公司的EJB规范所定义的一组接口。例如,除了定义一个企业级bean类之外,你还必须为每个企业级bean定义远程接口和本地接口。远程接口定义企业bean业务方法的客户视图,而本地接口定义企业级 bean对象生存周期的客户视图,生存周期包括诸如企业级bean的创建和删除这类事件。
你还必须确保在企业级bean的接口和类中定义的方法保持一致。假如创建的是实体bean,则你必须定义它的持久性域,并将这些持久性域映射到持久数据存储,如关系数据库。
一旦创建了企业级bean,就必须针对特定的bean容器部署它,即生成本地接口和远程接口的实现类。完成部署之后,还需要测试 bean 的远程方法和本地方法。最后,一旦完成测试,你就可以将bean打包,以便将其安装在应用服务器上。
开发过程
下面笔者将具体讲解Jbuilder和Weblogic5.1下的一个EJB开发的具体过程:
环境搭建
安装Weblogic5.1和Jbuilder4.0企业版(从网上下载的Jbuider一般是先安装Foundation版再在此基础上安装企业版)。Weblogic5.1安装好后,假如Weblogic Server无法启动,可能是由WeblogicLicense.XML过期所致,可到网上下载一新版将此文件覆盖即可将Server启动。
环境配置
对于Weblogic5.1,以文本形式打开Weblogic根目录下的startWeblogic这个NT命令文件。对JAVA_CLASSPATH和Weblogic_ CLASSPATH这两个属性值更改如下(由于笔者的数据库服务器是Oracle8i,所以在此引用Oracle的JDBC Driver驱动):
set JAVA_CLASSPATH=%JAVA_HOME%\lib\classes.zip;.\classes\boot;.\eval\cloudscape\lib\cloudscape.jar;D:\Oracle\Ora81\jdbc\lib\classes12.zip
set Weblogic_CLASSPATH=.\license;.\classes;
.\lib\Weblogicaux.jar;.\myserver\serverclasses;D:\Oracle\Ora81\jdbc\lib\classes12.zip;
%JAVA_HOME%是系统变量,指的是JDK的安装目录,可在98或NT环境下对此环境变量进行设置。
然后找到Weblogic安装的根目录下的Weblogic.properties文件,以文本文件形式打开此文件并在此文件中配置Weblogic服务的监听端口(80)和数据源连接池(FordPool),配置如下:
Weblogic.system.listenPort=80
Weblogic.jdbc.connectionPool.FordPool=url=jdbc:oracle:thin:@130.140.55.50:1521:xjdb1,driver=oracle.jdbc.driver.OracleDriver,loginDelaySecs=1,shrinkPeriodMins=15,refreshMinutes=10,testTable=dual,props=user=fordxj;passWord=fordxj;server=serverName
Weblogic.jdbc.TXDataSource.FordPool=FordPool
Weblogic.allow.reserve.Weblogic.jdbc.connectionPool.FordPool=everyone
对数据源连接池主要是url属性和props属性,其中url属性指出了Oracle服务所在的主机名(130.140.55.50)、端口(1521)和数据库服务名(xjdb1);props属性指出了用户名、口令和Oracle服务所在的主机名。
打开Jbuilder4.0点击Tools→Enterprise Setup,接着打开Application Server标签下的Weblogic5.1标签,定位Weblogci5.1的安装目录。
EJB工程开发
先新建一个空的工程,在建此工程的第二步时选择Required libraries选项时选定Weblogic5.1。再在此工程中新建一个Entity EJB Group和一个Enterprise JavaBean。在建Enterprise JavaBean 时提供了四种选项,这四种选项分别对应了EJB的四种类型(Stateful session bean、Stateless session bean、BMP和CMP)。我们选定EJB的类型为Bean managed persistence entity bean(BMP),之后的几步中可以更改JNDI名称。
工程建好后,点击Project→project property,打开Enterprise标签,确保选中的Application server 是Weblogic5.1,再打开Build标签下的Weblogic标签,确保选中Use Weblogic EJBC to generate stub files选项。
编写每一个EJB时,都必须为它定义一个宿主接口、一个远程接口和一个Bean类。
宿主接口定义了Bean的生命周期方法,客户机调用这些方法创建、寻找并删除Bean实例。宿主接口必须继续javax.ejb.EJBHOme类。客户机通过命名和目录接口(JNDI)对宿主接口进行定位,然后再利用这个宿主接口创建一个Bean对象。宿主接口指定了一个或多个create方法;对宿主接口中的create方法来说,必须在Bean类中为它指定一个具有同样签名的ejbCreate方法。客户机调用宿主机上的create方法时,不管当时请求的是什么服务,容器都会调用Bean内的ejbCreate方法。
远程接口列出了客户机可以调用的所有Bean方法或公用接口。远程接口继续了javax.ejb.EJBObject类。远程接口可以定义零个或多个业务方法,这些方法必须声明为“public”,这些方法不能是“final”方法,方法名禁止以“ejb”开头。远程接口中的方法必须是合法的RMI方法:它们的参数和返回值必须是序列化类型。
Bean类用于实现Bean的业务逻辑,Bean类将驻留于服务器上。对宿主接口和远程接口中的每一个方法来说,Bean类中必须有一个能与之相符的方法签名。
由于我们建的是一个BMP,它是直接关联到表中记录,所以对应每一个字段在Bean类都有对应的属性和相应的Set、Get方法。而且在ejbLoad方法中必须对这些属性赋值,在ejbStore方法中将相应的属性值存入到对应的字段中去。
对于我们在Weblogic.properties文件中所配置的数据源连接池,在代码中可以以如下方式引用:
InitialContext ic = new InitialContext();
datasource = (DataSource) ic.lookup(FordPool);
dbConnection = datasource.getConnection();
部署并测试EJB
EJB创建之后,下一步就是针对Weblogic来部署它,也就是生成本地接口和远程接口的实现类(一些以stub或impl结尾的文件)。其实这一步的工作只要在Jbuilder中点击鼠标就能实现。右键点击工程文件→Rebuild,Jbuilder将会生成一个与EJBGroup同名的jar文件。这个jar文件中包括了我们所需的所有实现类文件。
EJB类都实现之后,我们可以新建一个测试类来测试它。点击File→New→EJB Test Client。新建的这个测试类会产生针对EJB类中各方法的测试方法。我们可以在main方法中调用这些方法来测试EJB。
发布EJB
EJB中的各方法都测试通过后,我们可将部署时形成的jar文件发布到Weblogic服务器并在客户机中调用。发布到webLogci中有两种方式:热发布和冷发布。热发布就是在Weblogic.properties文件中加入下面一行:(Infopub_ Group.jar是笔者发布的jar文件)
Weblogic.ejb.deploy=\d:/mywork/InfoPub /Infopub_Group.jar,\
冷发布是在Weblogic服务器已经在运行的情况下,用Weblogic提供的工具EJB deployer来发布的。
通过创建、包装、测试和部署,我们就利用Jbuilder在Weblogic应用服务器下开发出了一个完整的企业级bean。