BPEL研究(4): ActiveBPEL 3.0

来源:互联网 发布:爽肤水推荐 知乎 编辑:程序博客网 时间:2024/05/21 11:20
 
ActiveBPEL引擎体系结构
ActiveBPEL 引擎执行业务流程执行语言 , 它接受 BPEL 流程的定义 , 创建流程实例 , 并执行它们 . ActiveBPEL 引擎在结构上有三个主要的方面 : 引擎 , 流程和活动 . 引擎执行相匹配的一个或多个 BPEL 流程 , 流程由活动组成 , 并按照活动的顺序或包含 LINK 执行 . ActiveBPEL 引擎根据 BPEL 流程的定义 (XML 文件 ) 创建流程实例 , 并执行这个流程。
Table of Contents
ActiveBPEL 引擎
The Engine
Figure 1. Engine Architecture
上图右边的数据库元素代表一般的持久性存储 . ActiveBPEL 引擎采用了插入式的结构 , 不同的管理器可以执行不同的存储机制 . ActiveBPEL 引擎伴有一个持续的管理者在内存中记录每件事。
Engine Startup
利用一个引擎工厂管理一个 ActiveBPEL 引擎的创建 . 应用处理服务的对象例如队列管理 , 警报和计时服务 , 流程配置使得引擎的各项职责互相分离 . 下面的代码描述了引擎工厂的创建和支撑服务。
engine = new Engine(getEngineConfigurationInfo(), createQueueManager(), createProcessStateManager()); engine.setPlanManager(createProcessDeploymentProvider()); createProcessDeploymentManager(); createWorkManager(); createAlarmAndTimerService();
引擎配置的处理是通过一个对象提供的缺省值并读取 aeEngineConfig.xml 文件 . 引擎连接一个队列管理器和一个流程状态管理器 , 对象负责执行履行那些服务给引擎 . 引擎是高度可配置的 , aeEngineConfig.xml 文件不仅描述了像缓存的大小和日志状态 , 也决定了各种管理器和处理器应用的类。
一个流程配置提供者处理读取流程配置描述 (.pdd)文件, 并且一个流程配置处理器处理流程的创建.一个工作管理器在时间上是异步操作。
Process Creation
一个新的 BPEL 流程当它的起始活动被触发时创建 , 当接收到一个消息或是一个 PICK 活动的警报时活动被触发。当传入的消息包含相关的数据 , 引擎发现已经存在的流程替换匹配的数据。当引擎读取一个 BPEL 流程定义 , 它就创建对象并调用流程模型的活动定义。
Figure 2. Runtime Engine Object Creation
活动定义包含了一个 BPEL 活动执行对象的例示所需要的所有信息 . 当执行的对象类似于类的实例化对象 , 活动定义就与类相似。
引擎和它的事件监听都访问这些定义。这些事件包含一个 Xpath 值它表示了流程中的哪个活动正在触发事件 。 这些 Xpath 的值来自活动的定义。
引擎采用访问者的模式访问活动定义对象模型来创建它的执行对象 , 并且从这个模型来创建执行对象。ActiveBPEL 引擎密封了任何关于流程构造的逻辑实现。举例来说 , 一个固有作用域的调用活动将产生一个带有外部作用域的单独的调用子活动。设计者或其他监听都不知道关于这些实现 , 因为他们只关注定义和它们的 XPATH 信息。
Input and Output
Activebpel 引擎本身并不处理输入和输出。 然而 , 协议规范处理器像 AeBpelRPCHandler 和 AeBpelDocumentHandler 把数据从一种特殊的协议转换为一种消息 ,反之亦然。
Data Handling
所有变量的实现通过 IAeVariable 接口。这个接口能够得到变量的定义和它的有效负载 , 如果变量被声明成一种相对的元素或消息 , 将会有所不同 。消息的负载需要一个和部件对象交互的接口 。
Expression Evaluation
所有活动和链接允许使用对象各种属性的表达式。 这些表达式需要一个相容的方法来执行 并描述执行的相互关系。 IaeBpelObject对象本身可以包含这些实现并能够提供继承于对象的抽象基本类.BPEL对象是它自己的作用域并且可以被用来正确的找回表达式内容的变量.赋值允许所有的XPATH扩展( for example, bpws:getVariableData )。
Debugging and Logging
在流程执行期间 ,ActiveBPEL 引擎激活流程的事件 。当日志启动 , 一个 AEEngineLogger 实例监听引擎的事件并写出每个流程的日志文件。一旦流程完成 , 文件关闭。
日志文件放在 {user.home} /AeBpelEngine/process-logs , {user.home}是java系统属性”user.home”的值.日志被命名为process-id .log , process-id 是一个由引擎给出流程的 ID号码,为了启动日志,应用 BpelAdmin配置页,( http://localhost:8080/BpelAdmin/config.jsp )
Processes
一个流程的组成 :
Partner links
描述两个 web services 之间接口关系。
Partners
参与 web service 交易的实体。
Variables
值的容器.
Correlation sets
确定业务流程唯一的一套数据 . 在流程的不同时期 , 流程可以定义不同的相关集 .
Fault handlers
描述发生问题时的处理方法 .
Compensation handlers
描述如何退回已经完成的业务流程
Event handlers
处理引入的消息和警报 .
A top-level activity
一个单独的 BPEL 活动 , 通常是一个其他活动的容器 .
Dispatching Requests
每个 BPEL 流程必须至少有一个起始活动 . 一个新的 BPEL 流程当它的起始活动被触发时创建 , 也就是一个引入消息或一个 PICK 活动的警报的到来 . 引擎分派引入的消息给正确的流程实例 . 如果有相关的数据 , 引擎就会发现正确的实例并匹配相关的数据 . 如果没有相关的数据 , 请求匹配一个新的活动 , 一个新的流程实例被创建 .
Figure 3. Request Dispatch Flowchart
Queued Receives
接收队列包含了所有流程实例的当前在执行的 RECEIVE 活动 . RECEIVE 活动包括了消息活动 , 它是 PICK 或一个事件处理的一部分 . 接收队列也包含了来自外部的绑定的消息 , 如果和队列中等待接收的活动不匹配 , 它们本身是不能创建新的流程实例 . 一个不匹配的接收数据像给出的异步的 WEB 服务 . 引擎将接收这些所提供不匹配的消息 , 它们包含了相关的数据 . 这些消息留在队列里 , 直到超时为止 . 这个时间由引擎的配置参数 UnmatchedReceiveTimeout 指定 .
如果一个流程队列的一个活动比如说一个 RECEIVE活动,它会一直保存在队列里直到数据到达或流程终止.PICK 略有不同:第一个匹配的消息或警报的到来,PICK活动立即设置其它的消息或警报的状态为DEAD_PATH.这将把它们从队列中移走.一旦定义他们的作用域完成,事件处理器会自动把它们从队列中移走.
Activities
BPEL 流程由活动的块组成 . 基本的活动从概念上是一个简单的行为如接收一个消息 , 调用一个 WEB 服务 , 赋值给变量 . 结构化的活动与带有条件或循环构造的程序语言相似 . 特殊的活动介绍了变量 , 作用域和处理正常的活动像流程终止和补偿活动 .
活动加入了 LINKS,有外部的或固有的.活动的路径和LINKS由多种因素决定,包括变量的值和表达式的值.每个活动都存在一个作用域,包括相关的变量,错误处理和补偿处理.作用域在概念上与程序语言的介绍变量的域和处理exception相似.一些活动像Scope和Invoke产生了新的作用域,外部的或是内部的.
BPEL Activities
Basic activities
Activity
Notes
<receive>
Block and wait for a message from a partner
<reply>
Reply back to the partner that sent the message we received
<invoke>
Call some other Web service, either one-way or request-response
<assign>
Assign or copy values to variables
<throw>
Generate a fault
<wait>
Wait for a given time period (time-out) or until a particular time has passed (alarm)
<empty>
A no-op
Structured activities
Activity
Notes
<sequence>
Execute children in order
<switch>
Just like a "switch" or "case" statement
<while>
Repeat an activity while a condition is true
<pick>
Block and wait for a message, time-out, or alarm
<flow>
Children are executed concurrently; links can provide additional control structure
Special activities
Activity
Notes
<scope>
Define a new scope for variables, fault handlers, and compensation handlers
<compensate>
Invoke compensation on an inner scope that has already completed normally
<terminate>
Immediately terminate a business process instance
States
每个活动都有一个相关的状态 , 这些活动进入或是退出这些状态都基于 BPEL 标准 . 活动也会触发事件 , 使得监听能够发现其状态的改变 . 有一些机制来监听这些事件 .
表示状态的常量定义在 AeBpelState中,一个活动必须是下列的状态之一:
State
Notes
INACTIVE
当流程开始的时候 , 所有 BPEL 的活动都是没有非活动的状态
All BPEL activities are in the inactive state when the Process starts
READY_TO_EXECUTE
准备执行 . 这些活动在它们的父队列里 , 它们的连接条件的值为 true.
Ready to execute. These activities have been queued by their parent and their join condition has evaluated to true
EXECUTING
正在执行 .
Currently executing
FINISHED
执行完成 , 没有出错 .
Finished executing without a fault
FAULTED
执行完成 , 出错 .
Finished executing with a fault
DEAD_PATH
由于绝对路径的消除从执行路径中移出 , 当一个父活动的状态变为 :DEAD_PATH, 这个状态会传给它所以的子活动 .
Removed from the execution path due to dead path elimination. When a parent activity's state becomes DEAD_PATH , that state is propagated to all of its children
QUEUED_BY_PARENT
父活动的执行队列 .
Queued for execution by their parents
TERMINATED
终止 .
Terminated
Unknown
活动的状态为空 . 如果一个父活动的状态变为 unkown, 它的子状态变为 INACTIVE.
The activity's state is null . If a parent activity's state becomes unknown, then the childrens' states change to INACTIVE .
 
  
ActiveBPEL的安装和配置
一、安装和配置ActiveBPEL引擎
本文档描述了如何安装ActiveBPEL引擎
(一)、依赖关系
ActiveBPEL引擎要求安装和正确的配置servlet容器。ActiveBPEL引擎的安装脚本是用作环境变量,也就是Tomcat的最上层目录。ActiveBPEL引擎应该运行在任何标准的servlet容器下。
1、下载TOMCAT 5.x (http://jakarta.apache.org/tomcat).
安装TOMCAT,并设置环境变量CATALINA_HOME。(经过测试的版本为Tomcat 5.0.25.
2、下载软件:(http://www.activebpel.org/download)
其中有两张格式a.tar.gz或者a.zip.两张格式包含的文件是相同的。文件的名字为activebpel-version-type.tar.gz activebpel-version-type.zip。版本号是:1.0.1
类型为"src" (source), "bin" (binaries), or "all" (source and binaries)。解压缩下载的文件包,会创建一个名字为activebpel-1.0.1的目录。可以重新命名,或者一动到任何地方。以下的文档中,简称这个目录为"activebpel"
 
(二)、安装ActiveBPEL引擎
1、运行脚本install.bat。它将拷贝lib下的内容到$CATALINA_HOME/shared/lib目录下,并且创建$CATALINA_HOME/bpr目录,也就是存放流程的配置文件.bpr的目录。
执行命令行如下:
Windows:
    C:/> cd /activebpel
    C:/activebpel> install.bat
2、更改引擎的配置参数
aeEngineConfig.xml文件里可以配置一些服务的参数,这个文件在$CATALINA_HOME/bpr。配置的改变是通过BpelAdmin配置页改变的,可以访问http://localhost:8080/BpelAdmin/config.jsp页,并保存配置。
3、启动ActiveBPEL引擎
启动TOMCAT,.
Windows:
C:> %CATALINA_HOME%/bin/startup.bat
4、停止引擎
关闭TOMCAT
Windows:
    C:/> %CATALINA_HOME%/bin/shutdown.bat
5、引擎的状态信息
tomcat启动后,有两个WEB页可以显示服务器的信息
Axis WEB服务列表http://localhost:8080/active-bpel/services
ActiveBPEL引擎管理http://localhost:8080/BpelAdmin/
在此页面可以修改引擎的配置参数,可查看帮助页。
 
二、ActiveBPEL(TM) 引擎的持续安装
 
(一)、要使得ActiveBPEL引擎作为一个可持续运行的引擎来,需要做以下步骤:
    1、安装数据库Sqlserver 2000和相关的正确的JDBC驱动,并且保证有权限创建数据库的表。Jdbc的驱动程序一定要到sourceforge网站去下载。下载后解压缩文件包,把其中的jtds-1.0.3.jar文件拷贝到CATALINA_HOME/common/lib下。
2、启动安装好的数据库,执行/activebpel/dist/sql/activebpel/ddl目录下的ActiveBPEL-SQLServer.sql语句,在数据库中创建名为ActiveBPEL的数据库,同时创建基本表。
3、设置Tomcat的数据源。打开%CATILINA_HOME%/conf目录下的omcat-users.xml文件,增加一个“admin”的角色,<role rolename="admin"/>,然后增加一个角色为admin的新用户。
 增加数据源的操作如下:
1)、重启Tomcat,并访问它的管理页http://localhost:8080/admin/
2)、输入用户名和密码
3)、按照以下顺序点击左侧的Frame
          Server/Service/Host/Context (/active-bpel)/Resources/Data Sources
4)、从 the list of Data Source Actions中选择 "Create New Data Source"5)、按如下数值配置 Data Source信息。(注:在此之前要确保相关的JDBC驱动已经拷贝到tomcat/common/lib  
        JNDI = jdbc/ActiveBPELDB
        Data Source URL = jdbc:jtds:sqlserver://localhost:1433/ActiveBPEL
        JDBC Driver Class = net.sourceforge.jtds.jdbc.Driver
        User Name = [db user name]
        Password = [db password]
 6)、按保存按钮,并提交(上方有一个Commit按钮)。
