一个应用程序调用另一个应用程序

上传人:ba****u6 文档编号:198713329 上传时间:2023-04-09 格式:DOCX 页数:12 大小:20.75KB
收藏 版权申诉 举报 下载
一个应用程序调用另一个应用程序_第1页
第1页 / 共12页
一个应用程序调用另一个应用程序_第2页
第2页 / 共12页
一个应用程序调用另一个应用程序_第3页
第3页 / 共12页
资源描述:

《一个应用程序调用另一个应用程序》由会员分享,可在线阅读,更多相关《一个应用程序调用另一个应用程序(12页珍藏版)》请在装配图网上搜索。

1、一个应用程序调用另一个应用程序Apache Geronimo通信基础开发、部署和测试(上)Apache Geronimo包含顶尖的消息传递实现,还有世界级的Enterprise JavaBeans(EJB)实 现,从而使您可在自己的应用程序中使用消息驱动bean(MDB)。这也就意味着只要具备恰 当的资源适配器,其他组件就可以使用消息传递与您的应用程序交互。本系列教程详细叙述 了 Java Platform, Enterprise Edition(Java EE)应用程序的创建,在这个应用程序中,用户、 管理员甚至其他应用程序都可利用MDB进行交互,方法是向Java Apache Mail E

2、nterprise Server (也称为Apache James)发送电子邮件,而 Apache James随后又使用J2EE Connector Architecture(JCA)资源适配器反过来与Geronimo通信。开始之前本系列教程面向希望学习如何使用各种Java EE组件(包括MDB和JCA资源适配器)构 建集成化解决方案的Java EE程序员。本教程假设您熟悉基本的Java和Java EE概念,例 如 EJB、Java Message Service(JMS)、MDB 和 Unified Modeling Language(UML)图。关于本系列在这个共分三部分的系列教程中,您将

3、构建一个示例应用程序,通过这种方式了解如何将不 同的Java EE组件集成在一起,来开发复杂的应用程序。您可下载本文的示例应用程序,它示范了 Apache James中电子邮件的数据是如何通过JCA 资源适配器、MDB、EJB流向Apache Geronimo应用服务器的。本期是系列教程的第1部分,介绍了如何开发MDB、实体bean和容器管理的持久性 (CMP),以及如何在Apache Geronimo中部署和测试这些组件。第2部分将解释如何创建电子邮件应用程序(mailet和matcher)并将它们部署在Apache James电子邮件服务器中。第3部分将整个应用程序联系在一起。您将学习为A

4、pache James电子邮件服务器(它通 过MDB与James和Geronimo交互)开发、部署和测试JCA资源适配器。关于本教程本教程是共分三部分的系列教程中的第1部分,集中关注开发、部署和测试一个集成化 Java EE应用程序的各种组件。该应用程序示范了 Apache James电子邮件服务器中一封电 子邮件的数据是如何通过JCA资源适配器和MDB流向Apache Geronimo应用服务器的。系统需求为完成本教程的学习,您需要具备以下工具:Apache Geronimo Apache 提供的 Java EE 应用服务器Apache James 2.2 基于 Java 的 Simple

5、Mail Transfer Protocol (SMTP)、Post OfficeProtocol V3(POP3)和 Network News Transfer Protocol (NNTP)新闻服务器Apache Derby数据库开放源码、轻量级数据库,嵌入在Geronimo内,因此无需单独安装Sun Microsystems 公司提供的 Java 1.4.2示例源文件在本教程的下载部分可获得geronimo.mdb.part1source.zip文件,其中包含源代码、EJB JAR 和本教程的描述符文件。下面详细列出了 .zip文件的组成部分:-dds (包含描述符xml文件)-depl

