BPEL研究(4): ActiveBPEL 3.0

 
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” 的按钮,启动引擎,当表中的 status running, 则表示启动成功。此时,即为以一个可持续的方式启动了 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 。以下的步骤假设已经安装了 ant CATALINA_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 目录 , 则把 partners jar 的命令行中去掉 ):
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上,并进行了简单的测试。性能还是能够满足基本的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值