创建EJB组件

816-7864-10

Table of Contents Table of Contents Next Chapter

附录A


使用企业Beans

翻译:Smiling_Sundoc:宋黎松

       企业bean各元素之间的联系错综复杂。Sun Java System Studio IDE为保持bean的完整性作了相当多的假设,但同时可以灵活地支持不同的选项,以便bean的重用。本附录给出了使用现存企业bean的最佳操作。


编辑bean时采用推荐方法

       为了确保更改可以如你所愿,应通过企业bean的逻辑节点和属性页进行编辑。如果采用这些推荐方法,IDE可以保证遵循J2EE规范中的标准。

       下面将阐述这些方法。

通过逻辑节点工作

       作为一条通用规则,你应通过企业bean的逻辑节点来修改bean的代码。这个节点的图标看上去如同一个咖啡豆: Bean icon. 。此节点被设计用以组织企业bean的所有元素。

       当你对逻辑节点操作完毕时,IDE最容易将你所作的修改应用到整个bean中。

       bean所包含的所有类被罗列在这个节点下面,仿佛bean是一个对象。这里你可以编辑你的企业bean,不必考虑哪个类必须获取每个更改。例如:

l         当你在bean的逻辑节点下为Create Methods节点添加新方法时,该方法体(ejbCreateXxx)及其相关的方法(实体bean所要求的ejbPostCreateXxx)被添加至本地home接口,home接口,或两者兼有。

l         当你在实体bean的逻辑节点下面为Finder Methods节点添加新方法时,Add New Finder Method对话框提示你输入方法的正确名称。方法的特征符号被添加至本地home接口,home接口,或两者兼有。

¡        CMP实体bean中,Add New Finder Method对话框还会提示你给出EJB QL SelectFromWhere语句。当你将你的bean部署到可支持的应用程序服务器上时,这个EJB QL代码被自动转换为该服务器要求的SQL类型。

如果你打算定义一个新的finder方法或select方法,但尚未准备提供EJB QL代码,你可以禁止EJB Compiler要求EJB QL。参见编译和验证企业bean

¡        BMP实体bean中,相应的ejbFind方法也被添加至bean类中。

l         当你在bean的逻辑节点下为Business Methods节点添加新方法时,其方法体被添加至该bean类内。根据bean的接口类型,方法的特征符号被添加至逻辑接口、远程接口内,或两者兼有。

l         当你在bean的逻辑节点下为Home Methods节点添加新方法时,其方法体被添加至该bean类内,而且该方法的特征符号被添加至相应的接口内。

l         当你在CMP实体bean的逻辑节点下为Select Methods节点添加新方法时,Add New Select Method对话框提示你提供完成该方法所需的所有信息,包括EJB QL语句。其方法体被添加至bean类内。

很多情况下,即使当你在操作bean的其他节点编辑Java代码时,IDE均可传播你的更改,并且同步bean的各个类和接口。然而,通过操作逻辑节点你可以得到最一致的结果。

使用Customizer或属性页

       当你需要修改方法的名称或返回类型时,或者当你需要编辑和添加参数或异常时,操作的最佳位置是在方法的Custermizer对话框或属性页内。在逻辑节点下,选中方法,双击,然后选择Customize(自定义)或Properties(属性)。

l         Customizer的格式与你在创建方法时对话框的格式相同。

l         属性页以制表形式列出方法的各个部分,与方法所属的类相对应。

你在这两个地方所作的任何修改,均在验证之后以适宜的形式传播至相应的类。

当你需要添加代码来完成方法时,请使用IDESource Editor(源代码编辑器)。

caution icon 警告—如果你在逻辑节点外面进行修改,EJB Builder仍然试图通过在bean类代码内或其中某个接口节点内进行操作以传播你的修改。然而,在特定情况下,你可能需要手工确认你的代码是否符合SunJ2EE规范。参见后面的具体示例。

使用Source Editor(源代码编辑器)来编辑bean

       仅仅通过使用IDE的源代码编辑器你就可以创建或修改企业bean的任何部分。然而,IDE的向导和其他GUI工具被设计用以保存你的工作并帮助避免不一致性,以便你能够快速制作标准的、遵循J2EE的企业bean

       某些情况下,如果你绕过EJB Builder提供的帮助,你可能得到混淆的结果。EJB Builder努力将你在一个类中所作的修改适当地同步到其他类中,但是这个工具不可能总能够理解你的意图,而且不可能应用所有需要的修改。因此,如果你直接修改类的代码,结果可能导致错误的企业bean,你必须手工予以纠正。

       下面有几个例子:

l         你在源代码编辑器中打开bean的接口类(home,远程,本地home,或本地),为新方法添加代码。为使之有效,方法必须有名称和正确的返回类型,而且方法必须抛出正确的异常。如果新方法有效,它被自动添加到bean类。如果无效,在你编码时方法仍然只保留在接口内。随后,你可能查找并修复方法中的问题。然而,EJB Builder不可能总能够将修复后的的方法添加至bean类;你可能不得不自己添加。在你手工添加之前,方法的节点在Explorer中始终显示带有红X的错误符号。(参见理解IDE的错误信息。)此处有两个例子是关于如何在各个类之间传播更改:

¡        如果你正确地将create方法添加至home接口,则EJB Builder自动将相应的ejbCreateXxx方法添加至bean类。

¡        如果你正确地将ejbCreateXxx方法添加至bean类,则EJB Builder自动将相应的create方法添加至适宜的接口。

l         你在源代码编辑器中打开bean类,添加finder方法。

编辑器验证代码。假如该方法有效,它被自动添加至相应的接口。

l         你在源代码编辑器中打开bean类,添加business方法。

编辑器尽最大可能地验证代码。然而,有可能你已经只打算在bean类中添加helperutility方法,因而方法不向远程或本地接口传播。

l         你将带有正确异常的business方法添加至bean的远程或本地接口。

该方法被自动地传播给bean类。

l         你使用源代码编辑器修改beanhome(或本地home)接口内的create方法,或者修改beanhome(或本地home)接口内的business方法。

EJB Builder将你的修改传播给bean类。

l         你在bean类中修改ejbCreateXxx方法。

编译器尽最大可能地验证代码,但是不将修改传播给home接口或本地home接口。(在IDEJava接口类之间的关系始终被同等对待。)

l         你在beanhome接口中修改方法。在此过程中,你通过删除所需的异常使方法无效。

编译器验证代码并提供错误信息,但是不将更改传播给bean类。

l         你在bean类中输入一个新的create方法,并将其命名为非ejbCreateejbCreateXxx的其他名称。或者,你在home接口或本地home接口内输入一个新的finder方法,并将其命名为非findByXxx的其他名称。(或者,你修改这样一个方法。)

编译器验证此声明的语法是否正确,以及返回类型和参数类型是否为可解析的有效Java类。

       caution icon 警告—一旦你开始在Source Editor(源代码编辑器)中编辑一个类,在你明确保存之前,你的企业bean就不会被保存。


理解IDE的错误信息

       如果你创建的代码与J2EE规范不一致,那么警告符号或错误符号就会出现在Explorer的节点图标中。为了查看问题的描述,选中出问题的节点,右键点击,然后选择Error Information(错误信息)或Validate EJB(验证EJB)。

Yellow warning badge on logical node icon. 逻辑节点上的这个黄色三角警告符号表示beanbean的某个类可能存在验证问题。展开逻辑节点查看问题到底出现在哪里。例如,远程接口中定义的方法可能不在bean类中,或者类可能扩展了错误的Java超类。即使你能够编译bean,也会遇到问题。

Error badge on logical node icon. 逻辑节点上的这个红色X错误符号表示beanbean的某个类可能存在严重问题。例如,整个类可能丢失。产生这个错误符号的bean无法执行,甚至不允许交互。


编译和验证企业bean

       EJB Builder包含一个定制的编译器,可以根据Enterprise JavaBeans Specification(企业JavaBeans规范)验证你的企业bean。你可以决定是否分别完成编译和验证。然而,当你选中企业bean节点,右键点击它,然后选择Validate EJB(验证EJB),缺省的操作是编译bean,随之立即对其进行验证。

       应注意,单独编译不能捕获所有的错误,而且如果bean出现编译错误,它将不被验证。

       IDE中验证和编译服务于不同的目的。当你只编译企业bean时,IDE编译组成bean的各个类。如果这些类的Java代码语法正确,则bean的编译没有错误,即使其中某个类与其他类或与J2EE规范不一致。为了确保企业bean的各元素之间保持一致,你还必须验证bean

EJB编译器遵循IDEbuild(建立)、compile(编译)和clean(清除)的定义。

l         如果bean已经过期(也就是,自从上次成功编译以来,bean的部署描述符已被修改,或者直接引用的Java类已被修改),那么编译按照Enterprise JavaBeans Specification(企业Javabean规范),既编译Java类又验证Java类。

l         clean(清除)删除直接引用的Java类文件和上一次EJB编译的时间戳。