4、修改aeEngineconfig.xml 文件
   activebpel/dist/conf下的aeEngineConfig-Persistent.xml文件拷贝到%CATILINA_HOME%/bpr目录下,并且重命名为 aeEngineconfig.xml,原来的aeEngineconfig.xml文件则被覆盖掉。然后打开这个文件, 更改其中的一行关于数据库的信息 <entry name="DatabaseType" value="mysql" />,把value值改为sqlserver
 
5 ActiveBPEL 数据库的配置文件
为了使ActiveBPEL引擎转换到应用内存管理的模式,把/activebpel/dist/conf下的  aeEngineConfig-InMemory.xml文件拷贝到 %CATILINA_HOME%/bpr目录下。
< 注:>任何已经设置的ActiveBPEL 引擎的配置参数现在被重新设置成缺省值。
    重启tomcat,启动数据库,打开http://localhost:8080/BpelAdmin/页,在Home页可以看到一个“Start Engine”的按钮,启动引擎,当表中的statusrunning,则表示启动成功。此时,即为以一个可持续的方式启动了ActiveBPEL引擎。               
三、配置BPEL流程示例(custom_invoke流程为例)
为了配置一个BPEL流程,必须创建和安装一个包含BPEL流程文件的配置文档。
1、这里要用到jar,所以需要一个Java SDK,  任何版本都应该可以,其中经过测试的版本是1.4.1 SDK。安装Java SDK,并且配置环境变量JAVA_HOME
2、需要ant来运行build.xml文件。Ant测试过的版本为Ant Version 1.5.1。安装 ant后,设置环境变量ANT_HOME,并且要在环境变量path里增加%ANT_HOME/bin;JAVA_HOME/bin。以下的步骤假设已经安装了antCATALINA_HOME一定要定义)
,并做好相应的配置。
3、如果你的ActiveBPEL引擎安装程序不能在"localhost:8080"在运行,需要改变下列文件中的相关字符串:build.xml
       bpel_process/wsdl/loanapprover.wsdl
       bpel_process/wsdl/loanassessor.wsdl
