wf4

来源:互联网 发布:固态硬盘优化设置不了 编辑:程序博客网 时间:2024/05/02 02:58
在这一步中学习如何向Decision节点的一条执行路径添加逻辑。特别是学习如何设计工作流通过控件与资源交互。工作流将调用一个Web服务并处理由Web服务返回的数据。这一步描述下列主题:

· 什么是Tax Calculation控件?

· 设计工作流与Web服务之间的交互

什么是Tax Calculation控件?

控件表示工作流与其他资源之间的接口。WebLogic Platform控件使得从应用程序中访问企业资源,如Web服务变得容易了。交互的大部细节都由底部控件负责了。控件开放可以从工作流中直接调用的Java接口。将要向工作流项目添加控件的一个实例,然后调用它的方法。

在这个方案中,工作流调用一个计算并返回销售税率的Web服务。工作流通过Web服务控件调用Web服务。对于如何创建TaxCalc.JWS Web服务及其相关控件(TaxCalcControl.jcs)的描述超出了本教程的范围。创建Web服务控件(TaxCalcControl.jcs)并加入到应用程序项目中(具体就是Tutorial/requestquote/services文件夹中)。本节的目的就是描述如何在工作流中创建适合的节点,并设计它们与这个Web服务控件的通信。

相关主题

教程:创建第一个Web服务

 

设计工作流与Web服务之间的交互

本节描述如何创建当在Decision节点中定义的条件判断为true时要执行的动作。如果接收到的来自客户的XML文档中的shipAddress/state的值等于下面中的任何一个,那么条件就判断为true:CA、 California、 NJ、 New Jersey。

在本节,将学习如何从工作流中调用Web服务,以及创建回调句柄以接收由Web服务返回的数据。这包括下面的任务:

· 在项目中创建Web服务控件的一个实例

· 创建Control Send工作流节点

· 从工作流中调用Tax Calculation Web服务

· 接收来自Web服务的税率计算结果

在项目中创建Web服务的一个实例

1. 如果Controls选项卡在WebLogic Workshop中不可见,则从菜单栏中选择View —> Windows —> Data Palette

2. 单击Controls选项卡上的Add以显示表示控件列表,它表示工作流可以与之交互的资源。

3. 选择Web Service。会显示 Insert Control对话框。



. 在Insert Control 对话框中:

a. 在Step 1中,输入 taxCalculation作为该控件的变量名。

b. 在Step 2中,确保选中了下列选项: Use a Web Service control already defined by a JCX file。

c. 单击JCX file域旁边的Browse,选择/Tutorial/requestquote/services文件夹中的TaxCalcControl.jcx,然后单击Select以关闭文件浏览器。

5. 单击Create以关闭 Insert Control 对话框。

在项目中创建了一个名为taxCalculation的Web服务控件实例,并显示在Controls选项卡上。

6. 选择File —> Save以保存所做的工作。

创建Control Send工作流节点

1. 在Application窗格中,单击RequestQuote.jwf以保证工作流显示在 Design View中。

2. 在Palette中,单击 Control Send,并将它拖到Design View中的工作流上,释放到Decision节点上紧靠condition节点下面的位置。

 



3. 右击Control Send 并从下拉菜单中选择Rename。然后输入Request Tax Rate作为这个节点的标记。

在前面的图中, 是控件类型的占位符。就是说,它表示工作流中的一个位置,在这个位置上必须指定工作流要与之交互的资源(控件)的类型。在这里,指定一个Web服务控件。具体就是将这个节点配置为与在前面步骤中创建的Web服务控件的实例进行通信。

从工作流中调用Tax Calculation web服务

在这一步,创建一个从工作流中调用tax calculation控件的逻辑。

1. 让RequestQuote.jwf在Design View中打开,双击Request Tax Rate节点以打开它的节点构造器。节点构造器会在General Settings选项卡中打开。

2. 单击Control域旁边的箭头以显示项目中控件实例的列表。

3. 选择taxCalculation

Method面板显示可以对taxCalculation控件调用的asynchronous send 方法列表。

注:这种交互设计为异步的,意味着工作流可以从这个节点向taxCalculation控件发送请求,同时不会因等待控件的响应而阻塞。换句话说,在taxCalculation服务完成请求的同时,工作流可以继续处理并接收来自这个服务的响应。

4. 选择下列方法: void request TaxRate(String arg1)

5. 单击Apply

6. 单击Send Data以打开节点构造器中的第二个选项卡。

Method Expects域填入了由taxCalculation Web服务开放的requestTaxRate()方法所期待的数据类型:java.lang.String

7. 单击 Select Variable以显示项目中的变量。然后选择 requestXML (QuoteRequestDocument)——即为工作流开始处的 Client Request节点创建的变量。

注意作为taxCalculation控件的输入要求的数据类型是Java String类型,而存放Request for Quote消息(它包括了 shipAddress/state值)的变量是XML类型(对于一个XML Schema有效)。

WebLogic Workshop提供了强大的数据映射工具以映射不同的数据类型。用这个工具创建的数据转换储存在Data Transformation Format (DTF) 文件中。可以将DTF文件视作另一种工作流可以通过控件查看的资源。就是说,编译包含数据转换的DTF文件时,它们是做为控件编译的。这个控件开放转换方法,工作流调用这些方法以映射不同的数据类型。

