科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道将 BPEL 和 EJB 与 WebSphere Process Server 和 WebSphere Integration Developer 一起使用

将 BPEL 和 EJB 与 WebSphere Process Server 和 WebSphere Integration Developer 一起使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将介绍 Enterprise JavaBeans (EJB) 和 Java™ 代码如何用作与 Business Process Execution Language (BPEL) 业务流程相关的客户机和服务。

作者:ibm 来源:ibm 2007年10月9日

关键字: IBM WEBSPHERE 技术 中间件

  • 评论
  • 分享微博
  • 分享邮件

引言

IBM® WebSphere® Process Server for Multiplatforms Version 6.0(以下称为 WebSphere Process Server)是 IBM 下一代业务集成软件,它基于面向服务的体系结构 (SOA) 并采用开放标准。

本文将使用端到端示例,来演示 EJB 如何用作与 BPEL 业务流程相关的客户机和服务。您将学习如何使用独立引用从 EJB 调用 BPEL 业务流程,接着学习 BPEL 业务流程如何使用 W-Type 到 J-Type 的桥接组件调用 EJB。

文中的示例向您展示如何在 IBM WebSphere Integration Developer Version 6.0.1(以下称为 WebSphere Integration Developer)中开发代码。该示例由以下两部分组成:

  • 从 Java 会话 EJB 调用业务流程
  • 作为服务从 BPEL 业务流程调用无状态会话 EJB





回页首


探索温度转换程序示例

在深入研究示例之前,让我们重点考虑一些需要关注的事项。在此示例中,您需要 Portlet 或其他客户机代码来调用业务流程。我们可以通过 EJB 调用使用 Web 服务接口或 RMI-IIOP 来完成此操作。对于 EJB,问题是:如何在 WebSphere Process Server 中设置传入 EJB 调用?从相反方面考虑,可以假设业务流程需要调出到现有 EJB 服务。一种选择是将 EJB 服务打包在 Web 服务中。另一种选择是直接调用 EJB。另外,在直接调用 EJB 时,会发生类似的问题,即如何设置传出 EJB 调用?

在该示例中,温度转换程序可以将华氏温度转换为摄氏温度。我们提供了 Project Interchange 解决方案代码,从而允许您将解决方案加载到 WebSphere Integration Developer 环境,并且在阅读整个文档时,可以参考解决方案的各个方面。因此,没有显示所有视图和步骤。

另外,该示例还演示了整个端到端操作。该示例最后进行了以下测试:从 Java 客户机 EJB 向业务流程发出请求,接着作为服务调用 EJB,然后将响应一直返回到客户机。

无状态会话 EJB 客户机使用 WebSphere Process Server 独立引用来调用业务流程。业务流程接着通过桥接组件调用 EJB 服务,请参见下面的图 1。由于不可能将 BPEL 组件 (W-Type) 直接连接到 EJB 导入 (J-Type),所以您需要在两个组件之间提供一个桥接组件,以便从 W-Type 转换到 J-Type。该示例向您演示了如何执行此操作。


图 1. 温度转换程序客户机和服务 EJB
温度转换程序客户机和服务 EJB




回页首


从 Java 会话 EJB 调用业务流程

您可以使用以下步骤创建业务流程和独立引用,并将二者连接在一起。

  1. 从 WebSphere Integration Developer 选择 Business Integration 透视图,创建名为 MyBusinessProcess 的模块,然后在该模块中创建名为 MBP 的业务流程。
  2. 选择 generate a new interface 以便生成接口 MBP。选择 convert (an operation),然后选择输入 degF 和输出 degC(二者的类型均为 float)以创建业务流程,如图 2 所示。

    图 2. 组装关系图:选择转换操作(输入和输出)来创建业务流程
    组装关系图:选择转换操作(输入和输出)来创建业务流程

  3. 在 MBP 业务流程中,删除变量 Input1,并创建两个新变量 degCdegF,二者的类型均为 float

    图 3. 业务流程编辑器
    业务流程编辑器

  4. 将 Receive 与 degF 关联,将 Reply 与 degC 关联,请参见图 4。

    图 4. 业务流程编辑器——Receive 属性
    业务流程编辑器——Receive 属性

  5. 为了进行测试,在 Receive 和 Reply 之间添加 Assign 任务,并将变量 DegF 分配到 DegC,请参见图 5。

    图 5. BPEL 编辑器,添加 Assign 任务
    BPEL 编辑器,添加 Assign 任务

  6. 将 MBP 业务流程拖到组装编辑器。
  7. 右键单击画布,并选择 add node => Stand-alone References
  8. 将独立引用连接到 MBP 接口。
  9. 对以下问题回答 Yes:“A matching reference will be created on the source node.Do you want to continue?”
  10. 对引用对话框回答 Yes(请参见图 6)。

    图 6. 引用对话框
    引用对话框

  11. 注意,独立引用名称为 MBPPartner。

创建客户机 EJB 来调用独立引用

