1.1. ワークフローと BPM

ワークフローとは「業務における一連の作業の流れ」のことです。ワークフローを考えることで、一連の作業をより効率的に行うことができます。

最近ではワークフローという言葉の代わりに BPM(Business Process Modeling)という言葉が使われるようになってきました。どちらも作業の流れを形式化し、作業効率を高めるための考え方である点では同じです。ワークフローは BPM の一部(BPM の方が上位レベル)であるという考え方もありますが、本稿ではワークフローと BPM という言葉をあまり厳密に区別せずに使用します。

以下に簡単なワークフローの例を示します:

  1. 部下が書類を作成する
  2. 部下は作成した書類を上司に提出する
  3. 上司は提出された書類に目を通し、承認/非承認を決める

業務でありがちな作業ですが、このワークフローの中で「書類」というオブジェクトが扱われていることに注意してください。また、より上位レベルの(企業活動全体に関わる)ワークフローを考えることもできます。

昨今のシステム開発の現状を見ると、設計技法や開発技法についてはある程度確立されてきた感があります。しかし、フロー制御という観点が必要なシステムに対する方法論は広く浸透しているとは言えないというのが現状です。フロー制御が必要なシステムに対して有効となるのがワークフローや BPM という考え方です。

1.2. プロセス指向アーキテクチャ

ワークフローや BPM という考え方は決して万能なものではなく、考える対象によって向き/不向きがあります。どのような対象に向いているのかというと「プロセス指向アーキテクチャ」というものです。プロセス指向アーキテクチャは以下のような特徴を持ちます:

  • 長時間実行されるが、ほとんどは休止状態である
  • イベントに対して短時間の処理を行う(イベント・ドリブンである)
  • 状態が永続化される
  • 複数システムが強調して動作する

ここに挙げた特徴を全て備えている必要はありませんが、「1.4. モデリング」にあるような「箱と矢印」の図で描くことができなければ、ワークフローや BPM という考え方には向いていないと考えられます。

ワークフローや BPM という考え方に向いている例としては、旅行の予約システムや商品の注文システムなどが考えられます。どちらの場合も、全ての処理が完結するまでにはある程度の時間(ときには数日)かかりますし、その間には「申し込み」や「ホテルの手配の完了」、「配達の完了」などのイベントが含まれます。

1.3. ワークフローや BPM の標準

ワークフローや BPM の標準化団体はいくつかあり、それぞれがワークフローや BPM の標準を制定しています。以下に主な標準化団体と、それぞれが制定しているワークフローやビジネス・プロセスのモデリング記法と定義言語を示します:

標準化団体 モデリング記法 定義言語
WfMC なし XPDL
BPMI BPMN BPML
OASIS なし BPEL(BPEL4WS)

「モデリング記法」はモデリングを行うときの図の描き方、「定義言語」はモデリングを行った結果をファイルに保存するときなどに使用する形式のことを表します。定義言語については各団体とも標準を定めていますが、モデリング記法については WfMC と OASIS では制定していません。現状では複数の団体が競合する標準を制定しているなどの問題もありますが、各団体は互いに無関係というわけではありません。例えば BPMI は WfMC や OASIS のメンバーになっており、自身が持たない標準に関する議論にも参加しています。今後、競合する標準に関して整理が行われることが望まれます。

定義言語に関して、OASIS は自身が提唱する BPML(Business Process Modeling Language)よりも BPEL(Business Process Execution Language)の方が優位であると認めています。そのため、定義言語に関しては XPDL(XML Process Definition Language) と BPEL の二つが競合していると考えても良いでしょう。BPEL は BPEL4WS(Business Process Execution Language for Web Servicies)の略であり、Web サービスを意識した標準 であることが XPDL との違いです。なお本稿で紹介する Buri は XPDL を扱います。

1.4. モデリング

通常、モデリングは専用のモデリング・ツールを使用して行います。図の描き方(表示の仕方)はモデリング・ツールによって異なりますが、基本的な部分は似通っており、以下のように「箱と矢印」で処理の流れを表します:

この画像は JaWE というモデリング・ツール(ワークフロー・エディタ)の実行画面の一部です。JaWE は Buri が扱う XPDL 形式での保存に対応しているため、Buri で開発するときに主に使用されます。JaWE については実際に開発を行うときに改めて解説します。

1.5. ワークフロー・パターン

GoF(Gang of Four)と呼ばれる 4 人の人物が、ソフトウェア開発におけるよくある形に名前を与え「デザイン・パターン」としてカタログ化しました。これによってソフトウェア開発におけるノウハウをパターンとしてまとめ、知識を共有しよう、共通の語彙としようという流れが生まれました。ワークフローの世界でも P4(Process Four)と呼ばれる 4 人によって、一般的なワークフローの形が「ワークフロー・パターン」としてカタログ化されています。P4 によるワークフローのパターンは全部で 20 種類あり、以下に示す 6 カテゴリに分類されています:

  • 基本制御パターン(Basic Control Patterns)
  • 先進的分岐と同期のパターン(Advanced Branching and Synchronization Patterns)
  • 構造のパターン(Structural Patterns)
  • 複数インスタンスのパターン(Patterns Involving Multiple Instances)
  • 状態に基づくパターン(State-based patterns)
  • キャンセルに関するパターン(Cancellation Patterns)

ワークフローという言葉はよく使われるものですが、P4 による分類を見るとワークフローにも多くのパターンがあることが分かります。Workflow Patterns のサイト では、彼らの分類するワークフロー・パターンの Flash アニメーションが公開されていますので、視覚的に理解することができます。

1.6. ワークフロー・エンジン

ここまでの説明で、ワークフローや BPM の有用性については理解していただけたと思います。BPM によるモデリングを行った後は、成果物である BPEL や XPDL を元にしてシステム開発に利用することができます。その場合、モデリング結果を参照しながら手作業でコーディングを行うのではなく、ワークフロー・エンジンというものを導入すると便利です。

ワークフロー・エンジンとは、与えられたワークフローの定義に従ってフロー制御を行うことを専門とする実行エンジンです。実行するワークフローの与え方はワークフロー・エンジンによって異なりますが、通常は BPEL や XPDL などの定義言語で記述されたファイルが利用されます。

ワークフロー・エンジンを導入することの利点は、フロー制御に関する部分を全てエンジン側に任せることができる点にあります。ワークフロー・エンジンを導入せずに独自にフロー制御処理を記述するとなると、どうしてもその場しのぎのコードを書いてしまいがちです。そうでないとしても、フロー制御のコードには以下に挙げる点が必要となります:

  • プログラム中にフロー制御のための条件分岐が必要
    - オブジェクトがワークフロー上のどこにあるのか判定するための条件分岐、次の遷移先を決定するための条件分岐が大量に必要となります。これによってプログラム全体が複雑になるだけでなく、アプリケーションが変更に対して非常に脆くなってしまいます。
  • オブジェクトに状態用の情報が必要
    - フロー制御を行うには、そこで管理するオブジェクトの状態も管理しなければなりません。そのための状態管理用の情報をオブジェクトに追加しなければならず、オブジェクトが複雑になります。
  • RDB のテーブルに状態用のカラムが必要
    - ワークフロー上のオブジェクトは、アプリケーションの終了とともに永続化されます。RDB によって永続化を行う場合は、テーブルの定義にオブジェクトに追加した状態管理用の情報のためのカラムを追加しなければなりません。

ワークフロー・エンジンを導入すると、フロー制御のための大量の条件分岐を一掃することができます。オブジェクトの定義から状態管理用の情報も不要となるため、ワークフローで管理するオブジェクトがステートレス(状態を持たない)となり、プログラムが簡素になります。また、ワークフロー・エンジンによってフロー制御部分が切り離されることによって、ワークフローの変更という上位レベルの変更に対して柔軟に対応することができます。

まとめ

今回は一般的に使われるワークフローという言葉の再確認から、BPM やワークフロー・パターンの説明、そして BPM の結果を積極的に活用する一つの方法であるワークフロー・エンジンの説明を行いました。要点をまとめると次の通りです:

  • ワークフローや BPM という考え方はプロセス指向アーキテクチャに向いている
  • ワークフローは BPEL や XPDL 形式で保存する
  • デザイン・パターンのようにワークフローにもプロセス・パターンというものがある
  • ワークフロー・エンジンによって手作業のコーディングを最小限に抑えることができる

