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