Apache ODE - 如何启动已部署的进程

时间:2013-05-17 17:19:58

标签: java bpel apache-ode

我创建了以下BPEL脚本。

<?xml version="1.0" encoding="utf-8" ?>
<process name="ProcessInvoice"
    targetNamespace="http://invoiceregistry.me.cz/"
    xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:invrwsdl="http://invoiceregistry.me.cz/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
    expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">

    <import
        location="InvoiceRegistryWS.wsdl"
        namespace="http://invoiceregistry.me.cz/"
        importType="http://schemas.xmlsoap.org/wsdl/" />

    <partnerLinks>
        <partnerLink 
            name="InvoiceRegistryPartnerLink" 
            partnerLinkType="invrwsdl:InvoiceRegistryPartnerLinkType" 
            partnerRole="InvoiceRegistryServiceRole" />
    </partnerLinks>

    <variables>
        <variable name="newInvoice" messageType="invrwsdl:insertNewInvoice" />
        <variable name="response" messageType="invrwsdl:insertNewInvoiceResponse" />
    </variables>

    <sequence>
        <assign name="PrepareInsertNewInvoiceRequest">
            <copy>
                <from>
                    <literal>
                        <invoice>
                            <buyerId>entity-02</buyerId>
                            <sellerId>entity-03</sellerId>
                            <price>
                                <currency>CZK</currency>
                                <value>1000000</value>
                            </price>
                        </invoice>
                    </literal>
                </from>
                <to variable="newInvoice" part="parameters" />
            </copy>
        </assign>

      <invoke
            name="InsertNewInvoice"
            partnerLink="InvoiceRegistryPartnerLink"
            operation="insertNewInvoice"
            inputVariable="newInvoice"
            outputVariable="response" />

    </sequence>

</process>

我终于成功地部署到我的本地Apache ODE(在Tomcat上运行)安装。

现在我想知道如何让这个过程开始。以下URL地址:

http://localhost:8080/ode/processes/ProcessInvoice?wsdl

返回以下错误消息:

Requested resource not found!

我在哪里可以找到WSDL文件?除了手动向其发送SOAP消息之外,还有其他方法可以启动该过程吗?

1 个答案:

答案 0 :(得分:1)

  

除了手动发送SOAP之外,还有其他方法可以启动该过程   消息呢?

不,没有。每个流程都需要一个启动活动。我想知道为什么ODE首先部署你的进程,但可能原因是,为什么没有WSDL。引用the BPEL spec., section 5.5

  

在WS-BPEL中创建流程实例始终是隐式的;   接收消息的活动(即<receive>活动和   <pick>个活动)可以注释以表明发生   该活动导致业务流程的新实例   创建。这是通过设置此类的createInstance属性来完成的   “是”的活动....   开始活动是使用a注释的<receive><pick>活动   createInstance="yes"属性。 [SA00015]每个可执行的业务   进程必须包含至少一个开始活动...

因此,您应该在receive之前加入assign活动。要使其工作,您还需要一个入站(myRolepartnerLink。这是您的流程正在实施的界面。看起来应该是这样的:

<partnerLinks>
       <partnerLink 
            name="InvoiceRegistryPartnerLink" ... />
        <partnerLink 
            name="MyRolePartnerLink" 
            partnerLinkType="invrwsdl:MyRolePartnerLinkType" 
            myRole="BPELServiceRole" />
</partnerLinks>
...
<receive partnerLink="MyRolePartnerLink" portType="MyPortType" operation="SomeStartingOperation" createInstance="yes" />
...

如果您的流程已经实施了WSDL,那么只需要替换portTypeoperation名称等。如果您还没有,您可能还需要定义partnerLink已经做到了。