cancelとデータ(ビジネスプロセススコープ)

stableなver3.1.2だとタスクのキャンセルがいまいちで、jiraにものってたりする。そもそものjBPMのキャンセルの仕様範囲は、Tokenを戻す(遷移を1個前の状態にする)、プロセスコンテキストに紐づくデータを1個前の遷移の状態の時に戻す。この2つ。戻せばいい、で済まないケースもあると思うけど。
ちなみに、このプロセス変数にはserializableであれば、どんなクラスでも格納OK(察しのとおりDBにbyteで状態を保持)。このプロセス変数はプロセスインスタンスに紐づく値(=プロセス実行中に共有できる値)ということでSeamではビジネスプロセススコープとして、request,sessionとかの仲間として取り扱っている。んなもので、strutsのイメージでいうとActionでrequest,sessionに格納、取得するのと同じ扱いかたになる。

で、ユースケースによっては、プロセス変数に全部、情報を保持して、最終的に終了状態になったらドメインテーブルに更新をかけるようにすると便利なときがあると思う。これだとプロセス途中でキャンセルした場合にデータを戻すのはjBPMエンジンのお仕事。プロセス変数を利用しないでテーブルに保持すると、キャンセル時にそのテーブルに対しての削除処理の記述と実行をこっちでしないといけなくなる。(要件によってはキャンセルという状態と、そのテーブルのレコードは放置、ということでもいいのかもしれないけど)

ちなみにプロセス変数の取得はこんな感じ

ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class);
OrderDto dto = (OrderDto)contextInstance.getVariable("OrdetDto");