次回は、ワークフロー・エンジンである Buri の説明に入ります。Buri の導入やサンプル・プログラムの実行までを行います。

Seasar サイトマップ相关推荐

  1. seasar一般性配置

    http://www.masatom.in/pukiwiki/?cmd=read&page=Java%2FSeasar2&word=seasar seasar一般性配置: diconフ ...

  2. ClassLoader知识收集

    阅读提示: 全文认真阅读大约需要1个半小时时间,如果你需要在IDE中验证并理解,大约需要3个小时,如果你想自己写个类似的类加载器并调试,估计还需要3个小时. 该知识点的掌握检测与否,你可以尝试其回答J ...

  3. 深入理解Java类加载器:Java类加载原理解析

    http://blog.csdn.net/zhoudaxia/article/details/35824249 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpi ...

  4. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

    转载自 深入JVM系列(三)之类加载.类加载器.双亲委派机制与常见问题 一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用 ...

  5. 2012 依赖注入框架

    以下内容来自维基百科的控制反转词条 控制反转(英语:Inversion of control,缩写为IoC),也叫做依赖注入(Dependency Injection,简称DI),是面向对象编程中的一 ...

  6. Java classLoader【转】

    jvm classLoader architecture : a, Bootstrap ClassLoader/启动类加载器 主要负责jdk_home/lib目录下的核心 api 或 -Xbootcl ...

  7. mayaa的一些代码

    1字符串比较问题. 字符串比较这么写是不行的 <m:if id="delconfirm" test="${topicinfo.getMember_id() == U ...

  8. java的dicon文件_配置文件参考

    SAStruts使用的配置文件说明. web.xml Servlet容器用的配置文件,放置在WEB-INF目录下.sa-struts-tutorial工程放置在webapp/WEB-INF目录下. x ...

  9. python优点是代码库支持、灵活_Google将限制Python语言的应用 开发社区热议

    10 楼 seasar 2009-11-17 22:43 本来做一个勤勤恳恳的码农我应该学习佩雷尔曼前辈的作风 --- "佩雷尔曼反复说他已经退出了数学界,不再认为自己是职业数学家了.&qu ...

最新文章

  1. 配置中心Apollo的设计原理
  2. ES6数组的解构赋值( 中)
  3. .Net面试题(1)
  4. 白话tensorflow分布式部署和开发
  5. 技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...
  6. 疯狂软件mysql视频_疯狂软件MySql视频
  7. 2d绘制 c# dx_C# 从零开始写 SharpDx 应用 绘制基础图形
  8. 关于面试 | 面试官
  9. MATLAB函数 zp2tf详解
  10. 关于 java jdk 环境变量的配置
  11. 利用python进行数据分析—四、Numpy基础:数组与向量化计算
  12. exe反编译为py文件
  13. 安卓屏幕朗读app_安卓车机后装苹果CarPlay盒子的自动化分享
  14. python-opencv图像处理之车牌识别+区域划分+车牌提取+保存图片(2)
  15. provisional headers are shown问题排查
  16. 大白话图文结合的方式讲解什么是CAP
  17. Spring Boot整合Redis缓存(Lettuce)
  18. 人生是什么?感悟3:工作不是生活的全部
  19. 【iMessage苹果相册推】CSR邮箱必须与证书分属的AppID相同。 若是您可以在步伐中吸取令牌,则此步伐是成功的。
  20. 2021-05-19:java 中 keyset排序

热门文章

  1. URL包含两个斜杆导致过滤器报错
  2. [PHB]FDN开启后手机仍然能够上网 - MTK物联网在线解答 - 技术论坛
  3. 7-12 然后是几点
  4. 4K高清无损信号传输 电影院级别的视听盛宴
  5. “智慧交通”能否为治理城市拥堵开出新“药方”?
  6. 视频驱动芯片SGM9116的使用
  7. bootstrap tips
  8. ing在写作中到底怎么用
  9. 短视频运营推广有何意义?如何进行短视频推广?
  10. 小雉系统U盘安装包制作