目次


オンプレミス・データベースのテーブル値をモニターする Android アプリと Web アプリケーションを作成する

変更のプッシュ通知を受け取るために IBM Bluemix プラットフォームのサービスを利用する

Comments

データベース内のテーブル値を日常的に手動でモニターしているとしたら、これがどれほど大変な作業であるかはご存知のことでしょう。このチュートリアルでは、オンプレミス・データベースのテーブル列値をチェックして、値が変更されている場合にはプッシュ通知を受け取れるように Bluemix サービス (Cloud Integration サービスや Push サービスなど) をセットアップして利用する方法を紹介します。

テーブル値をモニターし、テーブル値が変更された場合には自動的に通知を受け取れるようにすれば、モニタリングの作業が遥かに容易になります。

サンプル・コードとこのチュートリアル全体では、実際に IBM Content Manager Enterprise Edition の DB2 データベース表を使用して IBM Content Manager のリソース・マネージャー・コンポーネントが稼働中であるかどうかをチェックし、リソース・マネージャーの状況が変わった場合には、Android 端末にプッシュ通知が送信されるようにします。Bluemix の Cloud Integration サービスを利用すれば、このサービスでサポートされているデータベースのテーブル列値を表示してモニターすることができます。さらに、私が Bluemix 上に作成した DBStat というサンプル・アプリケーションを使用すれば、Android 端末上でも Web 上でもテーブル値をチェックすることができます。

Android アプリのコードを入手するWeb アプリのコードを入手する

サンプル・アプリケーションである DBStat について

DBStat Web アプリケーションは、Bluemix にデプロイされた Liberty for Java Web アプリケーションであり、オンプレミス・データベースのテーブル値を定期的にチェックします。DBStat は現在のテーブル値を取得するために、動的に作成された REST API を使用してオンプレミス・データベースに接続します。

オンプレミス・データベースに接続するために使用するのは、Cloud Integration セキュア接続です。オンプレミス・データベースに接続した後は、Data REST API を使用して、テーブルの初期値を Mobile Data サービスに保管します。

DBStat Web アプリケーションは、データベース内の現在のテーブル値を毎分チェックして、前に Mobile Data に保管された値と比較します。テーブル値が異なる場合は、Mobile Data に保管された値を現在の値で更新し、Push サービスの REST API を使用してプッシュ通知を送信します。

同様のアプリケーションを作成するために必要となるもの

  • Bluemix アカウント。以下のランタイムやサービスを利用する上で必要です。
    • Liberty for Java ランタイム — このランタイムによって、オンプレミス・データベースのテーブル値をチェックします。
    • Mobile Data サービス — オンプレミス・データベースのテーブル値は、このサービスに保管します。
    • Mobile Application Security サービス — このサービスはアプリからのアクセスを管理し、セキュリティーを提供します。
    • Push サービス — データベースのテーブル値が変更されると、このサービスは通知を送信します。
    • Cloud Integration サービス — このサービスは、オンプレミス・データベースへのセキュア接続を可能にします。
  • 以下のプログラムをインストールします。
  • DevOps Services アカウント。モバイル・アプリまたは Web アプリケーションのサンプル・コードを入手するために必要です (上掲のボタンを参照)。

各ステップでの注意事項

皆さんはこのチュートリアルを通じて、私が各ステップを実行する際に使用したアプリ名を目にすることになりますが、例えば、あるステップで「DBStat」という名前が出てきた場合は、この名前を皆さん固有のアプリ名に置き換えてください。

ステップ 1. Bluemix サービスを作成する

以下の手順に従って、必要な Bluemix サービスのそれぞれを作成します。

Liberty for Java

  1. Bluemix にログインします。
  2. メニューで「CATALOG (カタログ)」をクリックし、「Runtimes (ランタイム)」セクションまでスクロールダウンします。
  3. Liberty for Java」をクリックします。
  4. Start with a runtime (ランタイムから開始)」の下に、DBStat 以外の (この名前はすでに使用されています) 一意の名前を入力します。
  5. ドメイン (mybluemix.net) の前に来るホストの名前は、自動的に入力されるはずです。
  6. Selected Plan (選択済みプラン)」は「Default (デフォルト)」のままにします。
  7. CREATE (作成)」をクリックします。

    「APP HEALTH (アプリの正常性)」の下に、「Your app is running. (アプリは稼働しています。)」と表示されるまで待ちます。

注: アプリを再ステージする必要があることを伝えるメッセージが表示されたら、「OK」をクリックしてください。

Mobile Application Security

  1. メニューで「CATALOG (カタログ)」をクリックし、「Mobile (モバイル)」セクションまでスクロールダウンします。
  2. Mobile Application Security」を選択します。
  3. 「App (アプリ)」ドロップダウン・メニューから、自分のアプリを選択します。
  4. 「Selected Plan (選択済みプラン)」は「Standard (標準)」のままにします。
  5. CREATE (作成)」をクリックします。