4、配置示例中的流程
在命令行中执行以下命令:
<installdir>/activebpel-version/samples/custom_invoke/ant deploy
该命令调用了两个目标程序:deploy-bpel and deploy-cih.
deploy-bpel 创建和安装了一个包含BPEL流程信息的.bpr 文件。 deploy-cih创建和安装了一个包含custom invoke handlers.jar文件。
每次一个新的jar 拷贝到$CATALINA_HOME/shared/lib下,重启TOMCAT后可以看到它。不需要每次执行“ant deploy”命令时都重启TOMCAT,仅仅当每次deploy-cih拷贝jar文件到$CATALINA_HOME/shared/lib/下需要重启TOMCAT.这不同于重新配置一个BPR, he ActiveBPEL引擎会发现并重新装载它。
5、在客户端运行BPEL流程
运行ant client命令调用BPEL流程,可以看到运行结果。
或者访问:http://localhost:8080/bpel_example_client_page/index.jsp也可以看到运行结果。
四、配置自己的流程
BPEL的流程需要创建一个配置文档(.jar.bpr文件),并且把他们拷贝到servelet容器中.为了创建这些文件,需要组织一个特殊结构的目录,并创建一两个相应的配置文件,然后才能通过这些目录来创建文档.
创建一个目录,我们假设这个例子叫mybpel,然后按照下边的列表创建它的子目录:
    * bpel
    * META-INF
    * wsdl
    * partners (optional)
    其中wsdl目录中包含了所有定义过的WSDL文件,META-INFM目录中包含了wsdlCatalog.xml文件, partner definition目录定义了 .pdef文件..pdd为后缀的文件是流程的配置描述..
作为一个例子,在各个的目录中放入对应的文件,假设有两个WSDL的服务,BPEL的流程名字为  my_process.bpl,各目录结构如下所示:
    mybpel
        META-INF
            wsdlCatalog.xml
        bpel
            my_process.bpl
        my_process.pdd
        wsdl
            service1.wsdl
            service2.wsdl
 除非有.pdef文件,否则不需要partners目录.
 应用这个目录结构,创建文档并拷贝的到servelet容器中.下面的命令显示了如何配置BPEL流程到TOMCAT(如果没有partners目录,则把partnersjar的命令行中去掉):
Windows:
    C:/> cd mybpel
    C:/mybpel> jar cf mybpel.bpr *.pdd META-INF bpel partners wsdl
    C:/> cp mybpel.bpr $CATALINA_HOME/bpr
在配置文档中有多个.bpel.pdd文件是允许的.另外,WSDL文件可以放在任意位置,即使是另一台机器,只要把他们打包,.pdd文件中说明,BPEL引擎知道它们在哪就可以.

 ===================================================================================

注:上面两部分内容均出自部分网友。

目前我们使用ActiveBPEL3.0部署到Weblgoic8.1上,并进行了简单的测试。性能还是能够满足基本的应用。

原创粉丝点击