首页 文章 J2EE综合 怎样从 WebSphere Business Integration Server Foundation 向 WebSphere Process Server 移植一个端到端的应用

邮件订阅

怎样从 WebSphere Business Integration Server Foundation 向 WebSphere Process Server 移植一个端到端的应用 E-mail
用户评价: / 0
好 
作者:Administrator   
2008-12-03 02:01

引言

IBM? WebSphere? Business Integration Server Foundation(以下简称为 WBISF)是 IBM 在 2003 年推出的业务整合平台。目前它的升级产品是 WebSphere Process Server(以下简称为 WPS)。WBISF 基于 Web 服务调用框架(WSIF, Web Services Invocation Framework),而 WPS 则是基于服务组件架构(Service Component Architecture,简称 SCA)编程模型和服务数据对象数据模型(Service Data Object,简称 SDO)的包含了开放标准的面向服务的体系结构(Service Oriented Architecture,简称 SOA)。由于这两者的编程模型完全不同,所以不能从 WBISF 直接升级到 WPS,我们这里所说的移植是指构件(artifact)层面的移植。

本文介绍了如何从 WBISF 向 WPS 移植一个端到端的应用。我们将使用与 WPS 配套的开发工具――WebSphere Integration Developer(以下简称为 WID)来移植完整的应用,并使用 WID 自带的 WPS 测试环境来测试业务流程。本文中所有步骤都是在 Windows? 平台上的 WID 中执行的。

WBISF 到 WPS 的源构件移植

如图 1 所示,我们不能从 WBISF 直接升级到 WPS,以使 WBISF 上的应用可以在 WPS 上直接使用。我们这里所说的移植是构件(artifact)的移植。为了帮助 WBISF 的客户将 WBISF 上已有的应用移植到 WPS,IBM 在 WID 中提供了相应的工具:WSADIE 源构件移植向导。用户首先从 WBISF 配套的集成开发环境―― WebSphere Studio Application Developer Integration Edition(以下称为 WSADIE )中将应用程序的源代码拷贝出来,使用 WID 的 WSADIE 源构件移植工具将其移植到 WID 中,再将移植后的应用程序部署到 WPS 上。在此过程中,WID 提供的移植向导将尽可能自动移植所有 BPEL 文件和 BPEL WSDL 扩展,但用户可能也需要执行一些手动移植步骤以完成这一移植。图 1 展示了整个移植的路径。


图 1. WBISF 到 WPS 的移植路径


目前,在 WID 中 WSADIE 移植工具一次只能对一个服务项目(Service 项目)进行移植,对其他非服务项目(如 EJB 项目,Web 项目等)需另做手工处理。

待移植的业务应用

我们要移植的是一个端到端的 WBISF 应用,这个流程描述了一个完整的订单处理过程,如下图 2 所示:


图 2. 待移植的业务应用

订单处理的完整步骤如下:

  1. 用户通过 Web 界面输入订货信息,启动流程;
  2. 流程首先记录下用户的订单;
  3. 根据用户订单中货品数量,流程进入以下分支之一:
    如果用户订货数量 >= 某一阈值,调用大宗订单处理服务,转到步骤 4);如果用户订货数量 < 某一阈值,转到步骤 5);
  4. 用户订货数量超过阈值,进行大宗订单处理服务;
  5. 调用供货系统服务;
  6. 结束流程。

我们提供的资源包是从 WSADIE V5.1.1.13 的工作区中拷贝出来的,所有的应用在 WBISF V5.1.1.7 中测试通过。资源包中包括了以下四个部分:

  • OrderEJB 是一个 EJB 项目,其中包含了一个的 session bean 的实现,它为我们提供了 EJB 服务;
  • OrderProcess 服务项目包含了一个 BPEL 流程,其中包含了 WSADIE 服务项目中的最基本元素:Java 代码段,switch activity,java 服务调用,EJB 服务调用和对子流程的调用;
  • Inventory Service 项目包含了一个 BPEL 子流程,此流程将被 OrderProcess 流程调用;
  • OPWebClient 项目包含了 OrderRequest JSP 和 OrderProcess Servlet,用户将通过 JSP 页面提交订货申请,启动 OrderProcess Servlet,通过 Servlet 中 EJB 流程绑定接口对 OrderProcess 流进行调用。

