欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:70345213       资源大小:27.88KB        全文页数:13页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    一个应用程序调用另一个应用程序Apache Geronimo 通信基础 开发、部署和测试(上)Apache Geronimo 包含顶尖的消息传递实现,还有世界级的 Enterprise JavaBeans(EJB)实现,从而使您可在自己的应用程序中使用 消息驱动 bean(MDB)。这也就意味着只要具备恰当的资源适配器,其他组件就可以使用消息传递与您的应用程序交互。本系列教程详细 叙述了 Java Platform, Enterprise Edition(Java EE)应用程序的创建,在这个应用程序中,用户、管理员甚至其他应用程序 都可利用 MDB 进行交互,方法是向 Java Apache Mail Enterprise 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)图。关于本系列在这个共分三部分的系列教程中,您将构建一个示例应用程序,通过这种方式了解如何将 不同的 Java EE 组件集成在一起,来开发复杂的应用程序。您可 下载 本文的示例应用程序,它示范了 Apache James 中电子邮 件的数据是如何通过 JCA 资源适配器、MDB、EJB 流向 Apache Geronimo 应用服务器的。本期是系列教程的第 1 部分,介绍了如何开发 MDB、实体 bean 和容器管理的持久性(CMP),以及如何在 Apache Geronimo 中部署 和测试这些组件。第 2 部分将解释如何创建电子邮件应用程序(mailet 和 matcher)并将它们部署在 Apache James 电子邮件服务器中。第 3 部分将整个应用程序联系在一起。您将学习为 Apache 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 Mail Transfer Protocol(SMTP)、Post Office Protocol 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 文件)- deploy(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基本应用程序本教程的目的是介绍在 Apache Geronimo 上编写可轻松与其他基于 Java 的技术集成的 Java EE 应用程序的概念和基础知识。您将通 过使用 Java EE 组件开发一个示例应用程序来学会这些知识。在本教程的场景示例和编码练习中,您将使用 Foo, Inc.,这是一家虚拟企业。尽管 Foo, Inc. 是虚拟的,但业务场景和示例都是真 实的。Foo, Inc. 的遗留采购订单流程让我们来看一下 Foo, Inc 的遗留采购订单(PO)流程。这是一个手工流程,员工填写采购申请单,将申请单提交给采购部门进行授权 、批准,最终将 PO 提交给厂商。这看上去是一个效率极其低下、耗费时间的流程,可以通过软件进行自动化。因此,Foo, Inc. 决定购买一套新的 PO 系统(假设是一 种基于数据库的产品),实现将内部采购申请单提交给厂商的电子化通信。新的采购订单流程新的 PO 流程允许一名员工发送电子邮件请求,由 PO 经理授权进行电子化批准,从而自动创建 PO 并将其提交给厂商。新流程详述如下:员工通过电子邮件将采购请求发送给采购部门。采购请求电子邮件由一个 Java EE 应用程序处理,该应用程序确保请求者是经过授权的。若授权流程成功完成,电子邮件将转发到指 定文件夹中,以便进一步处理。Java EE 应用程序的另外一个组件轮询包含经过授权的请求的电子邮件文件夹,并在 PO 系统中创建一个新采购订单。随后可在 PO 系统中检索采购订单并将订单发送给厂商。应用程序设计既然已经了解了 Foo, Inc 的新采购订单流程,那么下一步就是设计我们的 Java EE 示例应用程序,来实现新流程。示例应用程序需求您将从为示例应用程序收集需求开始。应用程序需要处理来自员工的传入采购请求电子邮件,并将其移动到可由采购部门访问的特定文件夹。随后,您的应用程序将读取请求,并检查该员工是否确实来自 Foo, Inc.。一旦经过授权,即创建一份新的采购订单,以便提交给厂商。这样,您确定了三个需求,现在您需要将其建模为用例。用例分析用例分析捕获整体需求,并描述示例应用程序的单个特性和功能性。它由一组用例和参与者构成。用例用例代表业务需求。在我们的例子中,也就是我们刚刚为 Foo, Inc. 的新采购订单流程确定出的需求:发送采购请求电子邮件。需求:Foo, Inc. 的员工向采购部门发送带有采购请求的电子邮件。处理采购请求电子邮件。需求:应用程序通过授权和将采购请求电子邮件移动到其他文件夹中来处理这些电子邮件。检查采购请求电子邮件。需求:应用程序将连续检查等候处理的新采购请求电子邮件。在 PO 系统中添加采购订单。需求:应用程序将在 PO 系统中添加新采购订单。参与者参与者是在应用程序或系统中承担一个角色的实体。参与者可以是人、组织或应用程序。以下列表包含了您的参与者:Foo, Inc. 的员工电子邮件应用程序J2EE 应用程序参与者与应用程序交互,因而也显示为与 图 1 中所示的用例交互。现在您就可以为您的应用程序确定实现这些用例所必需的不同 Java EE 组件了。组件确定出您的应用程序中的用例之后,下一步就是将这些需求/用例建模为 Java EE 组件。图 2 中的组件图显示了各种组件及其交互作 用。让我们从详细了解应用程序流程和各应用程序组件在更高层面中的角色开始。应用程序流程Foo, Inc. 的员工发送一封采购请求电子邮件。这种电子邮件将由您的示例应用程序处理(组件:mailet 和 matcher),它将授权采 购请求,并将请求转发到属于采购部门的特定电子邮件文件夹中。您的应用程序(组件:JCA 适配器)将不断轮询新采购请求。一旦接收 到新的采购请求电子邮件,示例应用程序(组件:JCA 资源适配器和 MDB)将调用消息侦听器来异步处理采购请求。应用程序(组件:MDB 和 EJB)随后在 PO 系统(数据库)中创建一份新的采购订单。下面列举了组件及其相应用例。您将分三部分构建这个应用程序(在本系列的三篇教程中):实体 bean CMP:在 PO 系统中添加采购订单(第 1 部分)。MDB:在 PO 系统中添加采购订单(第 1 部分)。电子邮件客户机应用程序:发送采购请求电子邮件(第 2 部分)。电子邮件应用程序:处理采购请求电子邮件(第 2 部分)。JCA 资源适配器:检查采购请求电子邮件(第 3 部分)。本文来自重庆达内计算机培训:通常,可以在完全不了解将用于部署的应用服务器的情况下设计和开发 Java EE 应用程序。在开发、部署和测试过程中,您要在 Apache Geronimo 和 Apache James 中部署示例应用程序。您将使用 Apache Derby 作为 PO 系 统数据库。(在本教程开始处的 系统需求 部分中可找到下载这些产品的链接。)既然您已经了解了应用程序流程和示例应用程序的设计,接下来就该动手开发第 1 部分的应用程序组件了。第 1 部分的应用程序开发在这里,您将为用例在 PO 系统中添加采购订单 开发组件。在组件设计中,您将使用 MDB 异步接收来自 JCA 资源适配器和实体 EJB (CMP)的采购请求,在 PO 系统中添加新采购订单。您将调用您的 MDB PurchaseOrderMDB 和实体 bean(CMP)PurchaseOrderEJB。PurchaseOrderMDB 接收到一个采购请求之后,它将调 用 PurchaseOrderEJB 在数据中插入一个新的采购订单。下面详细介绍了在 Geronimo 内对 MDB 和 CMP 实体 bean 的实现和部署。实体 bean(PurchaseOrderEJB)您要根据 EJB 2.1 规范将 PurchaseOrderEJB 作为 CMP 实体 bean 实现。实体 bean 代表持久数据,在本例中,它表示作为 PO 系统 的数据库内的一行。由于您使用的是 CMP,Java EE 容器会读/写数据库中的数据。在示例应用程序中,PurchaseOrderEJB 与数据库表 PURCHASEORDER 交互,定义参见 清单 1。清单 1. 表定义TABLEPURCHASEORDER(PURCHASEORDERNUMVARCHAR(30)PRIMARYKEY,ITEMVARCHAR(30)NOTNULL,DESCRIPTIONVARCHAR(255),UNITPRICE INTEGER,QUANTITYINTEGER,REQUESTOREMAILVARCHAR(30)NOTNULL) 接下来您将实现处理采购订单的 EJB。实现 PurchaseOrderEJBEJB 2.1 规范要求实体 bean 必须具有一个 主接口、一个远程接口、一个 bean 类和一个部署描述符。本节介绍以下所有必备 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 目录中。EJB 主接口EJB 主接 口用于在服务器中创建、删除或查找 bean 实例。这个接口在部署期间绑定到服务器 Java Naming and Directory Interface(JNDI)树 中。在运行时,客户机程序查找 JNDI 中的主接口来使用此 EJB。RemotePurchaseOrderHome 是 PurchaseOrderEJB 的主接口,它按照 EJB 2.1 规范实现了 EJBHome(参见 清单 2)。清单 2. PurchaseOrderEJB 的主接口publicinterfaceRemotePurchaseOrderHome extendsEJBHome,Remote publicRemotePurchaseOrdercreate(StringpurchaseOrderNum, Stringitem, Stringdescription, IntegerunitPrice, Integerquantity, StringrequestorEmail) throwsCreateException,RemoteException; publicCollectionfindByRequestorEmail(StringrequestorEmail) throwsFinderException,RemoteException; publicRemotePurchaseOrderfindByPrimaryKey(StringpoNum) throwsFinderException,RemoteException;您有一个 create() 方法,它实际上是一个 bean 实例,在 PURCHASEORDER 表中插入新记录。存在两个 finder 方法:findByRequestorEmail() 返回指定请求者电子邮件为 REQUESTOREMAIL 的采购订单行的集合。findByPrimaryKey 返回带有特定主键的一行。本文来自重庆达内it培训:EJB 远程接口EJB 远程接口(参见 清单 3)为实体 bean 定义业务方法。远程接口中的这些方法应定义为公共方法,以使其可被远程客户机程序所 访问。RemotePurchaseOrder 是 PurchaseOrderEJB 的远程接口。清单 3. PurchaseOrderEJB 的远程接口publicinterfaceRemotePurchaseOrder extendsEJBObject,Remote publicStringgetPurchaseOrderNum() throwsRemoteException; publicvoidsetPurchaseOrderNum(StringpurchaseOrderNum) throwsRemoteException; publicStringgetItem() throwsRemoteException; publicvoidsetItem(Stringitem) throwsRemoteException; publicStringgetDescription() throwsRemoteException; publicvoidsetDescription(Stringdescription) throwsRemoteException; publicIntegergetUnitPrice() throwsRemoteException; publicvoidsetUnitPrice(IntegerunitPrice) throwsRemoteException; publicIntegergetQuantity() throwsRemoteException; publicvoidsetQuantity(Integerquantity) throwsRemoteException; publicStringgetRequestorEmail() throwsRemoteException; publicvoidsetRequestorEmail(StringrequestorEmail) throwsRemoteException;RemotePurchaseOrder 为数据库表 PURCHASEORDERSYSTEM 中的列定义了 getters 和 setters。EJB bean 类EJB bean 类实现远程接口,并为远程接口中定义的方法提供实际实现。了解此 EJB 是如何作为 CMP 部署之后,您不必实现 getter 和 setter 方法,而是将其定义为抽象方法(参见 清单 4)。清单 4. PurchaseOrderEJB bean 类的 getter 和 setter 方法publicabstractclassPurchaseOrderEJB implementsEntityBean privateEntityContextcontext; /AccessmethodsfortheCMPFields. publicabstractStringgetPurchaseOrderNum(); publicabstractvoidsetPurchaseOrderNum(String purchaseOrderNum); publicabstractStringgetItem(); publicabstractvoidsetItem(Stringitem);.本文来重庆达内:create() 方法(参见 清单 5)在 PURCHASEORDER 表中插入一个带有特定参数值的新行。清单 5. 主接口中定义的 bean 类内的 create() 方法实现privateStringcreate(StringpurchaseOrderNum, Stringitem, Stringdescription, IntegerunitPrice, Integerquantity, StringrequestorEmail) throwsCreateException setPurchaseOrderNum(purchaseOrderNum); setItem(item); setDescription(description); setUnitPrice(unitPrice); setQuantity(quantity); setRequestorEmail(requestorEmail); returnpurchaseOrderNum; 下面定义 EJB 描述符。定义 EJB 描述符既然已经创建好了远程接口、主接口和 bean 类,那么接下来就该转向部署描述符了。您将定义两个描述符:根据 EJB 2.1 规范定义 的 ejb-jar.xml 以及在 Geronimo 中部署 EJB 所必需的 openejb-jar.xml。如 清单 6 所示,ejb-jar.xml 定义主接口、远程接口和 bean 类。请注意,持久性类型为 Container。清单 6. ejb-jar.xml 片段<?xmlversion="1.0"encoding="UTF-8"?><ejb-jarversion="2.1" xmlns=" xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="<display-name>PurchaseOrderEJB</display-name><enterprise-beans><entity><display-name>PurchaseOrderEJB</display-name><ejb-name>PurchaseOrderEJB</ejb-name><home>examples.po.ejb.RemotePurchaseOrderHome</home><remote>examples.po.ejb.RemotePurchaseOrder</remote><ejb-class>examples.po.ejb.PurchaseOrderEJB</ejb-class><persistence-type>Container</persistence-type><prim-key-class>java.lang.String</prim-key-class><reentrant>false</reentrant><cmp-version>2.x</cmp-version><abstract-schema-name>PurchaseOrder</abstract-schema-name><cmp-field><field-name>purchaseOrderNum</field-name></cmp-field><cmp-field><field-name>item</field-name></cmp-field><cmp-field><field-name>description</field-name></cmp-field>.<primkey-field>purchaseOrderNum</primkey-field><resource-ref><description>ReferencetoDatasourceinGeronimo.</description><res-ref-name>jdbc/PurchaseOrderDataSource</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>EJB 描述符 ejb-jar.xml 为一个 EJB 定义了 CMP 字段(参见 清单 7)。这些字段对应于 PurchaseOrderEJB 将与之交互的底层数据 库表的列。您还在 resorce-ref 部分中定义了绑定在服务器 JNDI 中的数据库数据源(jdbc/PurchaseOrderDataSource)。描述符中定义的两个 finder 方法是:findByPrimaryKey,给定采购订单号,返回采购订单。findByRequestoEmail,返回一个特定电子邮件地址所请求的采购订单集合。ejb-jar.xml 用 EJB Query Language(EJBQL)为上述 finder 方法定义查询。清单 7. 在 ejb-jar.xml 中为 findByXXX() 方法定义查询<query><description/><query-method><method-name>findByRequestorEmail</method-name><method-params><method-param>java.lang.String</method-param></method-params></query-method><result-type-mapping>Local</result-type-mapping><ejb-ql>SELECTOBJECT(p)FROMPurchaseOrderASpWHERE p.requestorEmail=?1</ejb-ql></query><query><description/><query-method><method-name>findByPrimaryKey</method-name><method-params><method-param>java.lang.String</method-param></method-params></query-method><result-type-mapping>Local</result-type-mapping><ejb-ql>SELECTOBJECT(p)FROMPurchaseOrderASpWHERE p.purchaseOrderNum=?1</ejb-ql></query>随 Java EE 描述符 ejb-jar.xml 一起,您还必须为 Geronimo 定义一个 EJB 描述符(openejb-jar.xml),如 清单 8 所示。清单 8. openejb-jar.xml 片段<?xmlversion="1.0"encoding="UTF-8"?><openejb-jar xmlns="http:/www.openejb.org/xml/ns/openejb-jar-2.0" xmlns:naming="http:/geronimo.apache.org/xml/ns/naming-1.0" xmlns:security="http:/geronimo.apache.org/xml/ns/security-1.1" xmlns:sys="http:/geronimo.apache.org/xml/ns/deployment-1.0" xmlns:pkgen="http:/www.openejb.org/xml/ns/pkgen-2.0" inverseClassloading="true" configId="PurchaseOrderEJB"parentId="geronimo/activemq/1.0/car"><!-ThisisareferencetoDatasource(mapstoEmbeddedDatabaseTable)configuredinGeronimoServer.-><cmp-connection-factory> <resource-link>PurchaseOrderDataSource</resource-link></cmp-connection-factory><enterprise-beans> <entity> <ejb-name>PurchaseOrderEJB</ejb-name> <jndi-name>PurchaseOrderEJB</jndi-name> <table-name>PurchaseOrder</table-name> <cmp-field-mapping> <cmp-field-name>purchaseOrderNum</cmp-field-name> <table-column>purchaseOrderNum</table-column> </cmp-field-mapping> <cmp-field-mapping> <cmp-field-name>item</cmp-field-name> <table-column>item</table-column> </cmp-field-mapping>. <primkey-field>purchaseOrderNum</primkey-field>清单 8 中的这个描述符定义了 JNDI 名称(PurchaseOrder),该名称用于将 EJM 主接口绑定到服务器 JNDI 树中。<ejb- name> 应与 ejb-jar.xml 中使用的名称匹配。Java EE 服务器将使用该描述符中定义的表名和 cmp 字段来执行数据库操作。文章由重庆达内培训

    注意事项

    本文(一个应用程序调用另一个应用程序.docx)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开