ソーシャル・ネットワークを BPM に統合する: 第 1 回 Twitter のデータを収集する

Bonita のプロセス・エンジンとコネクター・フレームワークを使って外部アプリケーションを統合する

ビジネス・プロセス・マネジメント (BPM) ツールの柔軟性のおかげで、最小限のコードを作成するだけで、ソーシャル・ネットワークを企業のビジネス・プロセスに統合することができます。この 2 回の連載記事では、オープンソースの BPM ツール、Bonita Open Solution を使用して構築したアプリケーションが、ソーシャル・ネットワーキング・サイトからデータを収集し、表示し、使用する方法を紹介します。第 1 回で説明するのは、Twitter Web サービスに接続してユーザーがキーワード検索によって関連データを検出できるようにアプリケーションを構成する方法です。第 2 回では、このアプリケーションが顧客関係管理 (CRM) システムとインターフェースを取る方法を説明します。

Bilal Siddiqui , Freelance consultant

Bilal Siddiqui は、電気工学エンジニア、XML コンサルタント、そして e-business の簡易化を専門とする会社、WaxSys の共同設立者でもあります。1995年にパキスタンのラホールにある University of Engineering and Technology を卒業して電子工学技術の学位を取得した後、産業用制御システムを対象としたソフトウェア・ソリューションの設計を始めました。その後、XML に転向し、C++ のプログラミング経験を生かして Web ベースや Wap ベースの XML 処理ツール、サーバー・サイドの構文解析ソリューション、そしてサービス・アプリケーションを作成しました。テクノロジー・エバンジェリストである彼が書いた技術書は、頻繁に発行されています。



2011年 6月 10日

IBM と BPM

長い間ビジネス・プロセスの分野で活躍し、ビジネス・プロセスをモデル化、シミュレート、実行、適応、監視、そして最適化するための堅牢な商用ツールを提供してきた IBM は、今年 4月、Business Process Manager V7.5 を発表しました。IBM の包括的な BPM プラットフォームを大々的に更新するこの製品は、2011年 6月に使用可能になる予定です。それまでの間、IBM の BPM 活動に関する developerWorks の最新情報を見逃さないでください。

Twitter や Facebook などのソーシャル・ネットワーキング Web サイトのビジネス価値が増大するなか、企業はソーシャル・ネットワークを素早く簡単にそのビジネス・プロセスに統合する手段を必要としています。効率的な手段の 1 つとなるのは、BPM ツールを使用することです。BPM ツールは、外部アプリケーションおよびデータをビジネス・ワークフローに統合する能力に極めて優れています。

この 2 回の連載記事では、オープンソースの BPM ツールである Bonita を使用して、架空の会社のソーシャル・メディア検索アプリケーションを構築する方法を紹介します。このアプリケーションを構成するのは、外部アプリケーションをシームレスに統合する 1 つのビジネス・プロセスです。このアプリケーションでは、ユーザーは、キーワード検索によってソーシャル・ネットワーキング・サイトからビジネス関連のデータを収集し、ボタンを 1 回クリックするだけで、そのデータの一部を CRM システムに追加できるようになっています。第 1 回となるこの記事では、このアプリケーションのユーザー・インターフェースとアーキテクチャーを説明した後、ビジネス・プロセスのなかで Twitter データを取得して表示できるように Bonita を構成する手順を説明します。第 2 回では、このアプリケーションを会社の CRM システムに統合することによって完成させます。

演習: IBM BPM in action

IBM BPM は、常に変化している今日のビジネス環境の中で、組織が他をしのいで生き残るために不可欠な、ビジネス・プロセス全体の視覚化および管理の手段を提供します。演習「IBM BPM in action」で、コードの不要なビジュアル環境を使用して、ビジネス・プロセスをモデル化および実行してください。

この記事で説明するアプリケーションのソース・コードはダウンロードすることができます。記事の手順を実践するには、Bonita と Twitter4J をダウンロードしてインストールしてから、手順を開始してください (ダウンロード・リンクについては「参考文献」を参照)。記事のアプリケーションを開発するために使用したのは、Bonita バージョン 5.4 と Twitter4J バージョン 2.1.12 です。

アプリケーションの概要

このアプリケーションは、Bonita プロセス構成によってまるごと 1 つのビジネス・プロセスとして開発されています。ユーザーは単純な UI を使用して、Twitter でビジネス価値のあるデータを検索し、検索基準を満たすメッセージ (ツイート) を表示することができます。さらに、検索結果から興味のあるツイートを選択し、そのツイートを投稿した Twitter ユーザーのプロフィールを見ることもできます。しかもこの検索アプリケーションでは、アプリケーション・ユーザーがその Twitter ユーザーを潜在的顧客としてオープンソースの CRM システム、SugarCRM に追加することができます。

