こんにちは、平田です。
jBPMにはメール送信機能が統合されており、例えば担当者宛にタスクが追加された旨のメールを送信することが簡単にできます。
これをRSSのようなフィードとして配信してみます。
フィード配信はサーブレットとして実装しました。
また、フィード生成には、ROMEを使いました。フォーマットに中立なビルダ、といった趣のAPIで配信も購読もいけるナイスガイです。
public class AllTasksFeedsServlet extends HttpServlet {
@Override
protected void doGet(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String actorId = request.getParameter("actorId");
JbpmContext context = openJbpmContext();
try {
// 指定された担当者のタスクを検索する
List tasks = context.getTaskList(actorId);
// タスクを元にフィードを生成する
List entries = new ArrayList();
for (TaskInstance each : tasks) {
SyndEntry entry = new SyndEntryImpl();
entry.setTitle(MessageFormat.format("{0}タスク", each.getName()));
entry.setLink("当該タスク画面へのURI...");
entry.setPublishedDate(each.getCreate());
entries.add(entry);
}
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType("rss_1.0");
feed.setTitle(MessageFormat.format("{0}さんのjBPM タスク", actorId));
feed.setLink("システムへのURI...");
feed.setDescription("jBPMタスクのフィードを配信するサンプルです。");
feed.setEntries(entries);
// フィードを返す
sendFeed(feed, response);
} finally {
context.close();
}
}
void sendFeed(SyndFeed feed, HttpServletResponse response) throws IOException, ServletException {
try {
response.setContentType("text/xml;charset=UTF-8");
new SyndFeedOutput().output(feed, response.getWriter());
} catch (FeedException e) {
throw new ServletException("フィードの生成に失敗しました。", e);
}
}
JbpmContext openJbpmContext() {
return JbpmConfiguration.getInstance("jbpm.cfg.xml").createJbpmContext();
}
}サーブレットを動かすと、フィードリーダーでjBPMタスクを受信できます。以下は、Firefoxのライブブックマークで受信した様子です。

フィードリーダーで受信したjBPMタスク
このサンプルではリクエストパラメータで担当者を指定しましたが、実際の業務システムでは認証情報から担当者のアクターIDを取得することになるでしょう。
また、フィードの購読者が多い場合、リクエストのたびに動的に生成するよりは、タスクが追加される際にフィードのファイルを更新した方がサーバに優しい実装になると思います。