您的位置:首页技术文章
文章详情页

使用Forte for Java开发EJB

浏览:2日期:2024-03-19 15:37:49

本文描述了Forte for Java企业版3.0和java 2.0 平台、以及与J2EE兼容的服务器和容器一起,为开发者提供了一个建造端对端(end-to-end)Java应用程序的强大的环境。在本文中,我们将集中介绍使用Forte for Java企业版开发企业JavaBean(Enterprise JavaBeans简称EJB)应用程序。简介Sun ONE(Sun Open Net Evironment)开放网络环境作为Sun公司发布的网络服务战略,为企业提供创建、装配和配置Web的服务。Sun ONE框架包括很多工具和技术,例如Forte for Java和Forte ESP,创建(create)、装配(assemble)、集成(integrate)和分发(distribute)这些Web服务给最终用户。Forte for Java基于开放式架构,设计成轻易和其他工具集成,诸如Macromedia Dreamweaver与Adobe Golive等网页设计工具和包括ISV等开发的应用服务器(Application Server)等软件。Forte工具向导包括了许多向导和特性,为开发者自动完成了许多细节性工作。本文着重介绍了Forte for Java企业版在EJB开发方面的特性,以及如何有效的利用这些特性。利用Forte for Java 企业版工具向导可以开发、配置和测试符合EJB 1.1规范的EJB(注:Forte for Java企业版将在下一个版本中支持EJB 2.0规范)。简言之,Forte for Java 企业版提供的EJB开发主要包括了以下的特性和优点:提供开发会话bean(session bean)(有状态的或无状态的皆可)和实体bean(entity bean)的模板。 包括 bean治理存储(bean-managed persistence简称BMP)和容器治理存储 (container-managed persistence简称CMP)。 生成需要的界面和类---bean的本地接口(home interface),远程接口(remote interface)和实现类(implementation class)。 通过"logical" bean来协调与简化bean的开发。 可以用来检查bean是否遵循EJB 1.1 规范。自动将这些bean打包在一个EJB的 JAR文件中。 通过标准的部署(deployment )API 实现应用服务器的集成,使bean的开发更快捷。通过采用工具向导并生成一个bean的jsp 测试客户端,简化了bean的测试过程。 Forte for Java 企业版的要害特性是它侧重于EJB的开发、部署、测试周期。它关心的是bean开发过程中的大部分的'杂务活'以及其他的一些工作。例如:自动生成必要的界面。包含了必要的方法的实现。帮助建立EJB的字段。能提示或直接插入所有方法必要的参数、返回类型和异常。 编译bean一步完成。对已编译的bean进行应用服务器打包和部署的工作也是一步完成。同时FORTE FOR JAVA企业版能为bean创建测试客户端。这个测试客户端可以从浏览器一端调用以测试该bean的功能。开发EJBEJB是一种用于商务过程(business processes)和商务数据(business data)建模的强大的组件。EJB开发者,通常也就是个人或某公司商务系统的专家,他们更适合把精力集中在bean的商务逻辑的实现上,而让EJB容器和J2EE平台来处理企业运算当中的非商务逻辑的部分(如远程访问,事务处理,安全等)。尽管如此,开发EJB绝不仅仅是单纯编写商务方法这么简单。 首先,开发EJB需要正确设置开发环境,才能把bean的组件部署到应用服务器上。其次,需要创建构成EJB的不同组件,并根据bean类型的不同,这些组件必须包含特定的方法。一旦开发了bean,就必须把这些bean部署到操作环境中。最后,应该通过客户端或测试程序来对这些bean进行验证。设置开发环境Forte for Java企业版为开发者提供了用于设置开发环境的工具和向导。开发EJB就意味着要与数据库打交道,显然相应地,就要能访问J2EE应用服务器和数据库服务器。Forte for Java 企业版使开发者们能在集成开发环境(IDE)里进行这项设置工作。在这里使用Forte for Java企业版命令,可以安装数据库驱动程序,建立与基础数据库的连接。该IDE 还能帮助开发者配置和运行应用服务器,运行必要的数据库服务器等等。作为一个例子,图1显示了如何从FORTE FOR JAVA企业版浏览窗口中启动J2EE 引用实现(Reference Implementation,简称RI)应用服务器的一个实例。图片下方的输出窗口则显示了服务器的启动信息。 使用Forte for Java开发EJB 图1:启动缺省的应用服务器假若您需要定义一个实体bean来建模一个已存在的数据库,可以利用FORTE FOR JAVA企业版非常方便地将数据库的表映像到这个新的bean中,一旦启动了数据库服务器并且已经建立了连接,你就可以在IDE 里显示这个数据库表,表中的列,定义视图和过程。反过来你也可以在IDE 里将某实体bean及其字段映像到某数据库表和表中的列。假如你选择容器治理存储的方式,你既可以用其中的属性对话框窗口去映像bean的存储字段,也可以手工定义这些字段。在项目中采用FORTE FOR JAVA企业版的工具并不会限制你只能在它的IDE 里开发该项目所有的EJB。FORTE FOR JAVA企业版答应将在其他地方开发的EJB也集成进来。使用项目治理的功能,我们可以引入已存在的个别bean乃至整个包。创建EJB组件开发EJB时必须遵守某些规定--- 不管是会话或实体bean,都是由三个接口和类组成的:一个本地接口,一个远程接口,一个实现类。并且,这些接口与类必须包含需要的方法,方法要以特定的方式命名,有特定的返回类型,异常,诸如此类。FORTE FOR JAVA企业版在许多方面简化了EJB的开发。由向导在开发过程中一步步的指引,向导不仅会显示当前处于开发过程的那个阶段,而且可以提示接下来的步骤。选择的选项不同,接下来的步骤提示相应会改变。定义一个新的EJB假设需要为一个应用程序创建多个EJB,首先我们会为这个应用程序新建一个包,以便把所有的bean都集中到一起。接着,在浏览窗内用鼠标右击包的名字,从弹出的上下文菜单(context menu)中选择要放置在包中的组件的所属类型的模板。例如,JSP, Java Servlet, JavaBeans, EJB 等。出于本文的需要,我们选择EJB组件中的会话bean,而不是实体bean。选择EJB组件后,不管是会话bean还是实体bean,模板向导都会一步步指引我们创建特定的组件。图2显示了创建有状态会话bean时的向导屏幕。  图2:有状态会话bean的向导窗 在创建实体bean的向导中提供一个选项用于指定采取bean治理存储还是容器治理存储。一旦指定了实体bean的存储治理方式,向导会自动依据选择结果提示下一步的信息。bean治理存储选项意味着开发者自行提供存储代码,这种情况下需要附加一步,也是唯一的一步就是指定bean的实现类与接口。若选择容器治理存储,向导会引导你完成附加的定义和映像存储字段的工作。假如实体bean建模的是已存在的数据库表,我们可以选择这个表,将bean字段映像表的列。另外也可以手工指定存储字段,或对于已存在的bean可以从它的主键Java类选择。实现bean确定bean类型之后,IDE 会生成组件必须包含的本地接口,远程接口和 bean的实现类。并且,这些接口与类又包含了所有需要的方法,(例如 ejbLoad, ejbStore, ejbActivate, ejbPassivate方法) 、上下文相关(context-related)的方法,以及create, find, and remove方法。这样有助于开发者将精力集中于实现bean的商务逻辑上。为了进一步方便bean的开发过程,FORTE FOR JAVA企业版提供逻辑EJB(logical Enterprise JavaBeans).在浏览窗口中逻辑EJB用图标 表示,它为所有bean提供一个完整协调的视图,包括他们的接口,字段,方法等。由于bean的接口和实现紧密相连,使同一个方法在各处保持一致是很重要的。例如,假如在一个会话bean的home接口声明create方法,那就必须在实现类中提供相应的ejbCreate方法。在bean的remote接口声明的商务方法必须在bean的类中正确实现。EJB的逻辑视图保证了FORTE FOR JAVA企业版自动保持bean的所有的相关组件之间的同步。FORTE FOR JAVA企业版很灵活,它不但可以直接加工单个的组件,例如实现类或远程接口,也可以通过逻辑视图(logical view)集体进行。两种方式下,IDE 都能保证其中的协调性。举例来说,FORTE FOR JAVA企业版可以保证一个新方法,不论是从bean的逻辑视图还是它的远程接口处定义的,都会在bean的类里正确地显示出来。假如你想在bean的类里包含一个方法,却不想让此方法在远程接口中显示出来的话,务必直接将此方法添加到bean的实现类中。这样处理的方法是不会自动加入远程接口的。图3展示了一个实体bean产品逻辑EJB,还有home接口、remote接口还有beans类。这里的逻辑EJB,即ProdUCt.entejb在浏览器窗口中展开了。由此可以看出,从逻辑EJB可以访问bean类和它的两个接口。也可以看见实体bean的create, find, 和 business 方法,以及它的容器治理存储的字段。另外,鼠标右击bean的逻辑名将弹出包含可执行操作的上下文菜单(如图3所示)。菜单中可执行的命令例如:察看部署描述符(deployment descriptor),验证(validate)和编译bean的所有类与接口,创建新方法(包括create, find, and business方法),生成EJB模块,创建测试程序。 图 3: 使用一个逻辑 Enterprise Bean

