jBPMタスクのフィードを配信する

こんにちは、平田です。

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タスク

フィードリーダーで受信したjBPMタスク

このサンプルではリクエストパラメータで担当者を指定しましたが、実際の業務システムでは認証情報から担当者のアクターIDを取得することになるでしょう。

また、フィードの購読者が多い場合、リクエストのたびに動的に生成するよりは、タスクが追加される際にフィードのファイルを更新した方がサーバに優しい実装になると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です