在这里,创建一个新的Transformation控件 (Transformations.dtf) 并从节点构造器中调用映射工具。

8. 在Send Data选项卡中的Step 2a中,单击New以调出Insert Control 对话框。

9. 在Insert Control 对话框中:

a. 在 Step 1中,输入Transformations作为这个控件的变量名。

 



b. 在Step 2中,选择下列选项: Create a new Transformation control to use。

c. 在 New DTF name 域中输入Transformations。

d. 单击Create以关闭这个对话框。

在Controls选项卡上显示Transformation控件的一个新实例 (Transformations) 。

注:如果Control Send节点 (Request Tax Rate)的节点构造器是关闭的,那么必须重新打开它以完成XML值(来自Request for Quote文档)与String值(taxCalculation控件的输入所要求的)之间的数据转换。

10. 在Transform Method 域中输入convertStateToString。

 



11. 单击Create Transformation

会打开映射工具并在Source Schema 窗格中显示QuoteRequest XML文档的表示,在Target Schema窗格中显示String的表示。

12. 单击Source Schema窗格中的state,并将鼠标拖到Target Schema窗格中的String上面。在XML Map窗格中会在state和String之间画出一条线。它表示这两种数据类型之间的映射。


 

13. 单击Ok以保存所做的映射并关闭映射工具。

14. 单击Request Tax Rate节点构造器中的Apply以保存对这个节点所做的规定,并关闭节点构造器。

这一步完成了对 Request Tax Rate节点的设计。在项目中创建了一个新的Transformation控件(Transformations.dtf)。创建了Transformations.dtf控件上的第一个方法(convertStateToString()) 。用映射工具定义了这个方法的转换。WebLogic Workshop将下面的XQuery表达式写入Transformations.dtf,以反映在映射工具中所做的工作。

/**

* @dtf:transform xquery::

* declare namespace ns0="http://www.example.org/request"

* data($_quoteRequestDoc/ns0:shipAddress/@state)

* ::

*/

java.lang.String

convertStateToString(org.example.request.QuoteRequestDocument _quoteRequestDoc);

接收来自Web服务的税率计算结果

工作流与tax calculation控件之间的交互是异步的:工作流可以在tax calculation服务准备其响应时继续执行其他工作。tax calculation服务在准备好响应时通知工作流。
在前面一节设计了对tax calculation Web服务的调用(通过控件)。完成下面的步骤以在工作流中添加接收由tax calculation控件返回的税率的逻辑。

1. 在Palette中,单击 Control Receive,并将它拖到Design View中的工作流上,将它放到Decision节点中紧靠 Request Tax Rate节点下面的位置。


Design View中的工作流中添加了一个Control Receive节点。就像在创建Control Send 节点时一样,Control Receive节点在这一点是一个占位符节点。换句话说,它指定工作流在这一点上的通信种类(工作流在Control Receive节点等待来自资源的异步消息),但是它没有指定工作流要与哪个资源交互。下列步骤描述了如何设计与taxCalculation控件的通信。

2. 双击Control Receive节点以打开它的节点构造器。

节点构造器包括两个选项卡:General SettingsReceive Data,在这里可以设计该节点与控件的通信:

3. 在General Settings选项卡中,完成下列步骤以选择工作流要与之通信的控件的特定实例上的一种方法:

a. 在节点构造器中,单击Control域旁边的箭头以显示项目中控件实例的列表。

b. 从列表中选择taxCalculation

Method窗格显示Method控件上可用的异步返回方法。

c. 选择下列方法: void returnTaxRate(float arg1)

4. 单击Apply

5. 单击 Receive Data 以打开节点构造器中的第二个选项卡。

Method Returns域填入了taxCalculation控件上的 returnTaxRate() 方法返回的数据类型。 在继续之前,必须在工作流中创建一个变量以接收由taxCalculation返回的浮点数据。为此,完成下列步骤:

a. 在Variables选项卡中,单击Add —> Variable 以显示Create Variable 对话框。

b. 在 Variable Name域中,输入taxRate

c. 在Select Variable Type域中,单击 Java Types旁边的+以展开列表,然后选择列表中的floatVariable Type域现在填入float。

d. 单击OK。就创建了新的工作流变量并作为Java变量列在Variables选项卡中。

6. 返回Design View中的Control Receive节点构造器。

7. 在Receive Data选项卡中,单击Select Variable以显示项目中的变量。

 



8. 选择 taxRate (float)

在这里,注意这个节点上taxRate变量的数据类型与由taxCalculation控件返回的数据相匹配。因此,在这个节点上不需要数据转换。

9. 单击Apply以保存所做的规定,然后单击Close以关闭Control Receive节点构造器。

这一步完成了对Control Receive节点的设计。 完成下列步骤以在继续教程之前重命名节点。

10. 双击名字Control Receive并输入Receive Tax Rate以给节点一个反映其功能的名字。

这完成了对Decision节点上的条件判断为true时工作流所执行的动作的设计。在Design View中,工作流应与下图相同:



11. 选择File —> Save All以保存所做的工作。

相关主题

创建并测试映射

数据转换指南 

原创粉丝点击