工作区中的所有项目如下:

项目名称 项目类型 所在的EAR项目 项目描述
OrderEJB EJB项目 OrderEJBEAR 提供EJB服务
OPWebClient Web项目 OPWebClientEAR 提供用户界面
OrderProcess Service项目 - 主流程项目
InventoryService Service项目 - 子流程项目
OrderEJBEAR EAR项目 -
OPWebClientEAR EAR项目 -

OrderProcess 流程的 BPEL 图如下所示:


图 3. OrderProcess 流程的 BPEL 图表

在执行下面章节的移植工作前,请将本文提供的资源包(OP_WSADIE511.zip)解压缩到一个临时文件夹,其中包含了一个完整的 WSADIE 工作区。并从 Windows 开始菜单启动 WID,选择开始 -> 所有程序 -> IBM WebSphere Integration Developer -> IBM WebSphere Integration Developer V6.1 -> WebSphere Integration Developer V6.1。





回页首


源构件移植过程

一般而言,WBISF 上的一个完整的业务整合场景到 WPS 上的源构件移植包括以下三个部分:

  • 源构件移植前的准备,可能需要的准备有:
    • 对 WSADIE 工作区进行备份;
    • 建立新的 WID 工作区,从 WSADIE 工作区拷贝所有非服务项目到 WID 工作区中(WSADIE 中的服务项目会自动产生对应的 EAR ,EJB 和 WEB 项目,这些项目不会在移植中用到);
    • 移植非服务项目,如 EJB 项目,Web 项目等。
  • 对服务项目进行移植,可以有两种方式完成移植:
    • 使用 WID 界面中的移植向导;
    • 使用 WID 所带的命令 WSADIEServiceProjectMigration 。
  • 源构件移植后的操作,包括:
    • WSADIE 源构件移植工具有一些限制,可能需要手动修改,详见 WID 信息中心;

WPS 和 WBISF 对服务的调用方式是不一样的,在我们的场景中,WBISF 流程的客户端是通过 EJB 流程绑定接口调用到 BPEL 流程,这些客户端代码在移植后需要进一步的改动。





回页首


源构件移植前的准备

1. 启动 WID;

2. 建立一个新的 WID 工作区 OP_WID61;


图 4. 新建 WID 工作区

3. 从 WSADIE 工作区中把 OrderEJB,OrderEJBEAR,OPWebClient 和 OPWebClientEAR 项目复制到新的 WID 工作区中;

4. 在 WID 界面中,从菜单栏中选择 File -> Import… -> General -> Existing Projects into Workspace,选择 E:\OP_WID61\OrderEJB,将 EJB 项目导入 WID 工作区中;


图 5. 导入 OrderEJB 项目

5. 重复步骤 4 来导入 OPWebClient,OrderEJBEAR 和 OPWebClientEAR 项目;

6. 右键点击 OrderEJBEAR 项目,选择 Migrate -> J2EE Migration Wizard…,选择 J2EE version1.4,Target RuntimeWebsphere Process Server v6.1,注意选中 Migration All Module Projects,单击 Finish


图 6. 使用 J2EE 移植向导

7. 右键点击 OrderEJB 项目,选择 Properties -> Java Build Path -> Libraries,移除所有 WAS_EE_V511\lib 下的 jar 包;


图 7. 移除 Java 编译路径中无效的 Jar 包

8. 重新编译 OrderEJB 和 OrderEJBEAR 项目;

9. 对 OPWebClient 和 OPWebClientEAR 项目重做步骤 6-8,对 OPWebClientEAR 项目运行 J2EE Migration Wizard 并移除 OPWebClient 项目中所有 WAS_EE_V511\lib 下的 jar 包;

注:OPWebClient 项目中还会出现错误,我们会在 移植 WBISF 客户端代码 节中解决这些问题。





回页首


对服务项目进行移植

对服务项目进行移植时,必须按照服务项目之间的依赖顺序进行移植。在本例中,OrderProcess 项目引用到了 InventoryService 项目和 OrderEJB 项目。因此应该先把这两个项目移植到 WID 工作区中,再完成 OrderProcess 项目的移植。