l         build首先执行clean操作,然后编译引用的类。

大多数情况下,在你往复进行的开发周期内,通过使用EJB编译器的缺省选项可以节省相当多的时间。然而,在特定条件下(例如,如果在成功编译之后你必须修改超类),编译无法捕获JavaEJB验证错误。在这些情况下,你可能需要执行build(可能跨越几个目录,根据bean的所有Java文件的位置而定)来检测或解析编译错误。

编译器同时对CMP实体的select方法和finder方法作一些语义上的检查。你可以再次选择是否让编译器要求EJB QL语句。有时,你可能发现将此要求关闭会比较方便,这样你开发、编译和验证你的企业bean时就不会收到有关丢失EJB QL语句的错误消息。然而,你必须在将bean部署到IDE的嵌入应用程序服务器—J2EE Reference ImplementationRI)之前添加EJB QL(并将编译器的EJB QL要求选项打开)。这个服务器和其他一些东西需要EJB QL,服务器插件将其转换为它所需要的SQL,以便在你的finderselect方法中运行查询。

为了给你的企业bean设置编译和验证选项,采取以下步骤:

1. 从主菜单中,选择Tools(工具)->Options(选项)。

2. 展开Options(选项)节点,Building(建立)节点,以及Compiler Types(编译类型)节点。

3. 选取EJB 2.0 ComplierEJB 2.0编译器)。

4. 在属性页内,做出你的选择。

两个字段的缺省设置均为True(真)。以下情况中应修改设置:

l         如果你希望能够在编译bean之前采取单独的步骤来验证你的bean,则应将Require Compilation(要求编译)字段修改为False(假)。

l         如果你希望你的bean在其finder方法和select方法内没有EJB QL语句的情况下通过验证,则应将Require EJB QL(要求EJB QL)字段修改为False(假)。

如果你选择将验证与编译分离开来,则应按照以下操作验证你的bean

l         ExplorerFilesystems(文件系统)面板中,选中bean的逻辑节点,右键点击,然后选择Validate EJB(验证EJB)。

根据bean的大小而定,验证可能需要花费一些时间。当验证完成时,输出窗口打开并显示bean的相关信息。

       当你编译EJB模块或对模块的操作涉及到编译时(比如导出EJB JAR文件,或者为导出计算类文件时),模块及其包含的所有bean均自动被验证。


保存你的修改

       很多情况下,你的工作被自动保存。然而,并不总是如此。例如,编译bean时并不总是保存它。当你从IDE中退出时,应注意确认对话框并保存你希望保存的工作。为达到最佳效果,在IDE中应定期采用File(文件)->Save All(全部保存)。


重新命名企业bean

当你重新命名bean时,不必手工重命名bean的所有相关对象和它们的内部引用。通过IDEGUI支持(下面即将介绍),IDE自动地同步所有的接口(既包括它们的外部对象名,又包括源代码内的相关引用)。采取以下操作:

1. 选中bean的逻辑节点,右键点击,选择Rename(重命名)。

Rename(重命名)对话框出现。你一开始向New Name(新的名称)字段中输入,选取框选项就被激活。

2. 使用选取框一次重命名bean的所有相关对象。

然而,如果你从别处获取到bean的对象,那么应仔细考虑你是否打算将其重新命名。例如,如果两个或更多的实体bean共享相同的home接口或远程接口,那么无论它们出现在哪里,你都可能希望同样的接口保持相同的名称。

caution icon 警告—如果你单独重新命名任何一个相关对象,那么对象之间的连接会被丢失。


修改基于其它bean的bean

       企业bean的类可以基于其它bean的类。例如,你可以创建一个企业bean,该bean使用其它bean的远程接口。当你修改基于其它类的类时,你实际上在修改其原始类。较晚的这个bean指向较早的那个bean的类;你并没有操作类文件的一份独立拷贝。这是IDE设计的一部分,以便于重用企业bean的各个元素。


复制和粘贴企业bean

       当你将一个bean复制并粘贴至另一个包时,IDE在新包内创建一个节点,指向原始包内的类和接口。IDE并不认为你需要包内的所有内容;一些开发者需要更灵活地重用bean的元素。因此,你同时必须确保bean的所有类和接口的路径已被修改为新的包。

       为了将企业bean从一个包复制并粘贴至另一个包,操作如下:

1.  ExplorerFilesystems(文件系统)面板中,右键点击你希望复制的bean的逻辑节点,然后选择Copy(复制)。

2.  右键点击你希望将bean复制到的包,选择Paste(粘贴)->Copy(复制)。