「APP HEALTH (アプリの正常性)」の下に、「Your app is running. (アプリは稼働しています。)」と表示されるまで待ちます。

Mobile Data

  1. メニューで「CATALOG (カタログ)」をクリックし、「Mobile (モバイル) 」セクションまでスクロールダウンします。
  2. Mobile Data」を選択します。
  3. 「App (アプリ)」ドロップダウン・メニューから、自分のアプリを選択します。
  4. 「Selected Plan (選択済みプラン)」は「Shared (共有)」のままにします。
  5. CREATE (作成)」をクリックします。

「APP HEALTH (アプリの正常性)」の下に、「Your app is running. (アプリは稼働しています。)」と表示されるまで待ちます。

Push

  1. メニューで「CATALOG (カタログ)」をクリックし、「Mobile (モバイル) 」セクションまでスクロールダウンします。
  2. Push」を選択します。
  3. 「App (アプリ)」ドロップダウン・メニューから、自分のアプリを選択します。
  4. 「Selected Plan (選択済みプラン)」は「Standard (標準).
  5. CREATE (作成)」をクリックします。

「APP HEALTH (アプリの正常性)」の下に、「Your app is running. (アプリは稼働しています。)」と表示されるまで待ちます。

Cloud Integration

  1. メニューで「CATALOG (カタログ)」をクリックし、「Integration (統合)」セクションまでスクロールダウンします。
  2. Cloud Integration」を選択します。
  3. 「App (アプリ)」ドロップダウン・メニューから、自分のアプリを選択します。
  4. 「Selected Plan (選択済みプラン)」は「Cloud Integration Plan (クラウド統合プラン)」のままにします。
  5. CREATE (作成)」をクリックします。

「APP HEALTH (アプリの正常性)」の下に、「Your app is running. (アプリは稼働しています。)」と表示されるまで待ちます。

ステップ 2. アプリの情報を記録する

以上の Bluemix サービスを作成したら、以下の手順に従って、アプリの主要な情報を記録しておきます。この情報は、後で DBStat サンプル・コードで使用します。

注: このチュートリアルでは例として、私のアプリの情報を記載します。チュートリアルの例で示されているアプリの情報をそのまま使用するのではなく、必ず自分のアプリに対して生成された固有の情報を使用してください。

Bluemix にログインしている状態で、以下の手順に従います。

  1. メニューで「DASHBOARD (ダッシュボード)」をクリックし、「Applications (アプリケーション)」の下に表示されている自分のアプリを選択します。
  2. MOBILE OPTIONS (モバイル・オプション)」をクリックし、オプション番号「3」を見つけます。
  3. アプリ・キーを書き留めます。

    例: 6e18da73-08e9-4d35-9190-a422541ffe07

  4. アプリ・シークレットを書き留めます。

    例: 322212ee2e2ad64636791bb2fb03b0f4760ebfa8

  5. 経路を書き留めます。

    例: DBStat.mybluemix.net

ステップ 3. Cloud Integration セキュア接続をインストールする

自分のオンプレミス・データベースにアクセス可能なマシンに、Cloud Integration セキュア接続ソフトウェアをインストールします。このチュートリアルでは、IBM Content Manager Library Server データベースがインストールされた Windows マシンを使用しました。

Bluemix にログインしている状態で、以下の手順に従います。

  1. DASHBOARD (ダッシュボード)」をクリックし、自分のアプリを選択してから「Cloud Integration」を選択し、「SECURE CONNECTIONS (セキュア接続)」をクリックします。すると、「Manage Secure Connections (セキュア接続の管理)」ページが表示されます。
  2. 「Name your connection (接続名)」フィールドに「W520」と入力します。
  3. 「Standard (標準)」の下にある「Add (追加)」をクリックします。
  4. 「Driver (ドライバー)」の下にある「INSTALL (インストール)」をクリックします。すると、以下に示すポップアップ・ウィンドウが表示されます。Bluemix の「Manage Secure Connections (セキュア接続の管理)」パネルに表示されたプロンプト
    Bluemix の「Manage Secure Connections (セキュア接続の管理)」パネルに表示されたプロンプト
  5. 最初のプロンプトの下にある「Config (構成)」をクリックします。
  6. このセキュア接続専用に自動生成された構成ファイルをダウンロードします。私のアプリでは、この構成ファイルの名前は、「f5bg64b8-e8ee-458f-9b1d-eb1dda8fea15_W520-config_file」となっています。
  7. 2 番目のプロンプトの下にある「Windows 64 bit (Windows 64 ビット)」をクリックします。
  8. windows-secure-connector-installer_64.exe ファイルをダウンロードします。