在这一章节中,我们首先演示如何使用 WID 界面中的 WSADIE 移植向导来完成 InventoryService 服务项目的移植,然后介绍如何使用 WID 的 WSADIEServiceProjectMigration 命令来移植 OrderProcess 服务项目。

使用 WSADIE 移植向导来完成 InventoryService 服务项目的移植

1. 使用 WID 打开工作区 E:\OP_WID61;

2. 在菜单栏中选择 File -> Import

3. 在导入窗口中选择 Business Integration -> WebSphere Studio Application Developer Integration Edition Service Project,然后单击 Next,这将启动 WSADIE 移植向导。如图 8 所示


图 8. 启动 WSADIE 移植向导

4. 单击 Browse 按钮,选择 WSADIE 工作区中的 InventoryService 项目,这里可以更改移植后的业务整合模块名称。在这里,我们接受默认的 InventoryService 作为模块名,单击 Next


图 9. 选择要移植的 WSADIE 服务项目

5. 保留选择 Preserve the original BPEL Java snippets in the comments,这将把所有现有的 Java 代码段保留在注释块中。单击 Finish

6. 移植完成,移植过程中没有发生错误;


图 10. 移植成功完成

7. 重新编译 InventoryService 项目,InventoryService 项目中没有任何错误。

使用 WSADIEServiceProjectMigration 命令来移植 OrderProcess 项目

1. 要使用 WSADIEServiceProjectMigration 命令来移植服务项目,我们应该首先找到此命令所在的目录。对 WID V6.1,此命令通常位于 SHARED_FOLDER_HOME/plugins/com.ibm.wbit.migration.wsadie_6.1.0* 中(其中 SHARED_FOLDER_HOME 是在安装 WID 时指定的共享目录);

2. 关掉所有 WID 的工作区;

3. 打开一个命令行窗口,改变当前目录到步骤 1 中的目录;

清单 1. 改变目录

cd C:\IBM\SDP70Shared\plugins\com.ibm.wbit.migration.wsadie_6.1.0*

4. 输入以下命令:

清单 2. 执行 WSADIEServiceProjectMigration 命令

WSADIEServiceProjectMigration.bat -e "C:\IBM\WID61" -d "E:\OP_WID61" 
				-s "E:\OP_WSADIE51\OrderProcess" -t "OrderProcess"

5. 命令成功完成 , 命令行窗口显示以下信息:

清单 3. 输出信息

INFORMATION:
The source artifact migration from ' E:\OP_WSADIE51\OrderProcess ' to 'E:/ 
OP_WID61/OrderProcess' is complete.

注:WSADIEServiceProjectMigration 命令参数的定义如下

  • -e “eclipse 目录”(必须的):Eclipse 运行时(eclipse.exe)所在的目录;
  • -s “源项目所在的目录”(必须的):WSADIE V5,服务项目的完整路径;
  • -d “工作区”(必须的):即将生成的业务整合模块所在的工作区;
  • -t “目标项目的名称”(可选的):即将生成的业务整合模块的名称。




回页首


源构件移植后的操作

在完成以上操作后,打开 WID 的工作区,重新编译所有的项目。在 OrderProcess 和 OPWebClient 项目中仍然有错误存在。这首先是因为 WBISF 到 WPS 移植工具仍然有一些限制,需要手动的修改;另外在我们的 WSADIE 应用中,客户端通过调用一个 EJB 接口来与 BPEL 流程交互,这种方式在 WPS 中是不支持的,所以我们必须对客户端代码进行修改。

WSADIE 源构件移植过程中的限制

在移植后的 WID 工作区中,OrderProcess 项目有这样的错误:


图 11. OrderProcess 中的服务定义重名的错误

