利用SOA简化业务流程.docx
- 文档编号:5252741
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:20
- 大小:194.23KB
利用SOA简化业务流程.docx
《利用SOA简化业务流程.docx》由会员分享,可在线阅读,更多相关《利用SOA简化业务流程.docx(20页珍藏版)》请在冰豆网上搜索。
利用SOA简化业务流程
利用SOA简化业务流程----使用WebLogicWorkshop8.1快速构建业务流程
时间:
2004-09-09
作者:
DavidHritz
浏览次数:
本文关键字:
WebLogicWorkshop8.1, SOA
文章工具
推荐给朋友
打印文章
在BEAWebLogicWorkshop8.1中,构建面向服务的架构(SOA)目前已成为一项简单的任务。
BEA提供了一种机制,用于可视化地创建复杂的业务流程和服务。
在下面的内容中,我将指导您一步一步地创建抵押代理公司的流程。
希望本文能让您深入了解如何利用WebLogicWorkshop的强大功能构建面向服务的架构(SOA)。
我们假定已经为流程生成了任意数量的子系统,用于访问支付流程,支付流程根据贷款数目和条款计算每月应缴纳的费用。
代理公司通常与大量的信用机构打交道,以便完成贷款。
在我们的例子中,代理公司将与国家银行和地方银行打交道。
这两家机构都开通了Web服务,我们可以利用该Web服务获得当前的贷款利率等信息。
我们的业务流程将把这些服务合并到自己的逻辑中,从而尽可能为用户提供最新的信息。
开始
在开始构建业务流程之前,需要构建业务流程所依赖的Web服务。
我们的服务不仅应能够返回银行当前的利率,还应能够返回银行的名称。
出于本例目的,将通过从静态定义的利率表中随机选择值的方式来计算当前利率。
下面的步骤将指导您完成在Workshop中创建所需的应用程序、项目和服务的步骤。
首先,需要创建一个空的应用程序:
∙ 选择File>New>Application…,出现NewApplication对话框。
∙ 选择EmptyApplication,并将其命名为Brokerage。
∙ 单击Create。
下面创建Web服务项目:
∙ 右键单击Brokerage文件夹。
∙ 选择New>Project…,出现NewProject对话框。
∙ 选择WebServiceProject,并将其命名为WebServices。
∙ 单击Create。
创建国家银行服务:
∙ 右键单击WebService文件夹。
∙ 选择New>Folder,并将文件夹命名为nationalbank。
∙ 右键单击nationalbank文件夹。
∙ 选择New>WebService,出现NewFile对话框。
∙ 将该Web服务命名为NationalBankService。
∙ 单击Create。
编辑窗格中将显示新创建的服务。
∙ 右键单击编辑窗格中的服务,选择AddMethod。
∙ 将方法命名为getCurrentRate。
∙ 单击SourceView选项卡。
∙ 修改该Web服务,使其与清单1一致。
∙ 选择File>Save
清单1.抵押代理公司创建国家银行Web服务的代码
packagenationalbank;
publicclassNationalBankService
implementscom.bea.jws.WebService
{
staticfinallong
serialVersionUID=1L;
staticfinaldouble[]rates=
{.0625,.0525,.06375,.055,
.05375,.05625,.05875,.06,
.0575,.06125};
publicstaticclassQuote
{
publicdoublerate;
publicStringname;
publicQuote(){}
publicQuote(Stringname,
doublerate)
{
this.rate=rate;
this.name=name;
}
}
/**
*@common:
operation
*/
publicQuotegetCurrentRate()
{
StringmilliSecs=
String.valueOf(
System.currentTimeMillis());
doublerate=rates[
Integer.parseInt(
String.valueOf(
milliSecs.charAt(
milliSecs.length()-1)))];
returnnewQuote(
"NationalBank",rate);
}
}
窗体底端
如前所述,Web服务随机地从静态定义的两个利率表中获得利率。
由于我们的服务还需要返回银行的名称,所以我们需要创建一个能够同时存储这两个值的对象。
我们已经知道,getCurrentRate()方法能够创建并返回Quote对象。
LocalBank服务起到相同的作用,二者的不同之处在于,我们将更改列表中声明利率的顺序。
这样做可以使得在每次执行流程时,能够提供不同结果的更好机会。
这里没有必要再次执行构建LocalBank服务所需的所有步骤,只需复制NationalBank服务即可。
下面的操作步骤将指导您完成这一任务。
复制NationalBank服务:
∙ 右键单击WebService文件夹。
∙ 选择New>Folder,将文件夹命名为localbank。
∙ 右键单击NationalBankService,并选择Duplicate。
∙ 将新创建的NationalBankService1拖放到localbank目录。
∙ 将NationalBankService1重命名为LocalBankService。
∙ 更改利率表中定义利率的顺序。
∙ 将返回的名称更改为LocalBank。
∙ 执行File>Save。
设置业务流程所使用的服务的最后一步是,为每个服务创建一个WSDL文件。
通过单键右击每个服务并选择GenerateWSDLFile,可以轻松完成这一操作。
构建完服务之后,有一项最后的任务需要在构建业务流程之前完成。
在本例中,作为对客户的回应,我们的业务流程应向客户返回一个XMLBean。
所以在开始创建业务流程之前,需要通过导入该对象的架构来创建该对象。
导入架构文件
下一步是创建Schema项目,以及创建将用于向客户返回信息的XMLBean对象。
这里实际上没有必要使用XMLBean,使用JavaBean就可以完全满足要求。
但越来越多的服务和过程都开始以XML为中心,所以我感觉有必要让您领略一下XMLBean技术。
XML是以文本形式表示数据的最佳方法,也是在Internet上使用的选择的消息格式。
您很快就会看到,XMLBeanAPI在访问XML数据方面为开发人员提供了更多的控制功能。
有了XMLBean的帮助,可以使用XML架构生成表示XML的Java对象,还可以在不泄漏初始XML文档的情况下为您提供SAX和DOM类型的导航和操作功能。
在进行这一步骤之前,应按照创建Web服务项目的方法创建另一个项目。
在创建该项目时,请确保选择SchemaProject选项,并将该项目命名为Schemas。
新建项目将显示在Application选项卡中。
有了Schema项目,我们就可以仅导入XML架构,Schema项目能够根据此架构自动生成XMLBeanFactory和XMLBean对象。
您也可以在该项目中创建具有相同功能的自己的XML架构。
在本例中,我们将从清单2中导入该架构。
清单2.Schema项目允许我们导入XML架构,Schema项目能够根据此架构自动生成XMLBeanFactory和XMLBean对象。
xmlversion="1.0"?
>
schematargetNamespace= " xmlns: xsd="http: //www.w3.org/ 2001/XMLSchema"> elementname="quote"> complexType> sequence> elementname="lender" type="xsd: string"/> element name="loanAmount" type="xsd: double"/> elementname="term" type="xsd: int"/> elementname="rate" type="xsd: double"/> elementname="payment" type="xsd: double"/> sequence> complexType> element> schema> 导入Schema: ∙ 右键单击Schema项目并选择Import。 ∙ 出现ImportFiles对话框。 ∙ 定位至在清单2中存储的XMLSchema所在的位置。 ∙ 选择Import。 ∙ 请注意Schema项目自动启动了构建过程。 ∙ 构建完成之后,展开XMLBeanClasses子文件夹,检查生成的类。 至此我们完成了所有前期工作,可以着手进行业务流程的开发。 这时“应用程序”选项卡应与图1类似。 图1.在创建抵押代理业务流程中完成了准备任务之后,Application选项卡应该类似于此图。 开发业务流程 要开始构建业务流程,需要创建一个新项目。 这里我们创建一个ProcessProject,并将其命名为BrokerageProcesses。 在创建ProcessProject时,系统将在流程子文件夹下方为您创建文件名为process.jpd的流程文件。 我们将对该文件进行修改;双击该文件,以在Edit窗格中打开该文件(参见图2)。 图2.在创建ProcessProject时,系统将在流程子文件夹下方为您创建名为process.jpd的流程文件。 我们将对该文件进行修改。 下面我们看一下创建该业务流程必须执行的每个步骤。 首先我们希望客户的请求能够启动该流程。 我们还希望获得每个银行的当前利率的信息,这样我们就不必为了等待我们的服务完成操作而保持处理状态。 我们还需要对两个返回的利率值进行比较,以确定收费较低的银行,并根据返回的利率值计算每月应缴纳的费用。 最后,我们将利用计算结果构造XMLBean,并将其返回给客户。 第一步是设置客户请求。 Workshop提供了多种启动业务流程的方法。 我们希望由客户的请求来启动业务流程。 侧栏“请求和响应”能够指导您完成设置ClientRequest节点和客户响应的一系列步骤。 请求和响应 下面是设置ClientRequest和ClientResponse节点所必需的步骤。 要设置客户请求: ∙ 双击StartingEvent节点,允许您选择该流程启动的方式。 在本例中,流程是InvokedviaaClientRequest。 选择此选项,单击OK。 ∙ 注意StartingEvent更改为: 将此事件重命名为RequestQuote。 ∙ 双击RequestQuote节点。 ∙ 在GeneralSettings选项卡上,将MethodName更改为requestQuote。 ∙ 我们知道客户将输入贷款数目和期限。 使用Add…按钮添加requestQuote方法的这些参数类型。 ∙ 单击Add… ∙ 选择Java作为参数类型。 ∙ 在JavaTypes下,选择double。 ∙ 将其命名为loanAmount,参见图3。 ∙ 然后为贷款期限添加参数,这次选择int,名称为term。 ∙ 单击ReceiveData选项卡。 ∙ 注意它已经设置为接收double和int数据类型。 ∙ 在SelectVariables下赋值,选择Createnewvariable… ∙ 分别输入loanAmount和term的名称。 ∙ 注意loanAmount和term现在可以在DataPalette上的Java变量下使用了。 ∙ 单击Apply。 ∙ 单击Close。 ∙ 选择File>Save保存工作。 我们现在向前跳过一些步骤来创建客户响应,因为它将创建一个我们在处理过程中需要的成员变量。 以下步骤向您展示了如何设置客户响应。 要设置ClientResponse: ∙ 从Palette拖动ClientResponse节点, 将它直接放到GetQuote节点之后。 ∙ 将ClientResponse节点重命名为ReturnQuote。 ∙ 双击ReturnQuote节点。 ∙ 在GeneralSettings选项卡中,将MethodName更改为returnQuote。 ∙ 我们已经注意到流程将返回一个XMLBean给客户机。 使用Add…来为returnQuote方法添加这个参数类型。 ∙ 单击Add… ∙ 选择XML作为参数类型。 ∙ 在XMLTypes>Typed>quote.xsd下,选择quote。 ∙ 单击SendDatatab。 ∙ 注意它已经设置为返回一个QuoteDocument。 ∙ 在SelectVariables下赋值,选择Createnewvariable… ∙ 命名变量brokerageQuote。 . ∙ 注意brokerageQuote现在在DataPalette上的XML变量下可以使用了。 ∙ 单击Apply。 ∙ 单击Close。 ∙ 选择File>Save来保存工作。 图3.遵循与创建ClientRequest相同的步骤,显示屏幕应该类似于此图。 现在我们可以开始开发业务流程的主逻辑。 我们需要获取每个贷款银行的当前利率,可以通过依次调用相应的服务达到这一目的,在这一过程中,没有必要等待其中的一个流程结束之后才启动另一个流程,毕竟国家银行的业务量一般要比本地银行的业务量要大,并且从我们的角度看,使一个服务在另一个服务结束之后再启动并不重要,因为这些服务之间不存在相互依赖的关系。 我们可以使用Palette中的其他节点进行并行处理,以异步的方式调用每个Web服务。 该节点称为Parallel节点,侧栏“功能强大的控件”显示了该节点的操作步骤。 功能强大的控件 我们需要从每一贷款机构获得当前利率。 我们可以使用Palette中的节点来处理并行处理(称为Parallel节点),并异步地执行每一Web服务调用。 为了从Parallel节点调用服务,我们需要创建两个Web服务控件,一个用于国家银行,一个用于地方银行。 要创建Web服务控件: ∙ 在DataPalette的Controls下,选择Add。 ∙ 选择WebService。 ∙ InsertControl对话框出现(参见图4)。 ∙ 在Step1中,设置控件的变量名为nationalBankControl。 ∙ 在Step2中,选择CreateanewWebServicecontroltouse。 ∙ 设置新的JCX名称为NationalBankControl。 ∙ 在Step3中,浏览WebServices/nationalbank/NationalBankServiceContract.wsdl。 注意: 国家银行和地方银行已经公布自己的wsdl文件,我们将使用UDDI来查找这些文件。 由于我们的银行是虚构的,并且已经在本地创建,我们将使用本地文件系统中的wsdl文件。 遵循与LocalBankService相同的步骤,但这次变量名采用localBankControl,将新的JCX命名为LocalBankControl,并且浏览WebServices/localbank/LocalBankServiceContract.wsdl。 注意nationalBankControl和localBankControl都已经添加到DataPalette。 我们将在要创建的Parallel节点中使用这些控件。 要添加Parallel节点: ∙ 从Palette拖动Parallel节点, 直接放至GetQuote节点后。 ∙ 将Parallel节点重命名为GetCurrentRates。 ∙ 重命名最左边的分支为GetNationalRate。 ∙ 重命名其他分支为GetLocalRate。 ∙ 在DataPalette中展开nationalBankControl。 ∙ 将getCurrentRate方法拖动到GetCurrentRates节点的GetNationalRate分支。 ∙ 将最新创建的getCurrentRate节点重命名为GetNationalRate。 ∙ 双击GetNationalRate节点。 ∙ 注意在GeneralSettings选项卡中,nationalBankControl和getCurrentRate方法已经选中。 ∙ 选择ReceiveData选项卡。 ∙ 这次我们不进行变量选择或者创建,我们把返回的变量变换成一个QuoteDocument。 ∙ 选择Transformation。 ∙ 在Step1中,选择SelectVariable。 ∙ 选择Createnewvariable… ∙ 创建另一个QuoteDocument变量,并将它命名为nationalQuote。 ∙ 在Step2中,选择CreateTransformation。 ∙ TransformationEditor出现了。 ∙ 从SourceSchema中,将rate拖动到TargetSchemarate,并命名为lender(参见图5)。 ∙ 单击File>Save保存该变换。 ∙ 关闭变换,返回到Edit窗格中的process.jpd。 ∙ 单击Apply。 ∙ 单击Close。 ∙ 遵循与localBankControl相同的步骤。 ∙ 将getCurrentRate方法拖动到GetCurrentRates节点的GetLocalRate分支。 ∙ 将返回的变量命名为localQuote。 ∙ 单击File>Save保存该变换。 图4.InsertControl对话框用于创建Web服务控件。 窗体顶端 图5.创建parallel节点的步骤之一是拖动rate到TargetSchemarate,并将之命名为lender。 窗体底端 现在,每项服务都将创建自己的QuoteDocument。 我们可以据此比较这些利率的值,以确定其中较低的值。 可以利用Palette中的Decision节点完成这一操作。 决策节点能够根据某些条件的计算结果执行流程相应的分支。 以下是获得最低利率的方法: ∙ 将Decision节点从Palette直接拖放至GetCurrentRates节点下方。 ∙ 将该节点重命名为IsNationalLower? ∙ 将Condition分支重命名为Yes。 ∙ 将Default分支重命名为No。 ∙ 双击Yes节点。 ∙ 使Schema处于被选中状态。 ∙ 单击SelectVariable并选择nationalQuote变量。 现在应显
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 SOA 简化 业务流程