jBPM6+Java EE 6 ベースのサンプルアプリケーション

もう半年以上前の話になるのですが、仕事でワークフローエンジンjBPM6のベータ版と、JBoss AS7の組み合わせを使う必要があって、自分でも独自に検証していました。その過程を書いておかないと忘れそうな気がするのでここに記します。思い出しながら書くので記憶違いがあるかもしれませんがご容赦を。

用意するもの

Java EE 6対応のアプリケーションサーバRDBMS,それにjBPMのランタイムライブラリです。上記ソースコードJBoss AS 7 + MySQLで動くようにしています。他の組み合わせを使う場合、 src/main/resources/META-INF/persistence.xml においてJPAプロバイダの設定を書き換える必要があります。
また、jBPMのランタイムについてはMavenで取得するようなpomを書いてやるとよいと思います。(手間だったので本稿の時点では作っていませんが、仕事のほうではそうしました)

jBPMのバージョン

6.0.0 beta5 で検証したのが最後だった気がします。その後、6.1系も出てきているようなので今でもちゃんと動くのかどうか不明です。

jBPM5から6に変わるときは、多くの非互換な変更が行われ、そのため5ベースで書いていたコードは大幅な書き直しが必要でした。今はそうなっていないことを祈るばかりです。

あとbetaだからか動作自体にも色々不安定なところもありました。例:
https://community.jboss.org/thread/230840

要素技術の説明

サンプルではJava EE 6のServlet, CDI, JPA, EJBを使っています。なぜCDI/JPA/EJBを使うのか?と思われる方もいるかもしれませんが、少なくともjBPM6 betaの段階では、jBPMのライブラリ自体が、CDIJPAを使うことが前提とされているか、その組み合わせでしかテストされていないのではないかといった具合だったので、使わざるを得なかったというのが実態です。

また、Servletにしていますが、本例のような場合は、どうせJava EE 6に依存するのだから、いっそJAX-RSを使うのがよいです。 ただしJAX-RSだと、私の記憶が正しければ、Servletと異なりJAX-RSのリソースとCDIの組み合わせでは、トランザクションの面倒を見てくれません。トランザクション境界を構成するには、「JAX-RSのリソースであり、なおかつステートレスセッションBeanでもある」ようなクラスとして作成する必要があります。

Javaから離れて半年以上経つので忘れちゃったけど、そんな感じでやっていた気がします。

おまけ

ワークフローの図をエンジンに読み込ませるのにBPMNという仕様を使うのですが、jBPMではそのBPMNのグラフィカルなエディタも作られていました。

当初はGEFベースのEclipseプラグインとして作られていたのですが、紆余曲折あってエディタ機能はWebアプリ化されたり別実装になったりして、従来からあったプラグインは今後積極的に開発されないことになっていました。(その後どうなったのかは追っていません。)

このEclipseプラグインを仕事で大幅に改造したのですが、その過程でわかったことは、このプラグインにせよ、その後継とすべく開発されているWebベースのエディタにせよ、BPMN仕様の解釈を間違っている部分があるのではないか?ということです。具体的には以下です。
https://community.jboss.org/thread/228192
これ回答ないのですがやはりおかしい。おかしいがBPMNの相互運用性で困る人がいないので、放置されているのが現状なんだと思われます。