6、oy(po-ejb.jar)-lib(examples.jar 和 tester.jar)-src(mdb和实体ejb的Java文件)- deploy.cmd- undeploy.cmd- runtester.cmdEJB程序包下面列出了 po-ejb.jar文件的组成部分(部署在Geronimo中):描述符文件:-META-INF/ejb-jar.xml-META-INF/openejb-jar.xml类文件:-examples/po/ejb/*.class-examples/po/bean/*.class-examples/po/mdb/*.class基本应用程序本教程的目的是介绍在Apa

7、che Geronimo上编写可轻松与其他基于Java的技术集成的 Java EE应用程序的概念和基础知识。您将通过使用Java EE组件开发一个示例应用程序来 学会这些知识。在本教程的场景示例和编码练习中,您将使用Foo, Inc.,这是一家虚拟企业。尽管Foo, Inc. 是虚拟的,但业务场景和示例都是真实的。Foo, Inc.的遗留采购订单流程让我们来看一下Foo, Inc的遗留采购订单(PO)流程。这是一个手工流程,员工填写采购 申请单,将申请单提交给采购部门进行授权、批准,最终将PO提交给厂商。这看上去是一个效率极其低下、耗费时间的流程,可以通过软件进行自动化。因此,Foo, Inc

8、. 决定购买一套新的PO系统(假设是一种基于数据库的产品),实现将内部采购申请单提交 给厂商的电子化通信。新的采购订单流程新的PO流程允许一名员工发送电子邮件请求,由PO经理授权进行电子化批准,从而自 动创建PO并将其提交给厂商。新流程详述如下:员工通过电子邮件将采购请求发送给采购部门。采购请求电子邮件由一个Java EE应用程序处理,该应用程序确保请求者是经过授权的。若 授权流程成功完成,电子邮件将转发到指定文件夹中,以便进一步处理。Java EE应用程序的另外一个组件轮询包含经过授权的请求的电子邮件文件夹,并在PO系 统中创建一个新采购订单。随后可在PO系统中检索采购订单并将订单发送给厂商

9、。应用程序设计 既然已经了解了 Foo, Inc的新采购订单流程,那么下一步就是设计我们的Java EE示例应用 程序,来实现新流程。示例应用程序需求您将从为示例应用程序收集需求开始。应用程序需要处理来自员工的传入采购请求电子邮件,并将其移动到可由采购部门访问的特 定文件夹。随后,您的应用程序将读取请求,并检查该员工是否确实来自Foo, Inc.。一旦经过授权,即创建一份新的采购订单,以便提交给厂商。这样,您确定了三个需求,现在您需要将其建模为用例。用例分析用例分析捕获整体需求,并描述示例应用程序的单个特性和功能性。它由一组用例和参与者 构成。用例用例代表业务需求。在我们的例子中,也就是我们刚

10、刚为Foo, Inc.的新采购订单流程确定 出的需求:发送采购请求电子邮件。需求:Foo, Inc.的员工向采购部门发送带有采购请求的电子邮件。处理采购请求电子邮件。需求:应用程序通过授权和将采购请求电子邮件移动到其他文件夹 中来处理这些电子邮件。检查采购请求电子邮件。需求:应用程序将连续检查等候处理的新采购请求电子邮件。在PO系统中添加采购订单。需求:应用程序将在PO系统中添加新采购订单。参与者参与者是在应用程序或系统中承担一个角色的实体。参与者可以是人、组织或应用程序。以 下列表包含了您的参与者:Foo, Inc.的员工电子邮件应用程序J2EE应用程序参与者与应用程序交互,因而也显示为与图

11、1中所示的用例交互。现在您就可以为您的应用程序确定实现这些用例所必需的不同Java EE组件了。组件确定出您的应用程序中的用例之后,下一步就是将这些需求/用例建模为Java EE组件。图2 中的组件图显示了各种组件及其交互作用。让我们从详细了解应用程序流程和各应用程序组 件在更高层面中的角色开始。应用程序流程Foo, Inc.的员工发送一封采购请求电子邮件。这种电子邮件将由您的示例应用程序处理(组 件:mailet和matcher),它将授权采购请求,并将请求转发到属于采购部门的特定电子邮 件文件夹中。您的应用程序(组件:JCA适配器)将不断轮询新采购请求。一旦接收到新的 采购请求电子邮件,示

12、例应用程序(组件:JCA资源适配器和MDB)将调用消息侦听器来 异步处理采购请求。应用程序(组件:MDB和EJB)随后在PO系统(数据库)中创建一 份新的采购订单。下面列举了组件及其相应用例。您将分三部分构建这个应用程序(在本系列的三篇教程中):实体bean CMP:在PO系统中添加采购订单(第1部分)。MDB:在PO系统中添加采购订单(第1部分)。电子邮件客户机应用程序:发送采购请求电子邮件(第2部分)。电子邮件应用程序:处理采购请求电子邮件(第2部分)。JCA资源适配器:检查采购请求电子邮件(第3部分)。本文来自重庆达内计算机培训:通常,可以在完全不了解将用于部署的应用服务器的情况下设计和

13、开发Java EE应用程序。在开发、部署和测试过程中,您要在Apache Geronimo和Apache James中部署示例应用 程序。您将使用Apache Derby作为PO系统数据库。(在本教程开始处的系统需求部分中 可找到下载这些产品的链接。)既然您已经了解了应用程序流程和示例应用程序的设计,接下来就该动手开发第1部分的 应用程序组件了。第1部分的应用程序开发 在这里,您将为用例在PO系统中添加采购订单开发组件。在组件设计中,您将使用MDB 异步接收来自JCA资源适配器和实体EJB (CMP)的采购请求,在PO系统中添加新采购 订单。您将调用您的 MDB PurchaseOrderMD

14、B 和实体 bean ( CMP ) PurchaseOrderEJB。 PurchaseOrderMDB接收到一个采购请求之后,它将调用PurchaseOrderEJB在数据中插入一 个新的采购订单。下面详细介绍了在Geronimo内对MDB和CMP实体bean的实现和部署。实体 bean(PurchaseOrderEJB)您要根据EJB 2.1规范将PurchaseOrderEJB作为CMP实体bean实现。实体bean代表持 久数据,在本例中,它表示作为PO系统的数据库内的一行。由于您使用的是CMP,Java EE 容器会读/写数据库中的数据。在示例应用程序中,PurchaseOrder

15、EJB与数据库表PURCHASEORDER交互,定义参见清单1。清单1.表定义TABLE PURCHASEORDER (PURCHASEORDERNUMVARCHAR(30) PRIMARY KEYITEMVARCHAR(30) NOTNULL,DESCRIPTIONVARCHAR(255),UNITPRICEINTEGER,QUANTITYINTEGER,)REQUESTOREMAILVARCHAR(30) NOTNULL接下来您将实现处理采购订单的EJB。实现 PurchaseOrderEJBEJB 2.1规范要求实体bean必须具有一个主接口、一个远程接口、一个bean类和一个部 署描述

16、符。本节介绍以下所有必备EJB接口和类的实现。EJB 主接口 RemotePurchaseOrderHome.java (请参见清单 2)EJB 远程接口 RemotePurchaseOrder.java (请参见清单 3)EJB bean 类PurchaseOrderEJB.java (请参见清单 4 和清单 5)描述符ejb-jar.xml和openejb-jar.xml (请参见清单6和清单7)可在 $part1.home/src/examples/po/ejb 目录下找到 PurchaseOrderEJB 的源文件(.java),两 个描述符文件均位于$part1.home /dds目

17、录中。EJB主接口EJB主接口用于在服务器中创建、删除或查找bean实例。这个接口在部署期间绑定到服务 器Java Naming and Directory Interface(JNDI)树中。在运行时,客户机程序查找JNDI中的 主接口来使用此 EJB。RemotePurchaseOrderHome是 PurchaseOrderEJB 的主接口,它按照 EJB 2.1规范实现了 EJBHome (参见清单2)。清单 2. PurchaseOrderEJB 的主接口public interface RemotePurchaseOrderHome extends EJBHome, Remote

18、public RemotePurchaseOrder create(String purchaseOrderNum,String item, String description, Integer unitPrice, Integer quantity, String requestorEmail) throws CreateException, RemoteException;public Collection findByRequestorEmail(String requestorEmail) throws FinderException, RemoteException;public

19、RemotePurchaseOrder findByPrimaryKey(String poNum) throws FinderException, RemoteException;您有一个create()方法,它实际上是一个bean实例,在PURCHASEORDER表中插入新记 录。存在两个finder方法:findByRequestorEmail()返回指定请求者电子邮件为REQUESTOREMAIL的采购订单行的集 合。findByPrimaryKey返回带有特定主键的一行。本文来自重庆达内it培训:EJB远程接口EJB远程接口(参见清单3)为实体bean定义业务方法。远程接口中的这些方

20、法应定义为 公共方法,以使其可被远程客户机程序所访问。RemotePurchaseOrder是PurchaseOrderEJB 的远程接口。清单 3. PurchaseOrderEJB 的远程接口public interface RemotePurchaseOrder extends EJBObject, Remote public String getPurchaseOrderNum() throws RemoteException;public void setPurchaseOrderNum(String purchaseOrderNum) throws RemoteException;

21、public String getItem() throws RemoteException;public void setItem(String item) throws RemoteException;public String getDescription() throws RemoteException;public void setDescription(String description)throws RemoteException;public Integer getUnitPrice() throws RemoteException;public void setUnitPr

22、ice(Integer unitPrice)throws RemoteException;public Integer getQuantity() throws RemoteException;public void setQuantity(Integer quantity) throws RemoteException;public String getRequestorEmail() throws RemoteException;public void setRequestorEmail(String requestorEmail) throws RemoteException;Remot

23、ePurchaseOrder 为数据库表 PURCHASEORDERSYSTEM 中的列定义了 getters 和 settersoEJB bean 类EJB bean类实现远程接口,并为远程接口中定义的方法提供实际实现。了解此EJB是如何 作为CMP部署之后,您不必实现getter和setter方法,而是将其定义为抽象方法(参见 清单4)o清单 4. PurchaseOrderEJB bean 类的 getter 和 setter 方法public abstract class PurchaseOrderEJB implements EntityBean private EntityCont

24、ext context;/ Access methods for the CMP Fields.publicabstractString getPurchaseOrderNum();publicabstractvoidsetPurchaseOrderNum (StringpurchaseOrderNum);publicabstractString getItem ();publicabstractvoidsetItem (String item);.本文来重庆达内:create()方法(参见清单5)在PURCHASEORDER表中插入一个带有特定参数值的新行。清单5.主接口中定义的bean类内

25、的create()方法实现private String create (String purchaseOrderNum,String item, String description, Integer unitPrice, Integer quantity,String requestorEmail) throws CreateException setPurchaseOrderNum(purchaseOrderNum);setItem(item);setDescription(description);setUnitPrice(unitPrice);setQuantity(quantity)

26、;setRequestorEmail(requestorEmail);return purchaseOrderNum;下面定义EJB描述符。定义EJB描述符既然已经创建好了远程接口、主接口和bean类,那么接下来就该转向部署描述符了。您将 定义两个描述符:根据EJB 2.1规范定义的ejb-jar.xml以及在Geronimo中部署EJB所必 需的openejb-jar.xml。如清单6所示,ejb-jar.xml定义主接口、远程接口和bean类。请 注意,持久性类型为Container。清单 6. ejb-jar.xml 片段ejb-jar version=2.1xmlns=xmlns:xs

27、i=http:/www.w3.org/2001/XMLSchema-instancexsi:schemaLocation=PurchaseOrderEJBPurchaseOrderEJB;PurchaseOrderEJB;examples.po.ejb.RemotePurchaseOrderHome;examples.po.ejb.RemotePurchaseOrder;examples.po.ejb.PurchaseOrderEJB Container;java.lang.Stringfalse2.xPurchaseOrder purchaseOrderNum itemdescription

28、purchaseOrderNumReference to Datasource in Geronimo.jdbc/PurchaseOrderDataSourcejavax.sql.DataSourceContainerEJB描述符ejb-jar.xml为一个EJB定义了 CMP字段(参见清单7)。这些字段对应于 PurchaseOrderEJB将与之交互的底层数据库表的列。您还在resorce-ref部分中定义了绑定在 服务器 JNDI 中的数据库数据源(jdbc/PurchaseOrderDataSource)。描述符中定义的两个finder方法是:findByPrimaryKey,给定采购

29、订单号,返回采购订单。findByRequestoEmail,返回一个特定电子邮件地址所请求的采购订单集合。ejb-jar.xml 用 EJB Query Language(EJBQL)为上述 finder 方法定义查询。清单7.在ejb-jar.xml中为findByXXX()方法定义查询findByRequestorEmailjava.lang.StringLocalSELECT OBJECT(p) FROM PurchaseOrder AS p WHEREp.requestorEmail = ?1findByPrimaryKeyjava.lang.StringLocalSELECT OB

30、JECT(p) FROM PurchaseOrder AS p WHEREp.purchaseOrderNum = ?1随Java EE描述符ejb-jar.xml 一起,您还必须为Geronimo定义一个EJB描述符 (openejb-jar.xml),如清单 8 所示。清单 8. openejb-jar.xml 片段PurchaseOrderDataSource PurchaseOrderEJB PurchaseOrderEJB PurchaseOrder purchaseOrderNum purchaseOrderNum item itempurchaseOrderNum清单8中的这个描述符定义了 JNDI名称(PurchaseOrder),该名称用于将EJM主接口绑 定到服务器JNDI树中。应与ejb-jar.xml中使用的名称匹配。Java EE服务器将 使用该描述符中定义的表名和cmp字段来执行数据库操作。文章由重庆达内培训

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!