Windows マシン上で windows-secure-connector-installer_64.exe を実行して、Cast Iron のセキュア・コネクターをインストールします。

  1. 「Install (インストール)」 > 「Next (次へ)」の順にクリックします。
  2. 使用条件に同意してから「Next (次へ)」をクリックします。
  3. インストール・パスを「C:\Program Files (x86)\IBM\Secure_Connector_1.7.0.0.1」に指定して、「Next (次へ)」をクリックします。
  4. ターゲット・ディレクトリーを作成する旨のプロンプト・メッセージが表示されたら、「OK」をクリックします。
  5. 「Setup Shortcuts (ショートカットの設定)」では、「Next (次へ)」をクリックします。
  6. 「Installation (インストール)」では、「Finished (完了)」と表示されたら、「Next (次へ)」をクリックします。
  7. 「User Data (ユーザー・データ)」の「Secure Connector Configuration File (セキュア・コネクター構成ファイル)」では、f5bg64b8-e8ee-458f-9b1d-eb1dda8fea15_W520-config_file の場所を参照して、「Next (次へ)」をクリックします。
  8. 「User Data (ユーザー・データ)」の「Secure Connector Configuration (セキュア・コネクター構成)」では、「Next (次へ)」をクリックします。
  9. 「User Data (ユーザー・データ)」の「Proxy Configuration (プロキシー構成)」では、「Next (次へ)」をクリックします。
  10. 「User Data (ユーザー・データ)」の「Install and run Secure Connector as a Windows service (Windows サービスとしてセキュア・コネクターをインストールして実行する)」では、チェック・ボックスを選択して、「Next (次へ)」をクリックします。
  11. 「Perform External Process (外部プロセスの実行)」では「Processing (処理中)」が「3 / 3」になったら、「Next (次へ)」をクリックします。
  12. 「Create Third Party Jar (サード・パーティー JAR の作成)」では、「Next (次へ)」をクリックします。
  13. 変更を更新するか尋ねるプロンプト・メッセージが表示されたら、「NO (いいえ)」を選択します。
  14. 「Installation Finished (インストール完了)」では、「Installation has completed successfully. (インストールが完了しました。)」と表示されたら、「Done (完了)」をクリックします。

Windows サービス・パネルで Cast Iron セキュア・コネクター・サービスを起動します。

Bluemix の「Manage Secure Connections (セキュア接続の管理)」パネルで、以下の手順に従います。

  1. X」をクリックしてポップアップ・ウィンドウを閉じます。
  2. 「Action (アクション)」の下にある最新表示アイコンをクリックします。「Status (状況)」が「Not Connected (未接続)」から「Connected (接続済み)」に変わります。
  3. Done (完了)」をクリックします。 Bluemix の「Manage Secure Connections (セキュア接続の管理)」パネルの結果
    Bluemix の「Manage Secure Connections (セキュア接続の管理)」パネルの結果

ステップ 4. Cloud Integration エンタープライズ API を作成する

