GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

Intalio First Impression

遅くなりました。

結論

JavaでのWEBアプリ作成経験&Webサービス開発経験(Apache Axisなどの使用経験)がないと、何がどうなっているのかさっぱりわからない。BPMN書くだけならフリーのActiveModelerを使った方がよろしいかと。動かすまでがかなり難しいが、使いこなせるようになると「ちょっとBPMインフラ動かしてみるかぁ」ってな感じでかなり俊敏にいろんなことを試す事が出来そう。

でも本気で検証しようとしたら、死ぬほどチェックポイントが多くなる悪寒が。泥臭いことばっかり思いつく。

困ったところ

  1. StrutsのようにSturts-blank.warにあたるものがない。
  2. GettingStartedなのにStep-by-Stepで構築できない。
  3. システム構成が大変わかりにくい。体で覚えるしかない。
  4. 前提となる知識レベルが複雑。BPMN〜J2EEまで幅広いスキルセットが求められる。
  5. BPELで叩くWebサービス定義を予め用意しないと、動くものは作れない。
  6. 体系だったドキュメントが無いので、全て自分でキーワードを樹形図のようにつなげで体系図を作る必要がある。
  7. プロジェクトのImportで、ファイルパスに日本語名が入るとインポートできない。ダブルバイト対応が弱い。
  8. こういう手順でアプリ作ってね、というのが無い。ほとんど全てできあがったサンプルから「逆算して」手順を作らないといけない。

Step-by-Stepについての補足

例えばStrutsとかだと、

  1. struts-blank.warを解凍。
  2. Actionクラスを作ります。
  3. それに対応するActionFormを作ります。
  4. Struts-configにActionFormとActionクラスを登録します。
  5. 画面にActionクラスを叩く記述(html:form submit action="/hoge")なんかを書く。
  6. じゃ動かしてみるか。

という流れが基本です。別にこれに従わなくても、とにかく何が必要なのかはわかりますよね。

コレに対しIntalioのチュートリアルやGettingStartedはかなり抽象的です。何があれば動くものが作れるのか、という明確な形がありません。

おそらく、

  1. BPMNでプロセス書きます。
  2. 書いたアクティビティがどういった種類のものなのかを定義します。
  3. データ構造をXMLスキーマで定義します。*1
  4. スキーマを読み込ませて、アクティビティ間のデータマッピングをXpathで行います。*2
  5. WSDLを作って、Webサービスを定義します。
  6. Webサービスのどの機能を叩くかを定義します。
  7. ポチッとな。デプロイ。
  8. 管理コンソールにアクセス。
  9. 対象のプロセスを試しにinvokeして、動作確認。

って流れ。

でもそんなことどこにも書いてない。成果物から逆算して、構成要素に分解して、とりあえず並べてみただけ。

デプロイって食えますか?ってヒトがIntalioを試すのはまず無理。デプロイするのはサーバーに接続さえできればエラーなくできるっぽいんだけど、いざ動かしてみた時にエラーがでたら、技術分からないとどうしようもなくなる。帰って寝るか状態。

単なるHelloWorldですら、WEBサービスとデータマッピングが必要になっている。サンプルがあるんですけど、HelloWorldで定義しているのはデータマッピングの定義だけ。実際にはどこのWebサービスをアクセスするわけではないのに。こういう形で開発してアーカイブ出来るようにしないと動かないよ、という形がすごい見えにくい。

BPELはWebサービスしか理解できない

BPELの最大の弱点だと思うのが、「Webサービスしか理解できない」こと。BPELでフロー制御できるのはWebサービスだけなんだよね。例えば「A⇒B⇒C」というフローがあって、BはとあるJavaビジネスロジックを叩く、CはWebサービスを叩くっていうのができないんだね、これが。一時期BpelJとかいう、BPELの中に直接Javaのコードを埋め込む仕様が出てきたんだけど、今どうなったのかしら。直接埋めるんじゃなくて、1つFacadeクラスみたいなの用意してそいつが公開しているpublicな関数を叩く、ってことが標準仕様になってくれればすげぇアツイ。それを実現するのにサーバーローカルでWebサービス立ち上げてやるんです、っていう話になったりするかも。パワープレイだな…。

