创建EJB组件

816-7864-10

Table of Contents Table of Contents Next Chapter

第9章


测试企业级Bean

翻译:Smiling_Sundoc:宋黎松

当你开发企业级bean时,你可能会发现最好是在全面地装配应用程序并将其部署到产品应用服务器之前测试它们。出于此目的,你可以使用Sun Java System Studio IDEbean生成一个J2EE应用,包括带有JavaServer Pages trademark (JSP trademark )测试页的web模块和EJB模块。然后,你可以利用IDE的测试功能在web浏览器中显示JSP页运行产生的HTML页。在HTML页中,你可以创建企业级bean的一个实例并操作bean的方法。

IDE为你创建的对象被设计用于测试过程。它们并没有被计划部署在产品环境中。

你可以在任何数据库和应用服务器支持的情况下使用IDE的测试功能。下面的操作说明和示例将PointBase作为测试数据库,J2EE RI应用服务器(RI)作为测试服务器,Netscape Navigator作为web 浏览器。


满足测试的先决条件

set-up(组织)可以根据bean类型进行改变。你的测试set-up可以依据你打算测试的企业级bean的类型进行改变。一些准备工作如下:

l         考虑如何建立EJB模块。若测试会话bean,你可以简单地使用由测试功能生成的EJB模块。然而,实体beanEJB模块可以采取两种不同的方式进行处理。参见“如果你希望测试CMP bean或BMP bean

在目前版本的IDE环境中,测试功能不支持消息驱动的bean

l         将所有被引用的bean置于同一模块内。若使用测试功能,你一次只能操作一个bean。然而,被测试的bean必须保证它所引用的bean均可用。参见“如果你希望测试带有EJB引用的bean

l         要求远程引用。你希望测试的任何企业级bean必须具有远程接口;它们也可以具有本地接口,但是测试功能要求远程接口。你测试的bean所引用的bean可以具有这两种接口之一或两者兼有。具体细节参见为bean添加远程接口

l         被测试bean的资源必须可用。你必须有RI,而且所需要的数据库服务器处于正常运行状态。具体情况参见下一节。

如果你希望测试CMP bean或BMP bean中对企业级bean测试的不同组织方式进行了描述。

准备部署到J2EE RI

为了对企业级bean使用IDE的测试功能,你必须能够将bean的应用程序部署到RI上,而RI必须安装在你的本地机器上。至少有RI的一个服务器实例处于运行状态。

RI服务器的安装和实例化在你安装IDE时已经自动完成。如果你需要详细的操作说明,请参考RI的在线帮助。

准备测试基于PointBase数据库的bean

你可以使用包含在IDE环境中的PointBase数据库来测试所有需要访问数据库的企业级bean。(通常,这只意味着实体bean。)

l         如果你决定由测试功能为你创建EJB模块,那么在你进行到此处时应按照以下的操作说明去做。

l         如果你决定使用现存的EJB模块来测试实体bean,那么应确认该模块的属性设置可以使你的测试应用成功地找到并登录数据库。

属性设置如下:

1. IDEExplorer窗口中,右键点击EJB模块的节点并选择Properties(属性)。模块的属性页出现。

2. Properties(属性)窗口的J2EE RI标签页中,指定数据库的连接如下:

字段

输入值

Data Source JNDI Name

jdbc/Pointbase

Data Source Password

PBPUBLIC

Data Source UserName

PBPUBLIC

注意—在这个窗口中, 输入“Pointbase”时只有第一个字母大写。在你输入密码之后,按下“Enter”键

RI的两个缺省设置使服务器为被测试的bean创建一个表,并在测试完成之后删除这个表。如果你的bean必须从特定数据库表中获取有效数据,则应做以下修改:

3.点击SQL Deployment SettingsSQL部署设置)字段和省略号()按钮。

SQL Deployment Settings属性编辑器出现。

4.选择你打算测试的bean ,并清除下面两个选取框:

l         Create table when deployed

l         Drop table when undeployed

5.点击OK关闭EJB 模块的属性页。