ユーザー・インターフェース

検索アプリケーションの UI は、私が Bonita のフォーム・デザイナーを使用して実装した 3 つの単純なフォームからなります。最初のフォームには 2 つの UI コンポーネントがあります。1 つは「Search Keyword (検索キーワード)」テキスト・ボックス、もう 1 つは「Search (検索)」ボタンです (図 1 を参照)。

図 1. ツイートの検索フォーム
Bonita でのツイート検索フォームのスクリーン・ショット

Bonita のフォーム・デザイナーは非常に強力で、フォーム・デザイン用のグラフィカル・コンポーネントが用意されていて、構成画面でユーザー・アクションを他のフォームやバックエンドのアクティビティーに関連付けられるようになっています。例えば Bonita では、図 1 に示されている「Search (検索)」ボタンを、関連ツイートを検索するバックエンドの検索アクティビティーにリンクさせることができます。

ユーザーが検索キーワードを入力して「Search (検索)」ボタンをクリックすると、制御は Bonita のビジネス・プロセス・エンジンに渡されます。すると、このプロセス・エンジンがバックグラウンドで動作して、入力された検索キーワードが含まれるツイートを取得します。Bonita はプロセス・エンジンによって検出されたメッセージを 2 番目の UI フォームに表示します (図 2 を参照)。

図 2. Twitter メッセージを表示するフォーム
Twitter メッセージを表示する Bonita UI フォームのスクリーン・ショット

ユーザーは表示されたメッセージをどれでも選択することができます。メッセージを選択して「View Profile (プロフィールの表示)」ボタンをクリックすると、制御は再び Bonita のプロセス・エンジンに渡されます。そして、このエンジンがまたもやバックグラウンドで動作して、選択されたツイートを送信した Twitter ユーザーのプロフィール・データを取得します。取得された Twitter ユーザーのプロフィールは、3 番目の UI フォームに表示されます (図 3 を参照)。

図 3. ユーザー・プロフィール・フォーム
Twitter ユーザーのプロフィールを表示する Bonita UI フォームのスクリーン・ショット

ユーザーがこの 3 番目の UI フォームで「Add to CRM (CRM に追加)」ボタンをクリックすると、SugarCRM で管理されているビジネス取引先情報に Twitter ユーザーが追加されます。Bonita のプロセス・エンジンは SugarCRM とシームレスにインターフェースを取ることによって、この操作を可能にします。

アプリケーションのアーキテクチャー

Bonita のような BPM ツールには、多種多様なアプリケーションを統合する柔軟性があります。この柔軟性をもたらしているのは、Bonita のプロセス・エンジンとコネクター・フレームワークです。このセクションでは、この検索アプリケーションのアーキテクチャーについて説明し、プロセス・エンジンとコネクター・フレームワークが他のコンポーネントと連動する仕組みを明らかにします。アプリケーションのアーキテクチャーは、図 4 のとおりです。

図 4. 検索アプリケーションのアーキテクチャー
図 4 は、検索アプリケーションのアーキテクチャーを示しています。

図 4 を見るとわかるように、検索アプリケーションには以下の主要コンポーネントがあります。

  • ユーザー・インターフェース
  • プロセス変数
  • Bonita のプロセス・エンジン
  • Bonita のコネクター・フレームワーク
  • Twitter4J
  • SugarCRM API