接下来,将使用以下步骤来创建调用独立引用的客户机 EJB。

  1. 在 WebSphere Integration Developer 中选择 J2EE perspective。创建名为 ConverterClientEJB 的 EJB 项目,并将其放置在与独立引用相同的企业应用程序 (MyBusinessProcessApp) 中。不要创建 EJB 客户机 jar。创建缺省无状态会话 Bean。

    图 7. 新建 EJB 项目对话框
    新建 EJB 项目对话框

  2. 在缺省无状态会话 Bean 中,从清单 1 添加远程方法:

    清单 1. 远程方法
    						
    public float convertFtoC(float f) {
    	ServiceManager serviceManager = new ServiceManager();
    	MBP service = (MBP)serviceManager.locateService("MBPPartner");
    	System.out.println(">>>>>> Calling Business Process convert: f = " + f);
    	Float result = service.convert(new Float(f));
    	float c = result.floatValue();
    	System.out.println(">>>>>> Received from Business Process convert: c = " + c);
    	return c;
    }
    			

    并从清单 2 添加所需导入:



    清单 2. 所需的导入
    						
    import com.ibm.websphere.sca.ServiceManager;
    import process.business.my.mbp.interface_.MBP;
    			

  3. 将方法提升到接口,如清单 3 所示:

    清单 3. 将方法提升到接口
    						
    public interface DefaultSession extends javax.ejb.EJBObject {
    	public float convertFtoC(float f) throws java.rmi.RemoteException;
    }
    

  4. 部署 EJB。
  5. 确保 MyBusinessProcessApp 具有 ConverterClientEJB。

测试 EJB 调用

下一步是测试 EJB 调用。测试您执行的 EBJ 到 BPEL 调用:

  1. 启动流程服务器测试环境。
  2. MyBusinessProcessApp 添加到服务器。
  3. 在浏览器 http://localhost:9080/UTC 中启动 UniversalTestClient。
  4. 浏览 ejb/ejbs/DefaultSession,并测试方法 convertToC

    图 8. 测试客户机 EJB 调用
    测试客户机 EJB 调用

  5. convertToC 会在 BPEL 中分配温度值,但不转换温度值——这在以后执行。
  6. 观察日志。日志应类似于清单 4。

    清单 4. 观察日志
    						
    [5/17/06 5:03:24:672 EDT] 00000054 SystemOut     
    		O >>>>>> Calling Business Process convert: f = 45.0
    [5/17/06 5:03:27:562 EDT] 00000054 SystemOut     
    		O >>>>>> Received from Business Process convert: c = 45.0
    			





回页首


从 BPEL 业务流程作为服务调用无状态会话 EJB

该部分在 developerWorks 文章 将 EJB 服务与 WebSphere Process Server 集成 中进行了详细的描述。对于下面的步骤一和步骤二,最好参考一下此文章。

创建从 BPEL 调用的服务 EJB

第一步是创建 BPEL 将调用的服务 EJB:

  1. 在 J2EE 透视图中,在名为 TemperatureEJB 的 EJB 对象中创建名为 Temperature 的无状态会话 EJB,并将 EJB 模块放置在企业应用程序 TemperatureApp 中。
  2. 将名为 convertToC 的远程方法(请参见清单 5 的实现)添加到 Bean,并对它提升。

    清单 5. 将远程方法添加到 Bean
    						
    public float convertToC(float f){
    	System.out.println(">>>>>> ConverterClientEJB: fahrenheit  = " + f);
    	float c = (f - 32F)*5F/9F;
    	System.out.println(">>>>>> ConverterClientEJB: centigrade = " + c);
    	return c;
    }
    			

  3. 部署 Bean。
  4. 创建名为 TemperatureEJBClient 的客户机 jar。
  5. 打开 ejb 部署描述符,并注意 EJB JNDI 名称:

    ejb/ejbs/TemperatureHome

  6. 创建用于 SCA 导入操作的 EJB 客户机和 jar。
  7. 右键单击 ConverterEJB,并选择 EJB Client JAR => Create EJB Client Project
  8. 选择缺省值,并单击 Finish。这可以在 J2EE 透视图中的 Other Projects 下创建名为 TemperatureEJBClient 的 EJB 客户机项目。
  9. 在 UTC 中运行并测试 EJB。输出应类似于清单 6。