6.通过File(文件)->Save All(全部保存)保存你的工作。

启动数据库服务器和web浏览器

为启动PointBase数据库服务器,从主菜单中选择Tools(工具)->PointBase Network ServerPointBase网络服务器)->Start Server(启动服务器)。

与往常一样启动你的web浏览器。

你可能希望将这两个窗口最小化,但是在你完成你的测试工作之前不要关闭它们。


生成测试对象

      现在你已经准备就绪使用IDE的向导来提供EJB模块、web模块和应用程序,通过它们来测试你的企业级bean

       为你的企业级bean生成测试对象应遵循以下步骤:

1.  Explorer窗口内,选择bean的逻辑节点,右键点击,然后选择Create New EJB Test Application(创建新的EJB测试应用)。

出现向导,显示出测试你的应用程序所有必备部件的缺省值。

注意—如果你右键点击一个bean之后,发现Create New EJB Test Application(创建新的EJB测试应用)菜单项被禁用,那么此bean可能没有远程接口。按照为bean添加远程接口中的操作说明再试一次。

注意Package(包)字段显示的是bean当前所在的包。你可以移动EJB模块,并通过在这些字段中输入其他包的名称来测试向导即将创建的应用程序对象。

       在接下来的字段中,如果需要你还可以指定其他包和模块的名称。然而,如果你计划将测试功能即将生成的EJB模块替换为现存模块,就不要在这里指定现存模块。你可以在后面的操作过程中使用应用程序的属性窗口。

       注意Application Server(应用程序服务器)组合框中的选项。你可以使用RI作为你的测试服务器,你也可以使用你已经指定的其它服务器作为你的缺省服务器。

2.  选中Auto Deploy(自动部署)选取框,或者让它空着。

如果你选中该选取框,那么一旦你在本向导中完成测试模块的创建,IDE就自动将此bean的测试模块部署到服务器上。如果你测试的bean能够独立运行并且不需要其它的bean配合它的工作,那么你可能希望采用此方式。

       如果你让该选取框空着,那么在后续操作中你必须自己进行部署。如果你的bean需要与其它的bean一起进行测试,则应采用这种方式。

3.  点击OK生成EJB模块、web模块和应用程序,并且(如果可以)自动部署应用程序。

过程监视器可以报告模块生成和部署的进展情况。部署完毕时,在IDE的日志窗口中将出现一条信息。

假设你已经让向导将其生成的内容放在bean的包中,为bean生成的对象命名为Account,该对象位于名为Account_North的包内,如图9-1所示。

9-1 为企业级bean生成的测试对象示例

Screenshot showing an example enterprise bean with its generated testing objects in the Explorer.

注意生成的对象已经被加入bean的包中:

l         一个逻辑上的web模块

l         一个包含被测试企业级beanEJB模块

l         一个包含EJB模块和WEB模块的测试应用

除非你予以指定,否则在向导中IDE将实际的WEB模块(包括JSP页和helper java类)放在它自己的新文件系统中。

同时应注意向导创建了新的文件系统以包含web模块和测试中使用的其它对象。当你展开文件系统节点时,你将看到WEB模块是第一个子节点。如下所示,这个web模块包含了JSP页和helper java类。

Screenshot showing the web module node expanded in the Explorer.

你现在已经生成了基本的测试应用。如果你的bean引用了其它任何bean,那么按照以下步骤将它们添加到EJB模块:

4.  Explorer窗口中,选中已经生成的EJB模块节点,右键点击,然后选择Add EJB(添加EJB)。

5.  在树视图中,导航至被引用的企业级bean,选中它,并点击OK

被引用的bean被添加到EJB模块内,而且对该bean的引用也被添加到测试应用中。

对每个被引用的bean重复步骤4和步骤5

现在,除非你在步骤2种选中了Auto Deploy(自动部署)选取框,否则你已经完成了将测试应用部署到服务器上的准备。或者,如果你愿意,你可以一步完成部署应用和执行应用。接下来的章节将介绍各种途径。


将测试应用部署至服务器

将测试应用部署到RI上,应采取以下操作:

1.  Explorer窗口中,选中J2EE应用节点,右键点击它,选择Deploy(部署)。

过程监视器和输出窗口将报告部署的进度如何。例如,你看到一条消息,指出测试应用已经被部署到RI(这指的是作为localhost)上。

2.  通过打开J2EE 命令行窗口并查看是否出现“Application name_TestApp deployed.”语句以证实你的测试应用已被部署完毕。

提示—如果你的部署失败,请查看你是否将IDE设置为正确地运行J2EE RI。特别是,注意RI_Home属性是否被设置为你的J2EE_HOME值。

部署成功后,你可以按照执行测试应用中的步骤进行操作。

一步完成部署测试应用和执行测试应用

      为了在将你的测试应用部署到服务器的同时执行测试应用,采取以下操作:

Ÿ           Explorer窗口中,选中J2EE应用节点,右键点击,然后选择Execute(执行)。

过程监视器和输出窗口将报告部署和执行的进度如何。例如,你看到一条消息,指出应用服务器已经连接,企业级bean已经被部署到服务器(注意RI指的是作为localhost)上,wrapperRMI-IIOP节点已被编译,服务器和客户端的JARJARS已经构造完毕,WEB服务器已经连接并请求运行测试应用,并且所有已生成的代码已经被保存。

当此步完成之后,web浏览器出现并打开了测试客户端,这是一个JSP页面,其中包含了用以测试企业级bean的图形用户界面(GUI)。图9-2提供了一个示例。

继续使用测试客户端测试你的bean使用测试客户端测试你的bean)。


执行测试应用

如果你没有选择一步执行测试应用的部署和测试应用的执行,那么你可以采取以下操作来测试你的企业级bean

Ÿ           打开web浏览器并输入正确的URL

如果你使用J2EE RI,那么URL具有以下格式:

http://localhost:port/application_name/

port是安装RI时你指定的端口号。

application_name是应用的名称。

测试应用的客户端,一个JSP页面,出现在浏览器中。


使用测试客户端测试你的bean

你可以按照测试客户端的JSP页面内的操作指示来创建企业级bean的实例,并调用它的事务方法。下一节将描述你如何测试一个名为dollarToYen的简单会话bean,它能够完成美元到日元的等值转换。(这个会话bean被放在JavaConverter中)

理解测试客户页面

9-2给出了由IDE为应用客户端创建JSP页面的一个示例,生成应用客户端的目的是为了测试会话bean的例子。

9-2 为测试简单会话bean dollarToYen而生成的JSP页示例

Screenshot showing the JSP page generated to test a simple session bean.

如图9-2所示,测试窗口的内容如下:

1.           浏览器的URL字段显示了测试客户端的JSP页面所在的位置。客户端的URLIDE的测试功能自动生成。如果你愿意,你可以使用此URL返回到这个测试窗口。

2.           Stored Objects(存储对象)帧显示了在你的测试过程中IDE和你自己的操作所创建的对象列表,例如,当你调用了接口或bean类的方法时。到目前为止,只显示了home接口。

你可以通过使用Remove Selected(删除选择项)或Remove All(删除所有项)从Stored Objects(存储对象)列表中删除对象。

3.  EJB NavigationEJB导航)帧显示IDE已经生成的对象,以便你能够测试你的bean。如果你测试的bean引用了其他bean,而且你的EJB模块包含不止一个bean,那么这个帧按照逻辑顺序列出已创建的对象,也就是采用模块中的一个bean调用另一个bean的顺序。

图9-2中的EJB Navigation帧中,你可以看到Converter.dollarToYenHome,这表示IDE已经创建了此会话beanhome接口。稍后,你将会点击这个home接口以创建并初始化会话bean的新实例。当你看到此帧中列出的对象不止一个时,你点击对象将焦点移至你希望测试的bean。当你点击对象时,应注意其它帧发生的变化。

4.  例如,The Results of the Last Method Invocation帧显示了你最近调用的方法及其参数。到目前为止,由于我们还没有开始测试会话bean,因此此帧中没有显示任何内容。