UI についてはすでに説明したので、図 4 に示されている UI 以外のコンポーネントについて説明します。

  • プロセス変数: Bonita には、アプリケーション・データを格納するためのプロセス変数が用意されていて、アプリケーション・レベルの変数とローカルの一時変数の両方を使用することができます。Bonita では GUI を使用して、アプリケーションのビジネス・ロジックに応じて変数を構成し、構成したプロセス変数に基づいて、計算式および論理式を評価することができます。
  • Bonita のプロセス・エンジン: Bonita のプロセス・エンジンの役割は、さまざまなアプリケーション・コンポーネントの間で発生するすべてのアクティビティーを調整することです。まず始めに、プロセス・エンジンはアプリケーション・ユーザーに表示する UI フォームを特定します。ユーザーが検索キーワードを入力した後は、プロセス・エンジンがアプリケーションのフローを処理し、プロセス変数がユーザー入力を取り込めるようにします。つまり、アプリケーションの実行中は一貫して、プロセス・エンジンがビジネス・ロジックに従ってプロセスのライフサイクルを管理するということです。
  • Bonita のコネクター・フレームワーク: コネクター・フレームワークは、外部アプリケーションを統合するための Bonita の拡張性メカニズムであり、コネクター・フレームワークを使用してカスタム・コネクターを作成します。図 4 のコネクター・フレームワークの枠内には 3 つのコネクター (TwitterSearchConnectorTwitterUserProfileConnectorSugarCRMAddContactConnector) がありますが、これらのコネクターはすべて、コネクター・フレームワークを使用して作成されています。コネクターはそれぞれに固有のタスクを行います。例えば TwitterSearchConnector は、Twitter で該当するメッセージを検索するための検索エンジンとして機能します。
  • Twitter4J: Twitter4J は、インターネットを介して Twitter Web サービスに接続されます。これにより、クライアント・アプリケーション (例えば、この検索アプリケーション) は Twitter Web サービスとやりとりできるようになります。Twitter4J は、Twitter Web サービスとの連動を容易にするオープンソースの Java API です (「参考文献」を参照)。Bonita が Twitter Web サービスとの連動を開始できるように、Twitter4J は TwitterSearchConnector によって Bonita のコネクター・フレームワーク内にラップされます (その方法については、この記事のセクション「TwitterSearchConnector クラスを実装する」で説明します)。
  • SugarCRM API: このコンポーネントについては第 2 回で説明します。

次は、上記の検索アプリケーション・コンポーネントが連動する仕組みについて説明します。

コンポーネント間のやりとりのシーケンス

図 5 に、ビジネス・ユーザーが検索アプリケーションを使用して Twitter Web サービスと対話するときに発生するイベントのシーケンスを示します。

図 5. 検索アプリケーションで発生するイベントのシーケンス
検索アプリケーションで発生するイベントのシーケンスを示す図
  1. 最初の UI フォーム (図 1) にユーザーが検索キーワードを入力して、「Search (検索)」ボタンをクリックします。
  2. Bonita のプロセス・エンジンが検索キーワードを受け取り、それをプロセス変数に格納します。
  3. Bonita のプロセス・エンジンが TwitterSearchConnector を呼び出します。
  4. TwitterSearchConnector は Twitter4J を使用して Twitter Web サービスに対して自己証明を行った後、検索キーワードを含めた検索クエリーを Twitter Web サービスに送信します。
  5. Twitter Web サービスが検索クエリーを受信すると、Twitter で実際の検索操作を行います。そして、検出したメッセージを TwitterSearchConnector に返します。
  6. TwitterSearchConnector は受信した検索結果を Bonita のプロセス・エンジンに渡します。
  7. Bonita のプロセス・エンジンはプロセス変数に検索結果を取り込んだ後、シーケンスでの次のタスクを特定して、制御を検索結果フォーム (図 2) に渡します。
  8. 検索結果 UI フォームがプロセス変数からレスポンスを抽出し、メッセージをユーザーに表示します、

この検索シーケンスは、2 番目の UI フォームからユーザー・プロフィール・フォーム (図 3 ) まで同じように続けることができます。ユーザーが 2 番目のフォームに表示されたツイートのいずれかを選択して「View Profile (プロフィールの表示)」ボタンをクリックすると、プロセス・エンジンが TwitterUserProfileConnector を呼び出し、このコネクターによって、選択されたツイートを投稿したユーザーのプロフィールを取得します。同様に、ユーザーがその Twitter ユーザーの連絡先情報を (「Add to CRM (CRM に追加)」ボタンをクリックして) SugarCRM に追加することにした場合には、プロセス・エンジンが SugarCRM コネクターを呼び出し、このコネクターが連絡先情報を CRM システムに追加します。

このイベント・シーケンスからわかるように、Bonita のプロセス・エンジンが、検索アプリケーションのすべてのアクティビティーを調整する中心的な役割を果たします。したがって、Bonita でこの検索アプリケーションを開発する手順は、各ステップで実行しなければならない内容を Bonita のプロセス・エンジンに指示するという作業で構成されます。Bonita ではこの作業を、ビジネス・プロセスの構成と呼びます。記事の残りでは、この検索アプリケーションをどのように構成していくのかを説明します。


検索アプリケーションの構成

アプリケーションを構成するには、以下のタスクを実行することになります。

  1. Twitter アカウントを作成する。
  2. アプリケーションを Twitter Web サービスに登録して、認証用のセキュリティー・クレデンシャルを入手する。
  3. TwitterSearchConnector を設計および構成する。
  4. アプリケーションの残りのコンポーネントを Bonita で構成する (このタスクは第 2 回で完了させます)。

