扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
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)中开发代码。该示例由以下两部分组成:
|
探索温度转换程序示例
在深入研究示例之前,让我们重点考虑一些需要关注的事项。在此示例中,您需要 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
|
从 Java 会话 EJB 调用业务流程
您可以使用以下步骤创建业务流程和独立引用,并将二者连接在一起。
MyBusinessProcess
的模块,然后在该模块中创建名为 MBP
的业务流程。
degF
和输出 degC
(二者的类型均为 float
)以创建业务流程,如图 2 所示。 Input1
,并创建两个新变量 degC
和 degF
,二者的类型均为 float
。 degF
关联,将 Reply 与 degC
关联,请参见图 4。 DegF
分配到 DegC
,请参见图 5。 创建客户机 EJB 来调用独立引用
接下来,将使用以下步骤来创建调用独立引用的客户机 EJB。
ConverterClientEJB
的 EJB 项目,并将其放置在与独立引用相同的企业应用程序 (MyBusinessProcessApp) 中。不要创建 EJB 客户机 jar。创建缺省无状态会话 Bean。 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 添加所需导入:
import com.ibm.websphere.sca.ServiceManager; import process.business.my.mbp.interface_.MBP; |
public interface DefaultSession extends javax.ejb.EJBObject { public float convertFtoC(float f) throws java.rmi.RemoteException; } |
测试 EJB 调用
下一步是测试 EJB 调用。测试您执行的 EBJ 到 BPEL 调用:
convertToC
。 convertToC
会在 BPEL 中分配温度值,但不转换温度值——这在以后执行。
[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:
TemperatureEJB
的 EJB 对象中创建名为 Temperature
的无状态会话 EJB,并将 EJB 模块放置在企业应用程序 TemperatureApp
中。
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; } |
TemperatureEJBClient
的客户机 jar。
ejb/ejbs/TemperatureHome
清单 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 添加导入。
TemperatureEJB
。
Temperature
接口,请参见下面的图 10。 ejb/ejbs/TemperatureHome
清单 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 接口及引用”中对这一主题进行了说明。
下面是详细的操作步骤:
JavaBridge
),并将其连接到目标无状态会话 Bean 导入 TemperatureEJB。此连接将把 Java 引用添加到桥接组件。
/** * 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 ); } |
MBPPartner
,浏览接口并选择 MBP。
祝贺您现在完成了构建过程,并且可以进行测试了。
测试组件
清单 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者