5.  帧的底部显示了你目前可用于测试的方法。当你将焦点置于bean的不同组件上时,此帧发生改变(见EJB Navigation帧)。

       接下来我们将测试dollarToYen beanhome接口和business方法。

测试示例beanhome接口

       为了验证Converter.dollarToYenHome正确地创建了会话bean的实例,操作如下:

1. EJB Navigation帧中,点击home接口的名称。

2. 在帧的底部,点击home接口名下面的Invoke按钮。

此例中,你点击Converter.dollarToYenHome下面的Invoke按钮。

注意此页的帧发生以下变化:

l         EJB Navigation帧中,bean的实例已经被添加进来。具体到本例中,此实例名为Converter.dollarToYen,后跟一个进程号。

l         Stored Objects帧中,bean的实例已被添加至列表的顶部。

l         Results帧中,bean的实例已被反映出来,包括不带参数的create方法被激活。

现在让我们来测试dollarToYen beanbusiness方法。

测试示例beanbusiness方法

为了验证Converter.dollarToYenHome的实例将美元数正确地转换为日元数,调用beanbusiness方法,如下所示:

1. EJB Navigation帧中,点击bean的名称(在home接口名的下面)。

注意Results帧被清除,而且帧底部可激活的方法现在是以beanbusiness方法打头。

2. 在帧底部的business方法下面,向输入字段内键入一个参数,然后点击Invoke按钮。

正如下面显示的那样,我们使用参数100IDE加上了.0)。

Screenshot showing the Invoke Methods on Bean Name frame with a testing parameter entered.

点击Invoke之后,注意此页的帧发生以下变化:

l         如下所示,在Results帧中显示了激活方法的结果(结果是12755日元,因为business方法包含了127.55日元兑换1美元的计算)和我们输入用于测试的参数(100美元)。

Screenshot showing the Results of the Last Method Invocation frame with testing results.

l         Stored Objects帧中,栈包含了结果对象和参数对象。

你可以调用帧底部列出的其他任何bean方法。

创建新的测试类

当你通过激活bean的其他方法来创建对象时,该对象进而可用于测试bean。例如,到目前为止通过测试Converter.dollarToYen创建的对象也出现在组合框内,如下面的例子所示。你可以选择其中一个对象并创建一个新类以供测试。

       Screenshot showing the Invoke Methods on Bean Name frame with possible new classes offered for selection.


部署之后进行修改

你可以在不生成另一个测试应用的情况下,在企业级bean中进行修改或重置企业级bean。然而,在测试被你修改了内容的企业级bean之前,你必须重新部署测试应用。这样做的操作步骤是,关闭测试窗口,进入Explorer窗口,右键点击测试应用模块,然后选择Execute。在同一个测试会话中不要试图重新部署bean

caution icon 警告—IDE生成一个EJB模块、一个web模块和一个J2EE应用,这些仅被设计用以测试你的企业级bean。最好不要修改生成的这些对象。如果你做出任何修改,你可能无法再次部署J2EE应用。


准备测试:一些变化

正如在满足测试的先决条件中提到的那样,如果你测试的对象不是已具备远程接口的简单会话bean,那么你需要考虑接下来所描述的准备步骤。

如果你希望测试CMP bean或BMP bean

你可以采取下列方式之一测试实体bean

l              你可以在EJB模块中测试你的bean,该模块在测试过程中已被自动创建,在继续测试bean之前你可以在该模块中声明数据源相关的属性。

l              你可以在测试过程之外(注意)创建beanEJB模块,并在那里声明所有的属性。然后在你开始测试bean之前,你可以用你创建的EJB模块替换测试功能生成的模块。

无论你采取哪种方式,当你测试实体bean时,你必须使用声明了bean属性的EJB模块。既然测试功能生成的EJB模块被设计为仅仅用于测试,那么你还必须为你编写的实体bean创建“真正的”EJB模块。你可以在测试前或测试后做这项工作。

如果你希望测试带有EJB引用的bean

