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
Structured activities
Special activities
States
每个活动都有一个相关的状态 , 这些活动进入或是退出这些状态都基于 BPEL 标准 . 活动也会触发事件 , 使得监听能够发现其状态的改变 . 有一些机制来监听这些事件 .
表示状态的常量定义在 AeBpelState中,一个活动必须是下列的状态之一:
|
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上,并进行了简单的测试。性能还是能够满足基本的应用。