Twitter アカウントを作成するという最初のステップは、E メール・アカントを作成するよりも簡単です。検索アプリケーションは、Twitter Web サービスのクライアントとして機能します。この記事のために、私は searchMessages という名前の Twitter アカウントを作成しました。これから記事で説明する構成手順を実践するには、その前に https://twitter.com/signup にアクセスして、独自のアカウントを作成してください。

アプリケーションをTwitter に登録してセキュリティー・クレデンシャルを入手する

アプリケーションを Twitter Web サービスに登録すると、以下の 2 つのキー・ペアが支給されます。

  • クライアント・アプリケーションを表すコンシューマー・キーとコンシューマー・シークレット: 作成したアカウントを使用して Twitter Web サービスにアクセスする際に、検索アプリケーションはこのキー・ペアを使用します。
  • アクセス・トークンとアクセス・トークン・シークレット: 検索アプリケーションが Twitter Web サービスに送信するリクエストには、アクセス・トークンとアクセス・トークン・シークレットを使用して署名を付けます。

この 2 つのキー・ペアを使用するセキュリティー・メカニズムは、OAuth (Open Authentication) プロトコルと呼ばれます (「参考文献」を参照)。OAuth については Twitter4J が裏で処理してくれるため、OAuth がどのように動作するのかを気にする必要はありません。Twitter4J クラスを使用するのは、TwitterSearchConnector です。