这是因为在 WSADIE 中,允许在同样的命名空间中存在相同的多个 Web 服务绑定和服务定义,但在 WID 中这样的设置是不允许的。我们通过以下步骤手工改正此错误。

  1. 在 WID 界面中,选择 Window -> Open Perspective -> Java,打开 Java 透视图;
  2. 在 Package Explorer 视图中,打开 com.ibm.wbi.pczhang.orderprocess 包中的 orderprocess_ProcessPortType_SOAP.wsdl 文件,更改文件中的 <service name="ProcessPortTypeService"> 字段为:<service name="ProcessPortTypeServiceSOAP">
  3. 打开 orderprocess_ProcessPortType_SOAPExport.export 文件,更改文件中的 <esbBinding xsi:type="webservice:WebServiceExportBinding" port="ns0:ProcessPortTypeSOAPPort" service="ns0:ProcessPortTypeService"/> 字段为: <esbBinding xsi:type="webservice:WebServiceExportBinding" port="ns0:ProcessPortTypeSOAPPort" service="ns0:ProcessPortTypeServiceSOAP"/>
  4. 重新编译 OrderProcess 项目,OrderProcess 项目中没有错误。

移植 WBISF 客户端代码

在 OrderProcessWebClient 项目中存在错误,这是因为在我们的 WSADIE 场景中,是使用 WSIF EJB 流程绑定方式来访问 BPEL 服务的。为了把客户端移植到 WID 中,我们必须手动移植这些代码,使用 SCA 编程模型调用 BPEL 业务流程。

1. 使用 WID 打开工作区 OP_WID61;

2. 在菜单栏中选择 File -> New -> Module,新建一个模块,输入模块名为:Client;


图 12. 在 WID 中新建 Client 模块

3. 展开 Client 项目,双击 Assembly Diagram ,打开装配图;

4. 拷贝 OrderProcess 项目中的 OrderProcessIntfc 接口到 Client 项目中;

5. 展开 OrderProcess 项目,选中 Assembly Diagram 下的 OrderProcessExport ,拖放到 Client 项目的装配图中;

6. 在弹出的 Component Creation 窗口中选择 Import with SCA Binding,单击 OK;

7. 在弹出的 Manage Project Dependencies 窗口中,单击 No

8. 在装配图左侧的工具面板中选中 References,点击 Client 项目的装配图空白处,加入一个 Stand-alone References;

9. 在装配图左侧的工具面板中选中绿色细线图标 ,依次单击 Stand-alone References 和 orderprocess 组件;

10. 弹出的消息将通知您“a matching reference will be created on the source node. Do you want to continue?”。单击 OK

11. 将提示您是否希望为 Stand-alone Reference 生成 Java 接口,而不是 Web 服务描述语言(Web Services Description Language,WSDL)接口。选择 No

12. Client 项目的装配图如图 13 所示:


图 13. Client 项目中的装配图

13. 保存对 Client 项目的修改,重新编译 Client 项目;

14. 打开 OPWebClient 项目,打开 com.ibm.wbi.pczhang.orderprocess.client 包下的 OPClientServlet.java;


图 14. OPWebClient 项目中产生错误的代码段

15. 使用下面的代码替换 processRequest() 方法:

清单 4. 替换 processRequest() 方法的代码

try {
System.out.println("OP:orderServlet:invoke orderprocess:Begin.");
Service service = 
(Service) ServiceManager.INSTANCE.locateService("OrderProcessIntfcPartner");
BOFactory boFactory =(BOFactory) ServiceManager.INSTANCE
.locateService("com/ibm/websphere/bo/BOFactory");
DataObject wrapbo = null;
commonj.sdo.Type inputType = 
service.getReference().getOperationType("InputOperation").getInputType();
	if(service.getReference().getOperationType("InputOperation")
	.isWrapperType(inputType)) {
	wrapbo = boFactory.createByType(inputType);
	wrapbo.set("custName", req.getParameter("CustName"));
	wrapbo.set("custAddress", req.getParameter("CustAddress"));
	wrapbo.setInt("itemNumber", Integer.parseInt(req.getParameter("ItemName")));
	wrapbo.setInt("quantity", Integer.parseInt(req
	.getParameter("Quantity")));
	wrapbo.set("requestedDate", req.getParameter("RequestedDate"));
			}
	service.invoke("InputOperation", wrapbo);
	System.out.println("OP:orderServlet:invoke orderprocess:END.");
			} catch (Exception ex) {
	System.out.println("exceptions in OP:orderServlet:invoke orderprocess:");
		ex.printStackTrace();
			}

16. 在 J2EE 透视图下,打开 OPWebClientEAR 项目的部署描述符,单击左下角的 Module 选项,在 Modules 栏中加入 ClientEJB.jar,在 Project Utility JARs 栏中加入 Client.jar。如图 15 所示;


