Java 人生

java (Java EE)&Linux

BlogJava 首页 新随笔 联系 聚合 管理
  15 Posts :: 2 Stories :: 5 Comments :: 0 Trackbacks

2006年10月21日 #

 

BPEL的概念

      BPEL(Business Process Execution Language)又叫BPEL4WS(Business Process Execution Language For Web Service),面向Web服務的業務流程執行語言。是一種使用Web服務定義和執行業務流程的語言。BPEL提供了一種相對簡單易懂的方法,可將多個WEB服務組合到一個新的復合服務(稱作業務流程)中。

      BPEL本身是一個Web服務,可以作為服務的提供者。

      BPEL是基於Web服務的,沒有Web服務就沒有BPEL


  

 BPEL
的運作方式


 BPEL的一般構成

      一個以bpel為後綴的文件(例如MyFlow.bpel)

      一個WSDL文件

      一個部置XML文件,樣子形似bpel.xml

 BPEL的實現需求

      需要熟悉單個的Web Service的使用方法

      需要了解具體的業務流程

      需要一個運行BPEL的處理器

      需要一個流程設計器

      當然需要對BPEL語法標簽的掌握等

8.6 BPEL的結構

BPEL的一般結構

            <process>

              <partnerLinks>

                <partnerLink>

                </partnerLink>

              </partnerLinks>

              <variables>

                <variable/>

              </variables>

              <faultHandlers>   

              </faultHandlers>

              <sequence>

                  Activities

              </sequence>

            </process>

<process>的屬性

<process name="ncname" targetNamespace="uri"

         queryLanguage="anyURI"?

         expressionLanguage="anyURI"?

         suppressJoinFailure="yes|no"?

         enableInstanceCompensation="yes|no"?

         abstractProcess="yes|no"?         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

.

.

</process>

<partnerLinks>樣式

<partnerLinks>

    <!– 注意:至少要指定一個角色. -->

    <partnerLink name="ncname"

                         partnerLinkType="qname"

                         myRole="ncname“

                         partnerRole="ncname">

    </partnerLink>

 </partnerLinks>

<variables>樣式

<variables>

    <variable name="ncname"  

                    messageType="qname/>

 </variables>

<faultHandlers>樣式

<faultHandlers>

 <catch faultName="qname“

             faultVariable="ncname">

      activity

    </catch>

    <catchAll>

      activity

    </catchAll>

 </faultHandlers>

Activities包含具體如下

            <receive>

            <reply>

            <invoke>

            <assign>

            <throw>

            <terminate>

            <wait>

            <empty>

            <sequence>

            <switch>

            <while>

            <pick>

            <flow>

            <scope>

            <compensate>

基本活動一

            <invoke>

– 調用某個 Web 服務上的操作

            <receive>

– 等待一條消息來回應由某人從外部進行調用的服務介面的操作

            <reply>

– 生成輸入/輸出操作的回應

            <wait>

– 等待一段時間

基本活動二

            <assign>

– 把資料從一個地方複製到另一個地方

            <throw>

– 指明某個地方出錯了

            <terminate>

– 終止整個服務實例

            <empty>

– 什麽也不做

結構化活動

            <sequence>

– 定義一組步驟的有序序列

            <switch>

– 使用現在常見的“case-statement”辦法來産生分支

            <while>

– 定義一個迴圈

            <pick>

– 執行幾條可選路徑中的一條

            <flow>

– 以及指明一組步驟應該並行地執行

一個完整的簡單示例

<process name="test" targetNamespace="http://acm.org/samples"

               suppressJoinFailure="yes"

               xmlns:tns="http://acm.org/samples"

               xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"

               xmlns:bpelx="http://schemas.oracle.com/bpel/extension"

               xmlns:ora="http://schemas.oracle.com/xpath/extension"

               xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

   <partnerLinks>

   <!-- The 'client' role represents the requester of this service. -->

      <partnerLink name="client" partnerLinkType="tns:test" myRole="testProvider"/>

   </partnerLinks>

   <variables>

      <variable name="input" messageType="tns:testRequestMessage"/>

      <variable name="output" messageType="tns:testResponseMessage"/>

   </variables>

   <sequence name="main">

      <receive name="receiveInput" partnerLink="client" portType="tns:test" operation="process" variable="input" createInstance="yes"/>

      <assign name="creatReturnStr">

         <copy>

            <from expression="concat(&quot;Hello&quot;, bpws:getVariableData('input','payload','/tns:testRequest/tns:input'))"></from>

            <to variable="output" part="payload" query="/tns:testResponse/tns:result"/>

         </copy>

      </assign>

      <reply name="replyOutput" partnerLink="client" portType="tns:test" operation="process" variable="output"/>

   </sequence>

</process>

posted @ 2007-09-14 08:51 jinmy liao 阅读(477) | 评论 (0)编辑 收藏

配置說明

程序名稱

JBoss ESB

數據庫路徑和名稱

222.118.20.108\jbossesb

程序的文件構成說明

1)       Jboss4.0.4GA (contain Ejb3.0)

2)       jbossesb-4.0Beta1MP1    

2.1 jbossesb-appl.ear

2.2 jbossEsb.properties

2.3 JBossESB-ds.xml

2.4 properties-service.xml

2.5 ObjStore.xml

配置步驟如下 :

  1. jbossesb-appl.ear 復制到 <JBoss-home>/server/default/deploy
  2. properties-service.xml 復制到 <Jboss-home>/server/default/deploy
  3. 復制 Jbossesb.properties <Jboss-home>/server/default/conf
  4. 編輯 JBossESB-ds.xml
  5. 復制 JbossESB-ds.xml <JBoss-home>/server/default/deploy

 

運行條件和配置說明

運行平台和條件

Windows

Linux

數據源配置

1)數據源配置在JBossESB-ds.xml文件配置,詳細信息如下:

<datasources>

  <local-tx-datasource>

    <jndi-name>JBossESBDS</jndi-name>

 

    <connection-url>jdbc:jtds:sqlserver://222.118.20.108;DatabaseName=jbossesb</connection-url>

    <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>

    <user-name>dbname</user-name>

    <password>access</password>

 

    <min-pool-size>10</min-pool-size>

    <max-pool-size>100</max-pool-size>

    <blocking-timeout-millis>1000</blocking-timeout-millis>

    <idle-timeout-minutes>5</idle-timeout-minutes>

 

  </local-tx-datasource>

 

</datasources>

2.修改jbossEsb.properties文件:

org.jboss.soa.esb.mail.smtp.host=www.163.com

org.jboss.soa.esb.mail.smtp.port=23

org.jboss.soa.esb.mail.smtp.user=ejinmy

org.jboss.soa.esb.mail.smtp.password=123456789abc

 

 

#

# Object Store Settings

#

org.jboss.soa.esb.objStore.configfile=file:/e:/temp/ObjStore.xml

程序運行配置

必需是 JBoss .4.0.4 版本,還要支持 EJB3.0

運行 JBoss App Server 就啟動了 JBoss ESB.

其它說明

數據庫表(script)

CREATE TABLE batches (

    batch_num int NOT NULL,

    seq integer NOT NULL,

    data varchar,

    CONSTRAINT batches_pk PRIMARY KEY (batch_num,seq)

);

 

 

CREATE TABLE object_snap (

    uid int NOT NULL,

    stamp int,

    snap_type varchar,

    object_uid int,

    batch_num int,

    xml_data varchar,

    CONSTRAINT object_snap_pk PRIMARY KEY (uid)

);

 

 

CREATE TABLE people_index (

    uid bigint NOT NULL,

    stamp int,

    latest_snap_uid int,

    latest_snap_date varchar,

    name varchar,

    phone varchar,

    address varchar,

    CONSTRAINT people_index_pk PRIMARY KEY (uid)

);

 

 

CREATE TABLE uid_table (

    uid integer NOT NULL,

    sequence_name varchar NOT NULL,

    last_used_uid bigint NOT NULL,

    CONSTRAINT uid_table_pk PRIMARY KEY (uid)

);

 

 

INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (1, 'jbossEsb_objuid', 10500000);

INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (2, 'jbossEsb_batchuid', 251000);

   

此文檔是配置安裝JBOSS ESB的步驟說明書.

 

填寫日期: 2006/10/18      填寫人:      jinmy     
  更新日期:

 

 

有使用JBoss ESB的可以一起探討,QQ:182529178
posted @ 2006-10-21 14:20 jinmy liao 阅读(2318) | 评论 (1)编辑 收藏