Intalioなら出来るかと思ってかなり期待してるんだけど、まだ未確認です。業務の片手間でやっているので…。

良いところ

  1. ボタン一発でデプロイできるところ。確かにone-click-deployが可能。
  2. BPMNを変更すればアプリケーションまでシームレスに変更ができる。
  3. サンプルが豊富。
  4. 業務プロセスと実行環境がセットになっているのは嬉しい。

まだこのBPMSの仕組みがよくわかってないので、断片的なメリットしかわかってません…。

Chained Execution

サンプルがあったので見てみました。

http://bpms.intalio.com/content/view/115/83/

Chained Executionというのは、IBMBPEL拡張であるBPEL4People(人間系のタスクを加味したBPEL拡張)に定義されているもので、「同じ人間が行う一連の作業」のことだそうです。bpel4Peopleの仕様書は以下URLよりDLできます。

http://www-128.ibm.com/developerworks/webservices/library/specification/ws-bpel4people/

Intalioのサンプルでは、ショップに訪れたお客さんが非連続的に「製品を選択する⇒住所を記入する⇒支払い情報(クレジットカードの情報)を入力し買い物を終える」という流れになっています。人間がキックして始めて前に進む作業を全体としてひとつのトランザクションとして管理したいという場合、それを「Chained Execution」と呼ぶようです。
さっきの話に戻りますが、こんなのWebサービス経由する必要全く無い場合が殆どだと思う。単なるWEBアプリじゃん。ただDBに値突っ込むだけのフローなのに。単一のあるシステムの中で上記機能を全て満たせることが多いはず。BPMSの中にビジネスロジックを持たせることができれば、BPMNがダイレクトにWEBアプリになってできる幅がぐっと広がるはず。

ただIntalioの場合はTaskIDというIDを常に渡しておかないと、どのユーザーがどんな注文を投げたか管理できないようなので、そこのデータマッピングだけは忘れてはならない的なことが書いてありました。

これで答えになってますでしょうか? >> tomsawadaさん

今後のActionPlan

って、本気でIntalio解剖しようとすると、2ヶ月はかかりそうです。

ざっと思いつくところでも、

  • どういうアーキテクチャなのか調べてみましょう。
  • とはいってもまずは環境をつくりましょう。
  • 簡単なフローを作って動かしてみましょう。
  • 普通のJavaを叩けるか試してみましょう。
  • 自前でWebサービス立ち上げてWSDL作って動かしてみましょう。
  • つーかWSDLの生成ってちまちま手で作るしかないのか考えて見ましょう。
  • Axis2発立ち上げて、2つのWebサービスを経由してみましょう。
  • トランザクション管理ができるかどうか試してみましょう。2フェーズコミットは無問題?
  • 既存システムの一部の機能をWebサービス化して、DBにつっこめるかどうか試しましょう。
  • IntalioのBPMSは別のプラットフォーム(TomcatとかWebSphere)で動くのか試してみましょう。
  • 人間系のタスクを試してみましょう。Chained Executionをやってみましょう。
  • 今ある画面からBPMSをキックしてみましょう。(JSPからフローを叩くとか)
  • ついでだからStrutsと連携とかできるのか試してみましょう。
  • WSDLがないと先に進めないのか試してみましょう。
  • いちいちXSD定義するのめんどいんでマクロとかで自動生成したほうがいいからマクロ作りましょう。
  • データマッピングがめんどいので、マッピングをロジック化したい。それは可能なのか確認しましょう。

泥臭いことばっかり・・・・orz

あわせて読みたい

Webサービス関連技術が良くまとまっているのがこの記事。全体感をつかみたい方にオススメ。

*1:.NETでXSD読み込ませてDataSetの柄を作るのと同じイメージ

*2:実際にはGUIでやる