作成したアカウントを使用して、Twitter Web サイト (http://www.twitter.com) にログインしてください。ブラウザーのアドレス・バーに https://dev.twitter.com/apps/new と入力すると、「Register an Application (アプリケーションの登録)」ページが表示されます (図 6 を参照)。

図 6. Twitter のアプリケーション登録ページ
図 6 は、Twitter のアプリケーション登録ページのスクリーン・ショットです。

このページに以下の情報を入力します。

  1. Application Name (アプリケーション名)」というラベルが付いたテキスト・ボックスに、「Bonita search client」と入力します。
  2. Description (説明)」フィールドに、簡単な説明 (例えば、「Client that searches for data on Twitter (Twitter 上でデータを検索するクライアント)」) を入力します。
  3. Application Website (アプリケーションの Web サイト)」フィールドに、アプリケーションの URL を入力します。
  4. Application Type (アプリケーション・タイプ)」として「Client (クライアント)」ラジオ・ボタンを選択します。これは、検索アプリケーションが Web サービス・クライアントとして機能することを意味します。
  5. Default Access type (デフォルトのアクセス権限タイプ)」として「Read-only (読み取り専用)」を選択します (このアプリケーションに必要なのは Twitter データを検索することだけで、Twitter メッセージを送信する必要はないためです)。

Organization (組織)」と「Callback URL (コールバック URL)」のフィールドは空のままにして、入力したフォームを送信してください。「Bonita search client Settings (Bonita 検索クライアントの設定)」ページが表示され、このページにセキュリティー・クレデンシャルが提供されます (図 7 を参照)。

図 7. Twitter の「Bonita search client Settings (Bonita 検索クライアントの設定)」ページ
図 7 は、「Bonita search client Settings (Bonita 検索クライアントの設定)」ページのスクリーン・ショットです。

コンシューマー・キーとコンシューマー・シークレットは後で必要になるため、この 2 つを書き留めておいてください。

2 つ目のキー・ペア (アクセス・トークンとアクセス・トークン・シークレット) を入手するには、図 7 に赤い丸で囲んで示された「My Access Token (マイ・アクセス・トークン)」ボタンをクリックします。すると、「Bonita search client Access Token Requisition (Bonita 検索クライアントのアクセス・トークン請求)」という名前の別の Twitter ページに、アクセス・トークンとそのシークレットが表示されます (図 8 を参照)。

図 8. Twitter の「Bonita search client Access Token Requisition (Bonita 検索クライアントのアクセス・トークン請求)」ページ
図 8 は、Twitter の「Bonita search client Access Token Requisition (Bonita 検索クライアントのアクセス・トークン請求)」ページのスクリーン・ショットです。

アクセス・トークンとアクセス・トークン・シークレットを書き留めておいてください。

2 つのキー・ペアを手に入れたところで、次は TwitterSearchConnector を設計して構成するステップに進みます。

TwitterSearchConnector を設計および構成する

Bonita でコネクターを実装する作業の大半は、構成タスクです。このタスクには、以下のステップがあります。

  1. 記述的情報を提供する。
  2. コネクターの入力パラメーターと出力パラメーターを構成する。
  3. コネクターの Java コード・テンプレートを生成する。Bonita がコネクター・テンプレートを生成するために使用するのは、EMF (Eclipse Modeling Framework) と GMF (Graphical Modeling Framework) です (「参考文献」を参照)。生成されるテンプレートには、Bonita のコネクター・フレームワークに必要なすべての Java コードが含まれるため、コネクターのビジネス・ロジックに専念することができます。アプリケーションの Java コードを作成しなければならないのは、Twitter4J を使用するときだけです。

Bonita には、ほぼすべての構成ステップにグラフィカル・ウィザードが用意されています。

まず、Bonita を実行します。図 9 に、ウェルカム・ページを示します。

図 9. Bonita のウェルカム・ページ
図 9 は、Bonita のウェルカム・ページです。

ウェルカム・ページのメニューから、「Connector (コネクター)」 > 「New connector (新規コネクター)」の順に選択します (図 9 では、「Connector (コネクター)」メニュー項目が赤い丸で囲んで示されています)。すると、新しいコネクターを作成するためのウィザードが表示されます (図 10 を参照)。

図 10. コネクター作成ウィザード
図 10 は、Bonita のコネクター作成ウィザードのスクリーン・ショットです。

図 10 に示されているように、コネクター作成ウィザードは上下の部分に分かれています。上の部分で収集するのは、コネクターを表す情報 (Connector Id (コネクター ID)、Description (説明)、Category (カテゴリー)、そしてコネクターを表す Java クラスの名前など) です。下の部分は、表形式の 2 つのグラフィカル・ウィジェット (「Pages (ページ)」と「Outputs (出力)」) で構成されており、これらのウィジェットで入力パラメーターと出力パラメーターを定義することができます。

「Connector Id (コネクター ID)」テキスト・フィールドには「TwitterSearchConnector」と入力し、「Description (説明)」テキスト・フィールドには「Search tweets (ツイートの検索)」と入力します。次に、「Category (カテゴリー)」リストから「Social (ソーシャル)」を選択します。このカテゴリー・フィールドは、Bonita がコネクターを分類するのに役立ちます。「Class Name (クラス名)」フィールドには、Bonita によって「Connector Id (コネクター ID)」フィールドの入力内容が自動的に取り込まれていることがわかります。これが、このコネクターの Java クラスの名前になります。

「Package (パッケージ)」フィールドの隣にある「Browse (参照)」ボタンをクリックして、TwitterSearchConnector クラスに使用するパッケージを選んでください。コネクターのアイコンを指定することもできますが、この記事では省略します。これで、コネクターを表す情報の入力は完了です。

コネクターを表す情報を入力し終えた時点では、図 10 に示したウィザードは図 11 のようになっています。

図 11. TwitterSearchConnector を表す情報が入力されたコネクター作成ウィザード
図 11 は、TwitterSearchConnector を表す情報が入力されたコネクター作成ウィザードのスクリーン・ショットです。

次は、TwitterSearchConnector の入力パラメーターを定義します。

TwitterSearchConnector の入力パラメーターを構成する

TwitterSearchConnector の入力パラメーターを構成するには、コネクター作成ウィザードの下の部分にある「Pages (ページ)」表を使用します。入力パラメーターは、Bonita によって TwitterSearchConnector に渡されることに注意してください。コネクター作成ウィザードでは、入力パラメーターをページとしてグループ化することができます。これはつまり、ビジネス・プロセスを構成している間、複数の入力パラメーターを 1 つのページから渡せるということを意味します。このページが表示されるようになるのは、第 2 回の記事でコネクターを検索ビジネス・プロセスに追加した後です。

TwitterSearchConnector には、2 つのキー・ペア (コンシューマー・キーとコンシューマー・シークレット、そしてアクセス・トークンとアクセス・トークン・シークレットの各ペア) と、最初の UI フォーム (図 1) に入力された検索キーワードが必要です。したがって、TwitterSearchConnector には 5 つの入力パラメーターを定義する必要があります。4 つのセキュリティー・クレデンシャルは TwitterSearchConnector を検索ビジネス・プロセスに追加すると確定されますが、検索キーワードは動的です。つまり、検索キーワードは、ユーザーが検索を実行するたびに入力されます。

「Pages (ページ)」表の右側にある「Create (作成)」ボタン (図 11 で赤い丸で囲まれたボタン) をクリックします。この操作によって新しいページが開き、TwitterSearchConnector の入力パラメーターを構成するためのフィールドが表示されます (図 12 を参照)。

図 12. 入力パラメーターを構成するためのページ
図 12 は、Bonita で入力パラメーターを構成するためのページのスクリーン・ショットです。

図 12 に示されているように、入力パラメーター・ページには「Page Id (ページ ID)」、「Page Title (ページ・タイトル)」、「Description (説明)」という 3 つのフィールドがあります。この入力パラメーター・ページの「Page Id (ページ ID)」フィールドには、単純に「TwitterSearchConnectorInputParametersPage」と入力し、「Page Title (ページ・タイトル)」フィールドと「Description (説明)」フィールドのそれぞれに「Twitter Search Connector Input Parameters Page (Twitter 検索コネクター入力パラメーター・ページ)」と入力してください。

3 つのフィールドの下には「Widgets (ウィジェット)」表があります。ここには、入力パラメーターごとに 4 つのフィールドに入力する必要があります。「Field name (フィールド名)」フィールドはパラメーターの名前です。「Mandatory (必須)」フィールドには、パラメーターが必須パラメーターであるか、オプション・パラメーターであるかを指定します。そして「Widget (ウィジェット)」フィールドには、この入力パラメーターと関連付けるビジュアル・コンポーネントを指定し、「Data type (データ型)」フィールドには、このパラメーターと関連付けられた変数のデータ型を指定します。

5 つの入力パラメーターのそれぞれに対し、4 つのフィールドを構成してください。「Create (作成)」ボタン (図 11 で赤い丸で囲まれたボタン) をクリックすると「Widgets (ウィジェット)」表が表示されるので、この表の行に、フィールド名として「consumerKey」と入力します。「Mandatory (必須)」列には「Mandatory (必須)」、「Widget (ウィジェット)」列には「Password (パスワード)」、「Data type (データ型)」列の値には「Text (テキスト)」と入力します。以上の値を 5 つの入力パラメーターのすべてについて使用します (図 13 を参照)。

図 13. 構成が完了した状態の入力パラメーターのページ
図 13 は、Bonita において、構成が完了した状態の入力パラメーターの構成ページのスクリーン・ショットです。上記の手順で入力したデータが表示されています。

ページの一番下にある「OK」ボタンをクリックしてください。Bonita が入力パラメーターの構成を保存し、コネクター作成ウィザード (図 10) が再び表示されます。

出力パラメーターを構成する

TwitterSearchConnector に定義しなければならない出力パラメーターは唯一、searchResults というパラメーターだけです。「Outputs (出力)」表の右側にある「Create (作成)」ボタン (図 11 で赤い丸で囲まれたボタン) をクリックしてください。すると、この表に新しい行が表示されます。出力パラメーターの場合、データを入力する必要のある列は 2 つしかありません。「Field name (フィールド名)」列には「searchResults」と入力し、「Data type (データ型)」列にはドロップダウン・リストから「List (リスト)」を選択します。入力パラメーターと出力パラメーターの構成データがすべて入力されたコネクター作成ウィザードは、図 14 のようになっているはずです。

図 14. 入力パラメーターと出力パラメーターの構成データが設定されたコネクター作成ウィザード
図 14 は、入力パラメーターと出力パラメーターの構成データが設定されたコネクター作成ウィザードです。

コネクター作成ウィザードの「Finish (完了)」ボタンをクリックすると同時に、Bonita は TwitterSearchConnector クラスの入力および出力パラメーターのコードをすべて生成して、エディターに表示します (図 15 を参照)。

図 15. TwitterSearchConnector クラスのテンプレート・コード
図 15 は、TwitterSearchConnector クラスのテンプレート・コードを示すスクリーン・ショットです。

Bonita は、生成された TwitterSearchConnector のコードを自動的に Bonita インストール・ディレクトリーにある X:\BOS-5.4\studio\workspace\local_default_My Extensions\src-connectors\org\bonitasoft\connectors\twitter ディレクトリーに保存します (便宜を図るため、この記事のソース・コードのダウンロードには TwitterSearchConnector.java が含まれています)。次は、このコードを処理する方法を説明します。

TwitterSearchConnector クラスを実装する

リスト 1 に TwitterSearchConnector クラスを記載します。

リスト 1. Bonita によって生成された TwitterSearchConnector クラス
public class TwitterSearchConnector extends ProcessConnector {

    private String consumerKey;
    private String accessToken;
    private String accessTokenSecret;
    private String consumerSecret;
    private String searchKeyword;

    @Override
    protected void executeConnector() throws Exception {
        // TODO Auto-generated method stub
    }

    @Override
    protected List<ConnectorError> validateValues() {
        // TODO Auto-generated method stub
        return null;
    }

    public void setConsumerKey(String consumerKey) {
        this.consumerKey = consumerKey;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    public void setSearchKeyword(String searchKeyword) {
        this.searchKeyword = searchKeyword;
    }

    public void setAccessTokenSecret(String accessTokenSecret) {
        this.accessTokenSecret = accessTokenSecret;
    }


    public void setConsumerSecret(String consumerSecret) {
        this.consumerSecret = consumerSecret;
    }

    public List getSearchResults() {
        // TODO Add return value for the output here
        return null;
    }
}

リスト 1 からわかるように、TwitterSearchConnector は、コネクター・フレームワークの一部となっている ProcessConnector クラスを継承します。ProcessConnector は、Bonita プロセス・エンジン内部の個々の実行スレッドで稼働する、1 つのコネクターの複数インスタンスを管理するための機能を提供します。

ProcessConnector クラスが継承する Connector は、コネクター・フレームワークの基底クラスです。このクラスは、入力の検証や例外処理といった共通タスクを処理する機能を提供します。

リスト 1 でクラス・レベルの変数をよく見てみると、Bonita は、「TwitterSearchConnector の入力パラメーターを構成する」セクションで構成した 5 つの入力パラメーターに対応する 5 つの変数を宣言していることがわかります。

TwitterSearchConnector の入力パラメーターを構成する」セクションでは、出力変数も構成しましたが、Bonita は TwitterSearchConnector クラス内で出力変数を宣言していません。そのため、コネクターの出力を格納する searchResults という名前の 6 番目の変数を手動で追加する必要があります。リスト 2 には、この変数が太字で示されています。

リスト 2. TwitterSearchConnector クラスのクラス・レベルの変数
//Class level variables
    private String consumerKey;
    private String accessToken;
    private String accessTokenSecret;
    private String consumerSecret;
    private String searchKeyword;

//Manually added output variable
private List<Tweet> searchResults;

ここで、リスト 1 のセッター・メソッドとゲッター・メソッドに注目してください。5 つの入力パラメーター (setConsumerKey()setConsumerToken()etAccessToken()setAccessTokenSecret()setSearchString()) のそれぞれに、セッター・メソッドがあります。一方、ゲッター・メソッドとなると、このクラスには getSearchResults() というメソッドが 1つあるだけです。このメソッドは searchResults 出力変数に対応します。ただし、リスト 1getSearchResults() メソッドが返すのは null であるため、リスト 3 のように、このメソッドが null の代わりに searchResults 出力変数を返すように手動で編集しなければなりません。

リスト 3. 手動で編集した getSearchResults() メソッド
//Manually edited form of the getSearchResults()
public List<Tweet> getSearchResults() {
   return searchResults;
}

今度はリスト 1executeConnector() メソッドに注目してください。この空のメソッドには、TwitterSearchConnector のビジネス・ロジックを含める必要があるので、次のセクションで、Twitter4J を使用してロジックを実装する方法を説明します。

executeConnector() メソッドを実装する

コネクターのビジネス・ロジックを実装するには、Bonita のコネクター・フレームワークの executeConnector() メソッドを使用することができます。すると、Bonita のプロセス・エンジンは TwitterSearchConnector が起動されるたびに executeConnector() メソッドを呼び出します。リスト 4 に、executeConnector() メソッドを記載します。

リスト 4. executeConnector() メソッド
protected void executeConnector() throws Exception {
   //Step1:
   Twitter twitter = new TwitterFactory().getInstance();

   //Step2:
   twitter.setOAuthConsumer(consumerKey, consumerSecret);
   twitter.setOAuthAccessToken(new AccessToken(accessToken, accessTokenSecret));
   
   //Step3:
   twitter4j.Query query = new twitter4j.Query(searchKeyword);
   twitter4j.QueryResult queryResult = null;
   
   //Step4:
   try
   {
      queryResult = twitter.search(query);
      searchResults = queryResult.getTweets();
   }
   catch (TwitterException e) {
      System.out.println ("Twitter follow a user exception");
      e.printStackTrace();
   }
}

executeConnector() メソッドは、Twitter4J を使用してビジネス・ロジックを実装します。executeConnector() は、以下の 4 つのステップからなる単純なメソッドです。

  1. TwitterFactory というファクトリー・クラスの助けを借りて、Twitter クラスのインスタンスを作成します。Twitter クラスでは、Twitter4J が持つ多くの有用なメソッドを利用することができます。
  2. Twitter クラスの setOAuthConsumer() メソッドと setOAuthAccessToken() メソッドを呼び出し、メソッド呼び出しと併せて、認証データ (consumerKeyconsumerSecretaccessToken、および accessTokenSecret) を渡します。Twitter4J が内部で認証を処理します。
  3. Query オブジェクトと QueryResult オブジェクトをインスタンス化します。Query オブジェクトが検索キーワードをラップし、QueryResult オブジェクトが検索結果をラップします。
  4. Twitter クラスの search() メソッドを呼び出します。このメソッドは Query オブジェクトを引数として取り、検索結果を QueryResult オブジェクト内にラップして返します。続いて QueryResult オブジェクトの getTweets() メソッドを呼び出して、このオブジェクトからメッセージを抽出し、searchResults 変数に抽出したメッセージを格納します。

TwitterSearchConnector クラスをスタンドアロン・モードでテストする

TwitterSearchConnector クラスには main() メソッドを組み込んでおいたので、Bonita を実行しなくても、このクラスの機能をスタンドアロン・モードでテストすることができます。リスト 5 に、私が組み込んだ main() メソッドを記載します。

リスト 5. TwitterSearchConnector クラスの main() メソッド
public static void main(String args[]) {
   //Step1: Instantiate
   TwitterSearchConnector twitterSearchConnector = 
      new TwitterSearchConnector();

   //Step2: Provide security information
   twitterSearchConnector.setConsumerKey(args[0]);
   twitterSearchConnector.setConsumerSecret(args[1]);
   twitterSearchConnector.setAccessToken(args[2]);
   twitterSearchConnector.setAccessTokenSecret(args[3]);
   twitterSearchConnector.setSearchKeyword(args[4]);

   //Step3: Search Twitter
   try 
   {
       twitterSearchConnector.executeConnector();
   }catch (java.lang.Exception e){
      e.printStackTrace();
   }
   List <Tweet> tweets = twitterSearchConnector.getSearchResults();

   //Step4: Print Twitter messages
   for (int i=0; i<tweets.size(); i++)
   {
      System.out.println ("User Name: ["+tweets.get(i).getFromUser()+"]");
      System.out.println ("Message ["+tweets.get(i).getText() +"/r/n");
   }
}//main

main() メソッドは、以下のステップで動作します。

  1. TwitterSearchConnector クラスをインスタンス化します。
  2. セキュリティー・データと検索キーワード・データのすべてを TwitterSearchConnector クラスに渡します。
  3. executeConnector() メソッドを呼び出します。
  4. 検索結果を出力コンソールに出力します。

TwitterSearchConnector クラスをスタンドアロンのアプリケーションとしてコンパイルして実行するには、この記事のソース・コード・ダウンロードに用意されている SearchTweetsCompile.bat ファイルと SearchTweetsRun.bat ファイルを使用することができます。2 つのキー・ペアは、SearchTweetsRun.bat ファイルにハード・コーティングされています。

TwitterSearchConnector クラスは Bonita ライブラリーと Twitter4J を使用します。したがって、Bonita のダウンロードに含まれる Bonita-client-5.4.jar と、Twitter4J の twitter-core-2.1.12.jar をクラスパスに組み込んでおく必要があります。

SearchTweetsRun.bat ファイルを実行すると、私の出力コンソールには図 16 の内容が出力されました。

図 16. スタンドアロン・モードでの出力コンソールの内容
図 16 は、TwitterSearchConnector クラスをスタンドアロン・モードで実行して出力コンソールに出力された内容を示すスクリーン・ショットです。

出力コンソールには、CRM というキーワードを検索して見つかったツイートごとに、ユーザー名とメッセージの内容が表示されます。


第 1 回のまとめ

今回は、検索アプリケーションのアーキテクチャーを説明し、Bonita のプロセス・エンジンとそのコネクター・フレームワークが互いに連動してソーシャル・ネットワーキング・データをビジネス・プロセスに取り込む仕組みを明らかにしました。その後、TwitterSearchConnector の構成手順をたどり、最後にスタンドアロン・モードで TwitterSearchConnector クラスのテストも行いました。第 2 回では、残りのコネクターを構成して Twitter ユーザーのプロフィールを取得し、それを SugarCRM に統合することによって、アプリケーションを完成させる方法を説明します。そして完成後のアプリケーションで、Bonita 内部で実行されるビジネス・プロセスにさまざまな外部アプリケーションを統合する方法を包括的かつ具体的に説明します。


ダウンロード

内容ファイル名サイズ
Source code for this article's examplej-sb1.zip7KB

参考文献

学ぶために

製品や技術を入手するために

議論するために

  • IBM Business Process Manager フォーラム: developerWorks コミュニティーでのディスカッションに参加してください。
  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=678244
ArticleTitle=ソーシャル・ネットワークを BPM に統合する: 第 1 回 Twitter のデータを収集する
publish-date=06102011