Bluemix にログインしている状態で、以下の手順に従います。

  1. DASHBOARD (ダッシュボード)」をクリックし、自分のアプリを選択してから「Cloud Integration」を選択し、「APIS (API)」をクリックします。次に、「Create API (API の作成)」をクリックします。
  2. 「How can others in this organization find your API? (この組織の他のユーザーはどのように API を検出できますか?)」というメッセージが表示されます。
  3. API 名として「W520」と入力します。
  4. API の説明として「W520 API」と入力します。
  5. Generate from an Enterprise Endpoint (エンタープライズ・エンドポイントから生成)」をクリックします。
  6. 「Resources (リソース)」の下にある「Connect to your first Enterprise Endpoint (最初のエンタープライズ・エンドポイントへの接続)」をクリックします。
  7. 「Connect to an Enterprise Endpoint (接続先エンタープライズ・エンドポイント)」では、「DB2」を選択します (訳注: 日本語版作成時点では、「Connect to an Endpoint (エンドポイントへの接続)」で「Database (データベース)」を選択するように変更されています)。
  8. 「Where is the database or SAP? W520 (Connected) (データベースまたは SAP の場所はどこですか? W520 (接続済み)」というメッセージが表示されます (訳注: 日本語版作成時点では、「Where is the endpoint? (エンドポイントの場所を指定してください。)」に「W520 (CONNECTED) (W520 (接続済み))」と表示され、「What is the database type? (データベース・タイプを指定してください)」で「DB2」を選択するように変更されています)。独自のデータベースを使用する場合は、以降のステップに示すようにそのデータベースの情報を入力します。
    「Name of Database (データベースの名前)」には、「icmnlsdb」と入力します。
  9. 「Hostname or IP Address (ホスト名または IP アドレス)」には、「localhost」と入力します。
  10. 「Port (ポート)」には、「50000」と入力します。
  11. 「Username (ユーザー名)」には、「icmadmin」と入力します。
  12. 「Password (パスワード)」には、パスワードを入力します。
  13. Connect (接続)」をクリックします。

接続が成功した後、以下のステップに従って API を作成します。

  1. 「Resources (リソース)」の下に、「Next, build your API by connecting to the Enterprise Endpoint you want to use (次に、使用するエンタープライズ・エンドポイントに接続して、API を作成してください)」というメッセージが表示されているはずです。独自のデータベースを使用する場合は、以降のステップに示すようにそのデータベースの情報を入力します。
    エンタープライズ・エンドポイントの選択では、「icmnlsdb-localhost W520」と入力します。
  2. スキーマの選択では、「ICMADMIN」と入力します。
  3. API を作成する対象のテーブルの選択では、「ICMSTRESOURCEMGR」と入力します。すると、「Now you can choose which resources you want to make available (使用可能にするリソースを選択できます)」というメッセージが表示されます。
  4. 右側の「Include (含める)」に、すべてのメソッド (GET、POST、PUT、DELETE) が示されていることを確認します。
  5. Create API (API を作成)」をクリックします。

ステップ 5. エンタープライズ API 情報を記録する

Cloud Integration エンタープライズ API を作成した後、作成した API のシークレット・キー情報と URL を記録しておきます。この情報は、後で DBStat Web サンプル・コードで使用します。

Bluemix にログインしている状態で、以下の手順に従います。

  1. DASHBOARD (ダッシュボード)」をクリックし、自分のアプリを選択してから「Cloud Integration」を選択し、「W520 API」をクリックします。
  2. シークレット API キーを書き留めます。

    例: 'API_SECRET' : 33d3f0b16e765e8d0c4d3b428abcdb4f18cfaa4cd38f6d1065093e512b32e9afe1aced892e42c59aea3082441e3c63f5

  3. GET URL を (スキーマ名まで) 書き留めます。

    例: https://provide.castiron.com/env/DatabaseEP/database/8e48ebd5-cc0c-4a96-a904-3e29609d737e

シークレット API キーと GET URL
シークレット API キーと GET URL

ステップ 6. Googleプロジェクトを作成して情報を記録する

Google プロジェクトから入手した情報は、後で Bluemix Push サービスを構成する際に使用します。

  1. https://cloud.google.com/console/project にアクセスします。
  2. Create Project (プロジェクトを作成)」をクリックします。
  3. プロジェクト名を入力します (例: DBStat)。
  4. 「I have read and agree to the Google Cloud Platform Terms of Service (Google Cloud Platform の利用規約を読んだうえで内容に同意します)」をクリックします。
  5. Create (作成)」をクリックします。
  6. ページ最上部に示されているプロジェクト番号を書き留めます。

    例: 62537192145

  7. 左側にある「APIs & auth (API と認証)」をクリックします。
  8. この「APIs & auth (API と認証)」の下にサブセクションが表示されたら、「APIs (API)」をクリックします。
  9. 「Google Cloud Messaging for Android」をオンにします (リストをスクロールダウンすると見つかります)。オンの状態になっている Google Cloud Messaging for Android のスクリーンショット
    オンの状態になっている Google Cloud Messaging for Android のスクリーンショット
  10. 左側にある「Credentials (認証情報)」をクリックします。
  11. Create new key (新しいキーを作成)」をクリックします。
  12. Server key (サーバー キー)」をクリックします。
  13. Create (作成)」をクリックします。
  14. API キーを書き留めます。

    例: BJabSyDQagRuBHscjVMz0VdO-Uxyrtm86dsMY3Y

ステップ 7. Bluemix Push サービスを構成する

Google プロジェクトから入手した情報を使用して、Push サービスを構成します。

Bluemix にログインしている状態で、以下の手順に従います。

  1. メニューで「DASHBOARD (ダッシュボード)」をクリックし、「Services (サービス)」の下にある「Push」をクリックします。
  2. 「Configuration (構成)」タブに「Google Cloud Messaging」が表示されます。「Google Cloud Messaging」の下にある「EDIT (編集)」をクリックします。
  3. 「Sandbox Configuration (サンドボックス構成)」と「Production Configuration (本番構成)」の両方に、GCM API キー (GCM API Key) と Google API プロジェクト番号 (Google API Project Number) を入力します。
  4. SAVE (保存)」をクリックします。
「Sandbox Configuration (サンドボックス構成)」と「Production Configuration (本番構成)」
「Sandbox Configuration (サンドボックス構成)」と「Production Configuration (本番構成)」

ステップ 8. サンプル Web アプリケーションのコードをダウンロードして構成する

以下の手順に従って、DBStat サンプル Web アプリケーションのソース・コードをダウンロードします。

  1. DevOps Services プロジェクトにアクセスして、メニューで「EDIT CODE (コードの編集)」をクリックします。以下のコマンドを使用してコードをダウンロードします。
    git clone https://hub.jazz.net/git/bluebrain/DBStatWebApp
  2. dbstat.properties ファイル (以下を参照) を編集して、自分の場合の情報を反映します。
  3. このコードは、GPL Version 2 の下でライセンスされている org.json-20120521.jar ファイルに対する依存関係があります。この JAR ファイルを https://code.google.com/p/org-json-java/downloads/list から入手して、DBStat コードの WEB-INF/lib フォルダーに追加します。この JAR は、JSON オブジェクトを構文解析するために使用されます。

: 以下のコードに示されている WEB-INF/classes/dbstat.properties ファイル内の値は、自分の場合の情報を反映するように変更する必要があります。

#DB schema and table name
DB_SCHEMA_NAME=ICMADMIN
DB_TABLE_NAME=ICMSTRESOURCEMGR

#only select the row which has the value "rmdb" in "RMNAME" column
DB_ROW_COLUMN_NAME=RMNAME
DB_ROW_COLUMN_VALUE=rmdb

#once the above row is selected, check the value in "RMFLAGS" column for DB status
DB_STATUS_COLUMN_NAME=RMFLAGS

#app id, app secret, and api secret
APP_ID=6e18da73-08e9-4d35-9190-a422541ffe07
APP_SECRET=322212ee2e2ad64636791bb2fb03b0f4760ebfa8
API_SECRET=33d3f0b16e765e8d0c4d3b428abcdb4f18cfaa4cd38f6d1065093e512b32e9afe1aced892e42c59aea3082441e3c63f5

#url to connect to DB
REST_API_URL=https://provide.castiron.com/env/DatabaseEP/database/8e48ebd5-cc0c-4a96-a904-3e29609d737e

上記の例での ICMSTRESOURCEMGR は、リソース・マネージャーの状況に関する情報を保管する、IBM Content Manager 内の Library Server テーブルです。リソース・マネージャーには「rmdb」という名前が付けられていて、この名前が RMNAME テーブル列に値として格納されています。リソース・マネージャーの状況の値は、RMFLAGS テーブル列に格納されます。

DBStat Web アプリケーションのコード

DBStat Web アプリケーションは、REST_API_URL を使用して、DB_TABLE_NAME テーブルの DB_ROW_COLUMN_NAME 列で、DB_ROW_COLUMN_VALUE 値が設定された行を照会します。

REST_API_URL = props.getProperty(REST_API_URL)+"/"+
					DB_SCHEMA_NAME+
					"/Tables/"+
					DB_TABLE_NAME+"?"+
					DB_ROW_COLUMN_NAME+"="+
					DB_ROW_COLUMN_VALUE;

//rest api url to read a DB table row
String Url_value  = REST_API_URL;
String serverURL = new URL(Url_value);
//bluemix app secret key
String API_SECRET_key = "API_SECRET";
String API_SECRET_value = API_SECRET;
httpConnection = (HttpURLConnection) serverURL.openConnection();
httpConnection.setRequestProperty(API_SECRET_key, API_SECRET_value);

照会に対する応答は、以下の例に示すように JSON フォーマットで返されます。

 {"rows":{"row":{"RMCODE":1,"RMPLATFORM":"0","USERID":"ICMADMIN                        ",
 "CHANGED":"2014-06-10 03:35:16.311","RMFLAGS":2,"TOKENDURATION":172800,"DOMAINID":2,
 "RMUSERID":"RMADMIN                         ","RMNAME":"rmdb",
 "INETADDR":"W520.svl.ibm.com","CURRENTVERSION":8.4.03.300,"CACHEOBJSIZELIMIT":"0.0",
 "RMPASSWORD2":"[B@abcd2a9b"}}}

上記の例では、DB 状況が "RMFLAGS":2 となっている "RMNAME":"rmdb" にマッチする行が 1 行返されています。この JSON オブジェクトを構文解析し、"RMFLAGS":2 の値 2 を DB 状況として取得する必要があります。

//parse json object for db status value in "DB_STATUS_COLUMN_NAME:dbStatus"
int dbStatus = -1;
JSONObject jsonObject = new JSONObject(builder.toString());
System.out.println("json object : "+jsonObject.toString());
System.out.println("rows : "+jsonObject.get("rows"));
if (jsonObject.get("rows").toString().length()>0) {
	jsonObject = (JSONObject) jsonObject.get("rows");
    	jsonObject = (JSONObject) jsonObject.get("row");
    	System.out.println("row : "+jsonObject.toString());
       	dbStatus = jsonObject.getInt(DB_STATUS_COLUMN_NAME);
       	System.out.println(DB_STATUS_COLUMN_NAME+" : "+dbStatus);
}

構文解析によって取得された DB 状況の値は、初期値として別の JSON オブジェクトに挿入されます。

//use "name" attribute in json object format to create mobile data object with data content of "DB_ROW_COLUMN_VALUE:dbStatus"
String json = "[{\"className\": \"Item\",\"attributes\":{\"name\": \""+DB_ROW_COLUMN_VALUE+":"+dbStatus+"\"}, \"objectId\": \""+DB_ROW_COLUMN_VALUE+"\"}]";

この JSON オブジェクトは、Data REST API を使用して Mobile Data に保管されます。

//rest api url to write new mobile data object
String Url_value  = "https://mobile.ng.bluemix.net:443/data/rest/v1/apps/"+APP_ID+"/uploads";

1 分間隔で、最新の DB 状況は、前に Mobile Data に保管された DB 状況に照らしてチェックされます。モバイル・データに対して、前に保管された DB 状況を照会するには、Data REST API を使用します。

//rest api url to read mobile data object with object id of DB_ROW_COLUMN_VALUE
String Url_value  = 
"https://mobile.ng.bluemix.net:443/data/rest/v1/apps/"+APP_ID+"/objects/"+DB_ROW_COLUMN_VALUE;

Mobile Data からの応答も JSON フォーマットで返されるため、この応答を構文解析して、前に保管された DB 状況を取得します。

//parse "name" attribute in json object to get db status value in "DB_ROW_COLUMN_VALUE:dbStatus"
int dbStatus = -3;
if (jsonArray.length()==0) {
      	System.out.println("dbStatus="+dbStatus);
} else {
        String name = null;
        jsonObject = (JSONObject) jsonArray.get(0);
        System.out.println("object : "+jsonObject.toString());
        System.out.println("attributes : "+jsonObject.get("attributes"));
        jsonObject = (JSONObject) jsonObject.get("attributes");
        System.out.println("object : "+jsonObject.get("name"));
        name = (String) jsonObject.get("name");
        System.out.println("name="+name);
        dbStatus = Integer.parseInt(name.substring(name.indexOf(':')+1));
	System.out.println("dbStatus="+dbStatus);
}

DB 状況が変更されている場合は、モバイル・データを更新してプッシュ通知を送信します。具体的には、プッシュ・メッセージを使用して JSON オブジェクトを形成し、それを Push REST API によって送信します。

//use json object format for push message with message content of "DB_ROW_COLUMN_VALUE:dbStatus"
String message = "{ \"message\": { \"alert\": \""+DB_ROW_COLUMN_VALUE+":"+dbStatus+"\" }, 
\"target\": { \"platforms\": 
[\"G\"] } }";		
//rest api url to send push notification
String Url_value  = "https://mobile.ng.bluemix.net:443/push/v1/apps/"+APP_ID+"/messages";

1 分間隔という時間設定は、DBStatListener.java ファイル内のコードを編集することで、変更することができます。

publicvoid contextInitialized(ServletContextEvent event) {
    scheduler = Executors.newSingleThreadScheduledExecutor();
    scheduler.scheduleAtFixedRate(new DBStatRunner(),// run DBStatRunner()
    		0, // run after 0 minutes
    		1, // repeat every 1 minute
    		TimeUnit.MINUTES); // use minutes for the units
}

ステップ 9. Push モバイル・アプリをダウンロードしてインストールする

Android 端末を DBStat プッシュ・サービスに登録するために、私は quickstart-push の quickstart-push-android アプリを使用しました。Eclipse プロジェクトで quickstart-push-android アプリを使用するには、Google Play サービスのライブラリーをインストールして Eclipse プロジェクトを作成する必要があります。

Google Play サービス

  1. Android SDK Manager を実行します (Eclipse またはコマンド・ラインを使用)。
  2. 「Packages (パッケージ)」セクションの「Extras (その他)」から「Google Play services (Google Play サービス)」をインストールします。
  3. お使いのマシンにインストールした Google Play サービスの中にある google-play-services_lib フォルダーを見つけます。私のマシンでは、このフォルダーのパスは sdk\extras\google\google_play_services\libproject\google-play-services_lib となっています。
  4. Eclipse で、「Import (インポート)」 > 「Android」 > 「Existing Android Code Into Workspace (既存の Android コードをワークスペークへ)」 > 「Next (次へ)」の順に選択します。
  5. ルート・ディレクトリーを選択します (google-play-services_lib フォルダーの場所を参照して選択します)。
  6. 「Copy projects into workspace (プロジェクトをワークスペースにコピーする)」にチェック・マークを付けます。
  7. Finish (完了)」をクリックします。

新しく作成された Eclipse プロジェクトがコンパイルされない場合、.classpath および project.properties ファイルの中身をチェックしてください。

.classpath ファイルは、以下のように設定されている必要があります。

<classpath>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>

project.properties ファイルは以下の内容になっている必要があります

target=Google Inc.:Google APIs (x86 System Image):19
android.library=true

Eclipse でプロジェクトを最新の表示にします。Eclipse プロジェクトの google-play-services_lib\bin ディレクトリーに google-play-services_lib.jar ファイルが生成されているはずです。

これで、Push アプリをダウンロードして、そのアプリ用に Eclipse プロジェクトを作成することができます。

Push モバイル・アプリ

  1. quickstart-push をダウンロードします。
  2. quickstart-push ディレクトリー内で quickstart-push-android フォルダーを見つけます。
  3. Eclipse で、「Import (インポート)」 > 「Android」 > 「Existing Android Code Into Workspace (既存の Android コードをワークスペークへ)」 > 「Next (次へ)」の順に選択します。
  4. ルート・ディレクトリーを選択します (google-play-services_lib フォルダーの場所を参照して選択します)。
  5. 「Copy projects into workspace (プロジェクトをワークスペースにコピーする)」にチェック・マークを付けます。
  6. Finish (完了)」をクリックします。

.classpath ファイルに以下の 2 つの余分なプロジェクト行がある場合は、それらの行を削除します。

<classpathentry combineaccessrules="false" kind="src" path="/IBMBluemix_AndroidSDK"/>
<classpathentry combineaccessrules="false" kind="src" path="/PushWorks_AndroidSDK"/>

Bluemix SDK の ibm-bluemix-sdk-android.zip ファイルから以下の 2 つの JAR ファイルを取得して、新しく作成した Eclipse のプロジェクトの libs フォルダーに追加します。

ibmbluemix.jar
ibmpush.jar

assets\bluelist.properties ファイルを編集して、自分のアプリの情報を入力します。

applicationID=6e18da73-08e9-4d35-9190-a422541ffe07
applicationSecret=322212ee2e2ad64636791bb2fb03b0f4760ebfa8
applicationRoute=DBStat.mybluemix.net

新しく作成された Eclipse プロジェクトがコンパイルされない場合、.classpath ファイルおよび project.properties ファイルの内容をチェックしてください。

.classpath ファイルは以下のように設定されている必要があります。

<classpath>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>

project.properties ファイルは以下の内容になっている必要があります

target=Google Inc.:Google APIs:19
android.library.reference.1=..\\google-play-services_lib

Eclipse でプロジェクトを最新の表示にします。この時点で、Push アプリを Android 端末にインストールできる状態になります。

<プロジェクト名> を右クリックして、「Run As (実行)」 > 「Android Application (Android アプリケーション)」の順に選択し、QuickStartPushDemo_Android.apk をインストールします。

Android 端末にインストールされたアプリの名前は、PushServiceQuickStart になります。アプリを初めて実行した後、自分の端末が登録されていることを示す情報が画面に表示されます。

例:

Device is registered with Push Service (端末は Push サービスに登録されています)

Device Id: 6515ed621fde007c807c4130

ステップ 10. サンプル Android モバイル・アプリのコードをダウンロードしてインストールする

DBStat サンプル・モバイル・アプリのベースとしては、bluelist-mobiledata アプリのソース・コードを使用しました。bluelist-mobiledata アプリのソース・コードは、画面要素を簡素にするように変更してあり、このチュートリアルで使用する最新表示ボタンを追加してあります。このコードをダウンロードして専用の Eclipse プロジェクトを作成します。

DBStat モバイル・アプリ

  1. コマンド git clone https://hub.jazz.net/git/bluebrain/DBStatMobileApp を実行して、DBStat モバイル・アプリを入手します。
  2. Eclipse で、「Import (インポート)」 > 「Android」 > 「Existing Android Code Into Workspace (既存の Android コードをワークスペークへ)」 > 「Next (次へ)」の順に選択します。
  3. ルート・ディレクトリーを選択します (DBStatMobileApp フォルダーの場所を参照して選択します)。
  4. 「Copy projects into workspace (プロジェクトをワークスペースにコピーする)」にチェック・マークを付けます。
  5. Finish (完了)」をクリックします。

Bluemix SDK の ibm-bluemix-sdk-android.zip ファイルから以下の 4 つの JAR ファイルを取得して、新しく作成した Eclipse のプロジェクトの libs フォルダーに追加します。

ibmbluemix.jar
ibmcloudcode.jar
ibmdata.jar
ibmfilesync.jar

assets\bluelist.properties ファイルを編集して、自分のアプリの情報を入力します。

applicationID=6e18da73-08e9-4d35-9190-a422541ffe07
applicationSecret=322212ee2e2ad64636791bb2fb03b0f4760ebfa8
applicationRoute=DBStat.mybluemix.net

Eclipse でプロジェクトを最新の表示にします。新しく作成された Eclipse プロジェクトがコンパイルされない場合、.classpath ファイルと project.properties ファイルの内容をチェックしてください。

.classpath ファイルは以下のように設定されている必要があります。

<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>

project.properties ファイルは以下の内容になっている必要があります

target=android-19
android.library=false

Eclipse でプロジェクトを最新の表示にします。この時点で、DBStat アプリを Android 端末にインストールできる状態になります。

<DBStat のプロジェクト名> を右クリックして、「Run As (実行)」 > 「Android Application (Android アプリケーション)」の順に選択し、DBStat.apk をインストールします。

ステップ 11. CF コマンド・ラインをダウンロードしてインストールする

https://github.com/cloudfoundry/cli/releases から CF コマンド・ラインを入手してインストールします。CF コマンド・ラインは、次のセクションで DBStat Web アプリケーションを Bluemix にプッシュするために使用します。

ステップ 12. サンプル Web アプリケーションを Bluemix にデプロイする

DBStat Web アプリケーションを Bluemix にプッシュするには、cf コマンドを使用する必要があります。以下の手順に従ってください。

  1. cd <DBStatWebApp ファイルがあるディレクトリー>
  2. cf login
  3. Bluemix にログインするために使用する IBM ID を入力します。
    <e-メール>
  4. <パスワード>

    以下のような画面が表示されます。

    cf login
    API endpoint: https://api.ng.bluemix.net
    
    Email> <your_IBM_id>
    
    Password>
    Authenticating...
    OK
    
    Targeted org <your_IBM_id>
    
    Targeted space dev
    
    
    API endpoint: https://api.ng.bluemix.net (API version: 2.4.0)
    User:         <your_IBM_id>
    Org:          <your_IBM_id>
    Space:        dev
  5. cf push DBStat

    以下のような画面が表示されます。

    cf push DBStat
    Updating app DBStat in org <your_IBM_id> / space dev as <your_IBM_id>...
    OK
    
    Uploading DBStat...
    Uploading app files from: C:\DBStatWebApp
    Uploading 119.7K, 14 files
    OK
    
    Starting app DBStat in org <your_IBM_id> / space dev as <your_IBM_id>...
    -----> Downloaded app package (252K)
    OK
    -----> Downloaded app buildpack cache (4.0K)
        -----> Liberty Buildpack Version: v1.5-20140923-1143
    -----> Retrieving IBM 1.7.1 JRE (ibm-java-jre-7.1-1.0-pxa6470_27sr1fp2-20140828_01-sfj.tgz) ... (0.0s)
             Expanding JRE to .java ... (0.8s)
    -----> Retrieving com.ibm.ws.liberty-2014.9.0.0-201409231143.tar.gz ... (0.0s)
    -----> Uploading droplet (105M)
    
    0 of 1 instances running, 1 starting
    0 of 1 instances running, 1 starting
    0 of 1 instances running, 1 starting
    1 of 1 instances running
    
    App started
    
    Showing health and status for app DBStat in org <your_IBM_id> / space dev as <your_IBM_id>...
    OK
    
    requested state: started
    instances: 1/1
    usage: 512M x 1 instances
    urls: DBStat.mybluemix.net
    
         state     since                    cpu    memory          disk
    #0   running   2014-09-27 12:14:05 PM   0.0%   98.1M of 512M   141.5M of 1G
    
    access https://DBStat.mybluemix.net at least once for initialization to take place

結果をテストする

インストールが正常に完了して、DBStat Web アプリケーションが Bluemix 内で起動されたら、ブラウザーでいったんこの Web アプリケーション (http://DBStat.mybluemix.net) にアクセスして、Liberty アプリケーションの初期化を開始する必要があります。最初の初期化は、完了するまで約 30 秒待機する必要があります。最初の初期化が完了した後は、Android 端末で DBStat モバイル・アプリを実行して、オンプレミス・データベースのテーブル値の現在の状況を確認することができます。

IBM Content Manager のリソース・マネージャーの状況を対象とした、このチュートリアルのサンプル・テーブルおよびデータベースを使用した場合、DBStat モバイル・アプリに <RM_DB_name>:<single_digit> の状況が表示されます。私の IBM Content Manager インストール済み環境でリソース・マネージャーが稼働中の場合、状況は「rmdb:2」として表示されます。リソース・マネージャーがダウンすると、1 分後にプッシュ通知を受け取り、状況が「rmdb:6」であることが示されます。

モニター対象のリソースが稼働中であることを示す DBStat モバイル・アプリ
モニター対象のリソースが稼働中であることを示す DBStat モバイル・アプリ

まとめ

このチュートリアルでは、Liberty for Java ランタイムを使用して Web アプリケーションを作成する方法を紹介しました。この Web アプリケーションは、オンプレミス・データベースのテーブル列値をチェックして、テーブル値が変更されているときにはプッシュ通知を送信し、Android モバイル・アプリから最新のテーブル値を表示するアプリケーションです。皆さんもオンプレミス・データベースをモニターする、同様のアプリケーションを無事作成できるよう願っています。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Cloud computing
ArticleID=999226
ArticleTitle=オンプレミス・データベースのテーブル値をモニターする Android アプリと Web アプリケーションを作成する
publish-date=03052015