图 15. 将 Client 模块加入 OPWebClientEAR 项目中

重新编译整个工作区,工作区中应该没有错误。

注意:在移植工具自动生成的 OrderProcessApp 项目中,OrderEJB.jar 被放置在 Modules 栏中,这会导致 OrderProcessAPP 无法部署到 WPS 上,我们通过以下步骤改正此问题:

在 J2EE 透视图下,打开 OrderProcessEAR 项目的部署描述符,单击左下角的 Module 选项,在 Modules 中除去 OrderEJB.jar,然后在 Project Utility JARs 中加入 OrderEJB.jar。如图 16 所示。


图 16. 修正 OrderProcessAPP 项目的模块定义





回页首


在 WID 中测试移植后的应用

在本节中,我们首先对 WID 自带的 WPS 测试环境进行配置,然后再演示我们迁移后的场景如何在测试环境中运行。

创建 JMS 队列

在使用 WID 自带的 WPS 测试环境来测试我们刚刚移植的场景之前,我们首先需要在 WPS 上配置 JNDI 名称为 jms/orderprocess_JMSExportQueue 的 JMS 队列。这是因为移植工具为 OrderProcess 配置了 JMSExport 接口,如果不配置相应的 JMS 队列,在将 OrderProcessAPP 部署到 WPS 上时会产生错误。


图 17. OrderProcess中JMS队列的定义

使用以下步骤来定义JMS队列:

  1. 使用 WID 打开 OP_WID61 工作区;
  2. 在 Server 视图中,右键点击 WebSphere Process Server v6.1,选择 Start
  3. 服务器启动完毕后,在 Server 视图中,右键点击 WPS61 测试环境,选择 Run administrative console,WPS 管理界面将在 Integration Developer 的主窗口中打开;
  4. 单击 WPS 管理界面的左边菜单中资源 -> JMS -> 队列
  5. 单击新建,选择 Default messaging provider,单击确定
  6. 输入名称jms/orderprocess_JMSExportQueueJNDI 名称jms/orderprocess_JMSExportQueue
  7. 在总线名下拉菜单中选择:SCA.APPLICATION.widCell.Bus
  8. 在队列名下拉菜单中选择:创建 SIB 目标,进入创建新的队列页面;
  9. 给出标识为 orderprocess_JMSExportQueue,创建新的队列;
  10. 创建 JMS 队列如下:

图 18. 创建 JMS 队列

测试应用

我们通过以下步骤来测试移植到 WID 中的应用。

1. 在 WID 中展开 OPWebClient 项目。右键点击 WebContent 下的 order.jsp,选择 Run As -> Run on Server

2. 在 Run On Server 屏幕中,选择 WebSphere Process Server v6.1 并单击 Next >


图 19. 指定 WID 自带的 WPS 测试环境

3. 选中 OrderProcessAPP,InventoryServiceAPP,OPWebClientEAR 和 OrderEJBEAR,单击 Add > 来把这几个应用部署到 WPS 上,单击 Finish


图 20. 把需要的应用配置到 WPS 上

4. WPS 测试服务器启动后,应用程序被发布到该测试服务器。在 WID 的主窗口中,order.jsp 在 Web 浏览器窗口被打开。我们输入相应请求参数的值,然后单击 submit;


图 21. 在请求页面中输入测试订单

5.如果一切进展顺利,在 Console 视图中将显示以下信息:


图 22. 流程执行结果

可以看到,从 OrderServlet 成功调用到了 OrderProcess BPEL 流程。在 OrderProcess 流程中,Logging 服务(Java 服务)、OrderSessionBean 服务(EJB 服务)和 InventoryProcess(BPEL 子流程)被依次调用。





回页首


结束语

本文介绍了如何从 WBISF V5.1.1.7 向 WPS V6.1 移植一个完整的端到端的业务应用,以及如何使用 WID V6.1 中自带的 WPS 测试环境来测试移植后的应用。






回页首


下载

描述名字大小下载方法
代码示例OP_WSADIE511.zip95 KBHTTP
关于下载方法的信息


[url]http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0812_yuji/index.html?ca=drs-cn-1203[/url]

最后更新于: 2008-12-03 02:01
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)

其他相关文章