3.  展开原始bean逻辑节点下的Classes(类)节点,右键点击类或接口的节点,选择Copy(复制)。然后通过右键点击目的包并选择Paste(粘贴)->Copy(复制),将类或接口粘贴至目的包。

对于bean的每个类和接口,均重复此步骤。

4.  右键点击被复制bean的逻辑节点,选择Properties(属性)。

5.  在属性页中,将每个类更新为指向目的包。查找以下字段:

l         bean

l         home接口(如果存在)

l         远程接口(如果存在)

l         本地home接口(如果存在)

l         本地接口(如果存在)

l         主键类(如果存在)

a.    点击每个字段,然后点击省略号()按钮。

b.    在属性编辑器中,浏览至目标包,选择你粘贴至该包内的类或接口的副本,点击OK

属性值变为PackageName.classname

在你完成之后,每个类和接口的属性具有附加在原始名称上的包名称。目标包包含bean的完整副本。


互换bean类或接口

       在你创建企业bean之后,你可能需要将其修改为使用其它bean的某个元素,比如home接口或远程接口。为了这样做,应按照以下操作来使用bean的属性页:

1. Explorer窗口中,选中需要不同类或接口的bean,右键点击,选择Properties(属性)。

2. Properties(属性)面板内,点击相应的属性(Bean Classbean类),Home Interfacehome接口),Primary Key Class(主键类),或Remote Interface(远程接口)),然后点击省略号()按钮。

3. 浏览至你打算使用的类或接口,选中它,然后点击OK

属性字段显示了新类或新接口的全限定路径名称。你的bean不包含新元素的副本。它仅仅指向原始元素。


编辑bean的方法

       当你通过使用Explorer窗口提供的GUI支持添加了一个方法之后,你可以在源代码编辑器中编辑此方法。如果所有你需要做的就是在bean类中完成该方法体,而且你的编辑操作不影响其他任何类或接口,那么你应使用源代码编辑器。然而,由于这些更改可能对其他类产生少许影响,你可能需要在bean的相关对象内同步这些修改。例如,参见使用源代码编辑器编辑bean

       或者,你可以只使用Customizer(定制器)对话框,如下所示:

1. Explorer窗口中,展开你需要编辑其方法的bean的逻辑节点。浏览至此方法。

2. 选中此方法,右键点击,然后选择Customize(自定义)。

Customizer(定制器)对话框出现,其字段与New Method(新建方法)对话框相同。

3. 根据需要编辑字段。当你完成之后点击Close(关闭)。

IDE将你的修改传播至整个bean


查看方法

       为了查看你为企业bean创建的方法,展开bean的逻辑节点并浏览至你需要查看的那种方法的子节点。右键点击该方法的节点并选择Open(打开)。Source Editor(源代码编辑器)打开该类,直接显示此方法的代码。


修改实体bean的字段

       根据你的实体bean是使用容器管理持续化还是bean管理持续化,你可以采取不同的方法来重新命名字段或修改字段的类型。

重新命名字段

       CMP bean中,使用Explorer窗口提供的GUI支持。操作如下:

1. 展开bean的逻辑节点并选择CMP字段。右键点击,然后选择Rename(重命名)。

2. 使用选取框来指定你修改的范围。

BMP bean中,使用Source Editor(源代码编辑器)来重新命名持久化的字段或非持久化的字段。

修改字段的类型

       CMP bean中,使用ExplorerGUI支持。修改字段的类型如下所示:

1. 展开bean的逻辑节点并选择CMP字段。右键点击,然后选择Customize(自定义)。

2. Customize(自定义)对话框中,选择另一种类型。

BMP bean中,使用Source Editor(源代码编辑器)来修改持久化字段或非持久化字段的类型。


删除企业bean

       无论企业bean是哪种类型,删除bean均采取以下操作:

1. 选中bean的逻辑节点,右键点击,然后选择Delete(删除)。

Confirm EJB Deletion(确认EJB删除)对话框出现。

2. 通过使用选取框来确认你是否打算一次删除bean的所有相关对象。

如果bean的某个相关对象被用在其他地方,则你应慎重考虑是否打算删除它。例如,如果几个实体bean使用相同的主键类,则在删除bean的其他类之前,你应取消选定该类的选取框。

caution icon 警告—当删除bean时不要从菜单栏中选择Edit(编辑)->Delete(删除);IDE仅删除被选中的类,它并不设法同步bean的组成部分。

创建EJB组件

816-7864-10

Table of Contents Table of Contents Next Chapter

 

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