清单 6. EJB 客户机项目输出

				
[5/16/06 22:50:34:922 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: fahrenheit  = 33.0
[5/16/06 22:50:34:922 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: centigrade = 0.5555556
			

为 EJB 添加导入

第二步是在 MyBusinessProcessModule 中为 EJB 添加导入。

  1. 在业务集成透视图中,右键单击 MyBusinessProcess,并选择 Dependency Editor,请参见图 9。
  2. 将 TemperatureEJBClient 添加为依赖 Java 项目。

    图 9. Dependency Editor
    Dependency Editor

  3. 打开 MyBusinessProcess 组装关系图。
  4. 在画布上添加导入组件。将其名称更改为 TemperatureEJB
  5. 单击 Add Interface 图标。
  6. 搜索 Temperature 接口,请参见下面的图 10。

    图 10. 添加 Temperature 接口
    添加 Temperature 接口

  7. 单击 OK
  8. 生成用于导入的 EJB 绑定。
  9. 右键单击 TemperatureEJB 导入,并选择 Generate Binding -> Stateless Session Bean Binding
  10. 选择 Properties 选项卡和 Bindings 选项卡。检查并确保 JNDI 名称字段现在是 ejb/ejbs/TemperatureHome
  11. 通过导入重新测试 EJB:在组装编辑器画布上右键单击 TemperatureEJB 导入,并选择 Test Component
  12. 使用组件测试程序进行测试。输出应类似于清单 7。


清单 7. 测试组件输出

				
[5/16/06 23:26:10:016 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: fahrenheit  = 45.0
[5/16/06 23:26:10:016 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: centigrade = 7.2222223
			

将业务流程连接到 EJB

现在,我们已准备好将业务流程连接到 EJB 导入:

不可能将 BPEL 组件 (W-Type) 直接连接到 EJB 导入 (J-Type)。您需要在两个组件之间提供一个桥接组件,以便将 W-Type 转换为 J-Type。在 IBM WebSphere Business Process Management Version 6.0 信息中心的“业务服务:WSDL 和 Java 接口及引用”中对这一主题进行了说明。

下面是详细的操作步骤:

  1. 添加新的 Java 组件(将其命名为 JavaBridge),并将其连接到目标无状态会话 Bean 导入 TemperatureEJB。此连接将把 Java 引用添加到桥接组件。
  2. 单击接口图标,并选择 WSDL 接口 MBP。
  3. 右键单击 JavaBridge,选择 Generate Implementation,然后选择 Bridge 作为新文件夹。这样会出现 JavaBridge 的实现。
  4. 对该方法进行编辑,请参见清单 8。

    清单 8. 新的 JavaBridge 转换方法
    						
    /**
    * Method generated to support implemention of operation "convert" 
    * defined for WSDL port type 
    * named "interface.MBP".
    * 
    * Please refer to the WSDL Definition for more information 
    * on the type of input, output and fault(s).
    */
    public Float convert(Float degF) {
    	//TODO Needs to be implemented.
    	//return null;
    	// This is how to implement the bridge method
    	Temperature temp = locateService_TemperaturePartner();
    	float c = 0F;
    	try {
    		c = temp.convertToC(degF.floatValue());
    	} catch (java.rmi.RemoteException e) {
    		e.printStackTrace();
    		c = - 4500F;
    	}
    	return new Float( c );
    }
    			

  5. 将 MBP 连接到 JavaBridge。
  6. 在 Business Process 中双击 MBP,弹出 BP 编辑器。
  7. 删除 Assign 任务。
  8. Invoke 任务插入到该位置。
  9. 添加 Reference Partner 调用 MBPPartner,浏览接口并选择 MBP
  10. 选择 Invoke 任务,并检查 Details 面板。将变量添加到输入和输出。
  11. 结果应类似于图 11,并且应该不存在任何错误。

    图 11. 调用的属性
    调用的属性

  12. 业务流程的编辑应类似于下面的图 12。

    图 12. BPEL 编辑器
    BPEL 编辑器

  13. 比较该结果,以确保它们类似于图 13。

    图 13. 组装编辑器
    组装编辑器

祝贺您现在完成了构建过程,并且可以进行测试了。

测试组件

  1. 右键单击 MBP,单击 Test Component,并删除模拟器。测试后,您应看到下面图 14 中记录的结果。

    图 14. 最后的组件测试
    最后的组件测试

  2. 对 Universal Test Client 执行最后的端到端测试。
  3. 您可能需要首先检查 ConverterClientEJB.jar 是否仍位于 MyBusinessProcessApp 部署描述符中,如果不存在,则再添加回来。(如果是这样,在测试部署之前请记住从服务器添加/删除项目)。
  4. 描述符应类似于图 15。

    图 15. MyBusinessProcessApp 部署描述符
    MyBusinessProcessApp 部署描述符

  5. 调出 UTE。浏览 ejb/ejbs/DefaultSessionHome,并对它进行测试。
  6. 查看下面显示的端到端调用日志:


清单 9. 将远程方法添加到 Bean

				
[5/17/06 13:08:55:984 EDT] 0000005c SystemOut     
   O >>>>>> Calling Business Process convert: f = 185.0
[5/17/06 13:08:56:328 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: fahrenheit  = 185.0
[5/17/06 13:08:56:328 EDT] 0000005c SystemOut     
   O >>>>>> ConverterClientEJB: centigrade = 85.0
[5/17/06 13:08:56:328 EDT] 0000005c SystemOut     
   O >>>>>> Received from Business Process convert: c = 85.0
			





回页首


结束语

本文演示了如何使用 WebSphere Integration Developer 以增量方式构建并测试端到端的示例,从而展示 EJB 如何用作与 BPEL 业务流程相关的客户机和服务。本文侧重介绍了如何在客户机 EJB 中使用独立引用来调用 BPEL 业务流程,并展示了 BPEL 业务流程如何使用 W-Type 到 J-Type 的桥接组件调用服务 EJB。我们还使用 WebSphere Integration Developer Universal Test Client 对示例进行了测试。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章