如果你希望测试的企业级bean被设计为与另一个bean有交互,(例如,如果你测试的会话bean管理由实体bean完成的工作),你必须确保被引用的bean包含在EJB模块内。

你可以采取下列方法之一:

l         使用现存的EJB模块,其所有必需的属性均已被指定。为了这样做,你可以在Create a New EJB Test Application向导中使用Modify按钮指定EJB模块。

l         在引用bean处建立模块并添加被应用的bean为了这样做,首先在你希望测试的bean处创建一个测试应用。然后,在Explorer窗口内,找到IDE为你创建的EJB模块。右键点击此EJB模块节点并选择Add EJB

在你生成测试应用之前,应确保在bean的属性页内指定所有必需的EJB引用,在EJB模块的属性页内指定所有必需的设置。否则,测试可能失败或给出混淆的结果。

       参见具体细节。

为bean添加远程接口

如果你测试的bean只具有本地接口,那么你在测试准备期间可以通过复制本地接口来创建远程接口。简而言之,如下所示使用现存的接口:

l         使用本地接口(Localbean_name来创建相应的远程接口bean_name

l         使用本地home接口Localbean_nameHome)来创建相应的home接口(bean_nameHome)。

caution icon 警告—不要试图采取此过程来向EJB 1.1 CMP实体bean添加EJB 2.0部件(比如本地接口或引用),EJB 1.1 CMP实体bean尚未完全按照Enterprise Javabean Specification的当前版本予以更新。由此产生的bean将无效而且无法修复。具体细节参见避免在旧版本的bean中使用新功能

添加远程接口时应一次添加一个。(这些操作规程启用于本地接口和对应的远程接口。稍后你将对本地home接口和home接口重复此过程。)

操作如下:

1.  Explorer窗口中,右键点击标签为Localbean_name的接口节点并从菜单中选择Copy

2.  选中beanJava包,右键点击,然后选择Paste->Copy

接口的副本出现在文件夹内,其标签为Localbean_name_1

3.  选中此副本,右键点击,选择Rename(重命名)。在Rename对话框中,按照J2EE的惯例命名已复制的接口:bean_name

4.  Explorer中,右键点击bean的逻辑节点并选择Customize(自定义)。

Customizer对话框出现。

注意Customizer提供的很多属性也可以从你右键点击bean的逻辑节点并选择Properties(属性)时出现的属性页中得到。你可以在这两个对话框中任选其一修改bean的很多属性。然而,Customizer只处理bean本身的属性,不处理应用程序服务器相关的属性。同样,如果你打算为bean添加远程接口,你只有在Customizer中才能实现。

5.  Customizer对话框中,找到空的Remote Interface(远程接口)字段并点击Browse(浏览)按钮。

Select a Class(选择类文件)文件选择框出现,如图9-3所示。

图9-3 用于为bean添加接口类的Customizer

Screenshot showing two dialog boxes: the Customizer and a file chooser.

6.  浏览至你通过复制和粘贴创建的接口类。选中接口节点并点击OK

此类出现在Remote Interface(远程接口)字段中。

(稍候你将看到bean的属性页内的Remote Interface字段已经被自动更新。)

7.  关闭Customizer对话框。

8.  Explorer中,展开bean的逻辑节点。展开Classes(类)节点,选取新的远程接口(其标签为Remote Interface Class),在源代码编辑器中打开它。

编辑远程接口类以扩展javax.ejb.EJBObject

9.  为远程类的每个方法,添加异常

java.rmi.RemoteException.

10.为每个ejbCreate方法,将返回类型修改为新的远程接口。

11.为每个查找单个对象的finder方法,将返回类型修改为新的远程接口。

12.编译你的企业级bean并解决掉所有的错误。

13.采取相同步骤(第1步到第12步)根据本地home接口的副本创建home接口。

然而,在第8步中,应编辑home接口类以扩展

javax.ejb.EJBHome.

注意—应确认从这两个新的接口中删除所有无法被用作远程方法的方法。

创建EJB组件

816-7864-10

Table of Contents Table of Contents Next Chapter

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null