在逻辑bean中鼠标右击一个组件也会弹出上下文菜单,菜单中显示可用于该组件的特定的子操作集。例如,本地接口的上下文菜单中只提供增加新的create和find方法的操作。而远程接口的上下文菜单只提供创建新的business方法的操作。不使用逻辑bean也可以直接加工bean的接口与类。例如,在需要创建bean的类与接口的子类,或是将其映射到数据库表时你可能希望直接去编辑它,或单独对某个类或接口进行编译。在定义bean的新的方法或字段的过程时,会有对话框引导你。这些对话框会提示输入方法或字段的名称,字段的类型,方法的返回类型,所有的方法参数及其类型,所有除了EJB必要的异常外的附加异常(必要的异常已经缺省添加了)。IDE 会在bean的类,远程或本地接口处加入正确的方法签名。图4展示了创建一个新的商务方法时的对话框。

 Figure 4: 创建一个商务方法如何编写方法的实现:首先,在FORTE FOR Java企业版资源编辑器(Source Editor)窗口中打开bean的实现类,接着,找到方法声明,敲入代码。注重ForteJava企业版把Java保留字用兰色显示。另外,编译bean时如有编译错误将用红色标出。 Bean的引用(reference),诸如EJB引用,环境表项(environment entries),资源构造引用(resource factory references),安全角色引用(security role references)等皆可以在属性编辑器(Property Editor)中的References 标签内指定。在这里可以添加,编辑和删除这些引用和环境表项。References标签如图5所示。Figure 5: 属性编辑器中的References 标签验证和编译EJBForte for Java企业版包含一个验证EJB(Validate EJB)命令和编译所有EJB的类的命令。验证类似于编译。执行Validate EJB时,Forte for Java企业版会检查bean的类是否正确遵守J2EE规范。源代码中的错误被提亮显示,必须予与更正。除了可以编译或验证单个的bean组件之外,也可以通过企业版的逻辑bean窗口,使用单条命令就编译或验证所有组件。浏览器窗口中标明了哪些bean需要编译,哪些bean已经成功编译了。其中bean的接口与类用一连串的点加以标记的表示需要编译。如图6中,名为ProdUCt 和MySession的bean它们的类、远程接口与本地接口都需要进行编译(注重逻辑bean旁没有这些标记)。相比之下, bean CustomerTbl没有这种标记,表示它已经成功编译了。Figure 6: 浏览器窗口中bean的编译标记 打包与部署编译之后,EJB类就可以打包到需要的JAR文件、创建一个EJB模块,然后部署到J2EE应用服务器。使用Forte for Java企业版,不仅可使打包与部署过程缩减到一步,而且IDE 还能生成测试程序---一个jsp客户端,可以从浏览器调用它来测试bean。在打包EJB和创建EJB模块之前,任何有bean的开发者指定的EJB引用都需要人工解析(resolve)。测试客户端应用程序不能自动处理含有EJB引用的EJB模块的打包。EJB引用使从特定的EJB模块的属性编辑器里解析的。在组装(assembly)过程中,bean的开发者指定的引用和环境表项可以被EJB模块上执行的操作覆盖(overridden)。EJB模块的部署描述符也可以人工编辑。假如覆盖了表项或引用,新的值将只应用于引用此EJB的模块。也就是说,并不会影响为EJB设置的初始值。假如同一个EJB也包含在另一个EJB模块中,则后一个EJB模块将引用bean的初始环境表项和引用值。一个EJB模块的覆盖过程如图7所示。Figure 7: 覆盖一个 EJB 引用EJB模块通过在一系列被引用的java类上执行传递性关闭(transitive closure)来协助bean的打包。传递性关闭在编译时会算出一个类中所有可识别的类引用。这样做的目的是减轻组装器维护所有被引用的类的负担。结果,组装器只需要维护被动态引用的类就行了。 解析bean的EJB引用之后,就可以鼠标右击逻辑bean来完成它的打包和部署。然后从上下文菜单中选择创建EJB测试程序的选项。IDE 将会提示你指定要部署应用的应用服务器。这个过程可以随意分解成几个步骤:例如,可以使用命令:New EJB Module(创建新的EJB模块)将bean的类打包到一个EJB模块中,接着在此模块上调用部署的操作,然后再创建它的测试程序。为了使部署功能起作用,在此之前必须从IDE 的Server Registry(服务器注册)里选择缺省服务器。Server Registry列出你的系统上所有可用的服务器。同时还必须创建服务器的一个实例,启动服务器进程。尽管J2EE应用服务器的部署过程一般是一致的,每一种应用服务器却都有自己的部署方式。目前,J2EE平台正在定义一个标准的服务器部署API。此API通过提供标准的在与J2EE相兼容的应用服务器上部署EJB的方法,将会增加EJB在J2EE应用服务器的可移植性。鉴于服务器API有望成为一种平台标准,FORTE FOR JAVA企业版提供了一个可以插入应用服务器软件的服务器API。该服务器API包含了整个部署过程,从而实现FORTE FOR JAVA企业版对部署过程的标准化。应用服务器厂商可以向该API提供他们自己的插件。基于特定的应用服务器,每个插件的兼容性有所不同。这些插件在FORTE FOR JAVA企业版开发环境和每个支持J2EE的服务器间运行。他们实现服务器API,将各个服务器的部署过程与FORTE FOR JAVA企业版集成在一起。图8示描述了这个结构。Figure 8: 应用服务器部署插件指定了即将使用的应用服务器,FORTE FOR JAVA企业版就会自动插入相应的服务器API,好预备部署EJB。从开发者的角度看,不管使用哪一种服务器,开发过程都很简单,直截了当。因为FORTE FOR JAVA企业版懂得不同的服务器之间部署上的差别,它可以自动处理好这些差别。测试 beanFigure 9: Generating a Test Application 在成功部署这些bean之后,FORTE FOR JAVA企业版会为bean创建一个EJB和一个Web模块,以及bean的测试程序。其中EJB模块包含已编译的EJB类。Web模块则包含测试客户端的JSP(Java Server Pages)。要测试bean时,只需简单地在浏览器内调用测试程序即可。例如,在部署会话bean MySession时,FORTE FOR JAVA企业版会创建EJB模块:ySession_EJBModule, Web模块:MySession_WebModule,和测试程序:MySession_TestApp。如图9所示。在浏览器窗口内输入URL来测试应用程序,如以下所示:http://server:8000/test application(其中server是我们的web服务器的名称,test application则是开发环境中创建的测试程序的名称。例如:MySession_TestApp)通过浏览器视图可以访问本地和远程接口的实例,从本地接口开始。接口中的方法可以被调用。例如,用create方法来创建远程接口的一个实例。方法需要的任何参数都可由浏览器中输入,它则会显示方法的返回值。这个视图还会保留测试会话中创建的一系列对象。比如,图10显示的是运行MySession_TestApp时浏览器内显示的测试页面。Figure 10: 在浏览器中使用IDE 生成的测试程序结论这篇文章描述了如何使用FORTE FOR JAVA企业版产品来进行EJB的开发,部署与测试,使整个过程更轻易,以便我们把精力集中编写在bean的商务逻辑,这也是作为bean开发者的正务。这个目标是能够达成的,因为FORTE FOR JAVA企业版自动治理许多EJB的开发工作,例如保持本地与远程接口和bean 实现类之间的同步,生成需要的方法,保证正确的方法返回类型,等等。开发完EJB后,FORTE FOR JAVA企业版可以一步完成组成bean的类与接口的编译。接着对已编译的bean打包和部署到符合J2EE规范的应用服务器上,最后,创建一个测试客户端。这个测试客户端可以从浏览器一端调用以测试该bean的逻辑。

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673486.jpg','image1')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673627.jpg','image2')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673845.jpg','image3')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201674002.jpg','image4')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201675720.jpg','image5')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201675939.gif','image6')

resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673267.jpg','image0')

标签: Java
相关文章: