Eclipseで "Hello world" メッセージを送信するプログラムを作成(プリント出力用全文)
Eclipseによる iPush クライアント開発の手順
July 4, 2006, by Tony Hsiao, Technical Consultant of ICE Technology Corp.
レベル: 初級
API: Java パッケージ
背景
本稿では、Java開発ツールのEclipseを使用し、わずか10分程度で簡単な iPush クライアントが作成できることをご紹介いたします。
iPush を使用することで、リアルタイムメッセージ配信アプリケーション開発が簡単に行えることがご理解いただけるでしょう。
事前にご用意いただくもの
本稿のプログラミング事例を始められる前に、以下をご用意ください。
- J2SDK 1.3 以降 (J2SDK は http://java.sun.comより入手いただけます)
- Eclipse 3.0 以降 (Eclipse は http://www.eclipse.orgより入手いただけます)
- iPush V2 Java パッケージ API (Java.zip) を入手し任意のフォルダーに展開 (get iPush V2 Java パッケージ API は http://jp.icetechnology.com/developer/download.jspより入手いただけます。事前にICE デベロッパーセンターへの登録が必要となります。)
早速はじめましょう!
以下の手順に従って、Eclipse を用いた iPush Java アプリケーションを作成ください。
ステップ 1 - 新規プロジェクトを作成
Eclipse を起動し、[File] / [New] / [Project]を選択します。

図 1. 新規プロジェクトの作成
ステップ 2 - ウィザードを選択
(a) [New Project] ダイアログで Java Project を選択してウィザードを起動します。
(b) [Next] ボタンをクリックします。

図 2. Java プロジェクトウィザードを選択
ステップ 3 - プロジェクトのプロパティを設定
(a) [New Java Project] ダイアログで、プロジェクト名フィールドに iPushDemo と入力します。
(b) "Project layout"は Create separate source and output foldersを選択します。
(c) [Next] ボタンをクリックします。

図 3. プロジェクト名を設定
ステップ 4 - iPush Java API をプロジェクトに追加
(a) <Libraries>タブをクリックして、[Add External JARs] ボタンをクリックします。

図 4. <Libraries> タブを表示
(b) ポップアップされる [JAR Selection] ダイアログで、ダウンロードして入手した iPush V2 Java パッケージ・ライブラリのファイル iceipush2.jar を選択します。

図 5. 外部パッケージとして iceipush2.jar を追加
注: J2SDK 1.5 または JRE 1.5 をご利用の場合は、iceipush2.jar の代わりに iceipush2_jvm1.5.jar を選択されることで、iPush サーバーへの接続をより早く行うことができます。
(c) iceipush2.jar がダイアログに表示されます。 [Finish] ボタンをクリックして新規プロジェクトを作成します。

図 6. 終了して iPushDemo プロジェクトを作成
ステップ 5 - プロジェクトのコンポーネントを確認
Eclipseワークベンチに戻ると、パッケージ・エクスプローラーに iPushDemo プロジェクトが作成され、JAR ファイルがインクルードされていることが確認できます。

図 7. iPushDemo プロジェクトのコンポーネントを確認
ステップ 6 - iPushDemo に新規クラスを作成
iPushDemo に新規クラスを作成し、プロパティを設定します。
(a) マウスカーソルを iPushDemo プロジェクトの src フォルダに合わせてマウスの右ボタンを押し、メニューから [New] / [Class]を選択します。

図 8. 新規クラスの作成
(b) [New Java Class] ダイアログで、名称フィールドに iPushDemo と入力します。
(c) Which method stubs would you like to create? の箇所で、Eclipseが自動的にメソッドを生成するように、3項目が全てチェックされているかを確認します。
(d) [Add] ボタンをクリックします。

図 9. iPushDemo クラスのプロパティの設定
(e) Choose interfaces フィールドに iPush(大文字小文字を区別します)と入力します。Matching types リストに iPush2MsgListener が表示されます。
(f) iPush2MsgListenerを選択して[Add] ボタンをクリックし、Interfaces リストに追加します。

図 10. iPush2MsgListener インターフェースを選択
(g) [OK] ボタンをクリックして [New Java Class] ダイアログに戻ります。
(h) [New Java Class] ダイアログの Interfaces 欄に com.icetech.ipush2.iPush2MsgListener が表示されていることを確認します。
(i) [Finish] ボタンをクリックして新規クラス iPushDemo を作成します。

図 11. 終了して iPushDemo の新規クラスを作成
ステップ 7 - iPushDemo の新規クラスを確認
Java エディターで iPushDemo クラスの関数の構成が確認できます。

図 12. iPushDemo クラスの関数の構成
ステップ 8 - iPush2Link クラスのインスタンス - ip1 を作成
iPush サーバー通信のメインのオブジェクトである iPush2Link のインスタンスを作成します。
これまで一度も iPush アプリケーションの開発を行なったことがないのであれば、どうやれば iPush APIの正確なクラス名を知ることができるのか、と疑問に思われるかもしれません。
心配ご無用です。Eclipseのコード・アシストを利用することで簡単にクラス名を見つけることができます。
(a) 図 13 のように、class iPushDemo implements iPush2MsgListener の先頭行に private com.icetech.ipush2. (パッケージ名) を入力します。
(b) コード・アシストが、入力文字列にマッチしたクラスとインターフェースを全て表示します。
(c) iPush2Link を選択します。

図 13. プログラミング補助にコード・アシストを使用
(d) コード・アシストが選択したクラスのフル名称(ここでは iPush2Link)を自動生成します。

図 14. コード・アシストによる選択したクラスのフル名称の自動生成
(e) iPush2Link クラスのインスタンス ip1 を宣言し、作成します。
|
private iPush2Link ip1 = new iPush2Link(); |

図 15. iPush2Link クラスのインスタンス ip1 を宣言
ステップ 9 - 接続 ID を保持する integer 変数を宣言
iPush サーバーへの接続に成功すると、各クライアントはそれぞれユニークな接続 ID を持つことになります。
ここでは connId という名称で接続 ID を保持する integer 変数を宣言します。接続 ID は接続後に様々なメソッドが実行される上で非常に重要です。

図 16. 変数 connId を接続 ID の保持に使用
ステップ 10 - iPush サーバーに接続
コンストラクタ iPushDemo() で iPush サーバーに接続します。
(a) ip1 が ipushTCPConnect() を実行してサーバーに接続し、戻り値を connId に格納するようにします。
|
connId = ip1.ipushTCPConnect(); |

図 17. connId = ip1.ipushT と入力してコード・アシストを用いコードを記述
ステップ 11 - 必要な引数を確認
コード・アシストは9つの引数(arg0〜8)が必要なことを示します。以下の通りです。
- iPush2MsgListener
- iPush Server IP
- iPush Server Port
- Proxy IP
- Proxy Port
- Group
- Product
- Username
- Password

図 18. iPush サーバー接続には9つの引数が必要
ステップ 12 - 引数に値を指定
この例題を進めるにあたって、ICEテクノロジーの公開 iPush サーバーにデモ用のサービスとアカウントが設定されています。
- iPush2MsgListener: this
- iPush Server IP: "www.icetechnology.com"
- iPush Server Port: 8000
- Proxy IP: "" (ご利用のネットワーク環境に依存します。空白文字はプロクシーを使用しないことを意味します。)
- Proxy Port: 0 (ご利用のネットワーク環境に依存します。 0 はプロクシーを使用しないことを意味します。)
- Group: "ICE"
- Product: "iPush"
- Username: "eclipse"
- Password: "eclipse"
|
ip1.ipushTCPConnect(this,"www.icetechnology.com",8000,"",0,"ICE","iPush","eclipse","eclipse"); |

図 19. デモアカウントまたは既にご利用のアカウントの値を引数に指定
想定外のメッセージの受信を避けるため(他のユーザーもデモアカウントを利用するため)に、ご自身の iPush アカウントを使用されることをお勧めします。
ICE テクノロジーでは次の2通りの方法で、無料にて iPush アカウントをご提供しております。
- ICE テクノロジーのクイックスタートサービスを申し込む
- ダウンロード及び無料の試用ライセンスを取得にて、ご自身で iPush サーバーを導入
事前にICE デベロッパーセンターへ登録が必要となります。
ステップ 13 - デモ用サブジェクト demo.eclipse.[あなたの名前] をサブスクライブ
ipushTCPConnect()をコールした後は、戻り値(connId の値)を確認する必要があります。接続が成功していれば、connId は 0 より大きい値になります。そうでない場合、connIdは 0 未満の値になります。
例題では、クライアントは connId が 0 より大きい値ならばコンソールに "Connect OK!" のメッセージを表示し、直後に ipushSubSubject() メソッドを呼び出してデモ用サブジェクトをサブスクライブするようにしています。
以下の引数が必要となります。
- コネクション ID: クライアントのコネクション ID。ここでは connId になります。
- サブジェクト名: サブスクライブされるサブジェクト名。ここでは demo.eclipse.[あなたの名前] になります。
[あなたの名前] はご自身のお名前もしくはその他の任意の文字列(シングルバイトの英数字を使用し、空白文字は含めないでください)になります。
サブスクライブされるサブジェクト名にあなた自身のお名前を使用するのは、サブジェクト名の重複を回避するためです。他の開発者も本稿に基づいて例題を実行しますので、他人が送信したメッセージを受信しないよう、サブジェクトのルート demo.eclipse にあなた自身のお名前を追加してください。
例題では、本稿の作成者の名前 tonyhsiao を用いております。
|
if (connId > 0) { |

図 20. メッセージ受信にあなたの名前を付与したサブジェクトをサブスクライブ
ステップ 14 - クイックフィックスで try/catch コードを追加
ipushSubSubject() メソッドのすぐ下の行に赤線が表示され、何らかのコードの誤りが示されています。左側のクイックフィックス・アイコンをクリックして [Surround with try/catch] を選択することで、Eclipseは try/catch コードの追加を助けます。

図 21. 左側のクイックフィックス・アイコンがコードの誤りを表示
|
try { |

図 22. クイックフィックスが try/catch コードの追加を支援
ステップ 15 - iPush サーバー接続に失敗した場合にエラーメッセージを表示
connId の値が 0 未満の場合に、iPush サーバーへの接続の失敗を通知するメッセージをクライアントに表示するようにします。
各リターンコードの内容については、iPush V2 Java API プログラミングガイド(ファイル名: iPushV2_PG_Java_v2.x.x.pdf)中のステータスコードに関するページを参照ください。
|
else { |

図 23. iPush サーバー接続に失敗した場合にエラーメッセージを表示
ステップ 16 - iPush サーバーから受信したメッセージを表示
メッセージを受け取ると、コールバック・メソッド onSubjectMessage() が呼び出されます。System.out.println() を使用し、サブジェクト名とメッセージ内容をコンソールに表示します。
onSubjectMessage() の引数は次の通りです。
- arg1: 受信したメッセージのサブジェクト名
- arg3: 受信メッセージの内容。バイト配列で保持されます。
- arg4: 受信メッセージのバイト長。
従って String(arg3, 0, arg4) はメッセージ内容のテキスト文字表現を返します。
|
System.out.println("Subject = " + arg1 + ", Data = " + new String(arg3, 0, arg4)); |

図 24. onSubjectMessage() により受信メッセージのサブジェクト名と内容を表示
ステップ 17 - main() 関数に iPushDemo クラスのインスタンスを作成
最後に main() 関数に iPushDemo クラスのインスタンスを作成して、iPush クライアントの例題を完成します。
|
new iPushDemo(); |

図 25. iPushDemo クラスのインスタンスを作成
動作確認 1 - Java アプリケーションとして実行
プログラムが正常に動作するか、試してみましょう。
[Run] / [Run As] / [Java Application]を選択して例題を実行します。
iPush サーバーへの接続に成功したならば、コンソール・ビューに Connect OK! と表示されます。
そうでないならば、ご使用のネットワーク環境を確認するか、ステップ 12 でご紹介した情報に基づき、接続失敗の原因につきチェックください。

図 26. Java アプリケーションとして例題を実行

図 27. iPush サーバーへの接続に成功すると、コンソール・ビューに Connect OK! と表示される
ここでクライアントはサブジェクト demo.eclipse.[あなたの名前] をサブスクライブしていますので、iPush サーバーよりプッシュされたメッセージを受信可能となっています。
動作確認 2 - メッセージの送り手として iPush2JavaSubjectSample を実行
サンプル・プログラムの iPush2JavaSubjectSample (iPush V2 クライアント Java パッケージに同梱) を使用して、iPush サーバーにメッセージを送信します。
The Java のソースコードは、iPush V2 Java パッケージ API のサブフォルダ Samples\iPush2JavaSubjectSample にありますので、ご使用の J2SDK 環境でコンパイルの上、実行してください。
注: iPush2JavaSubjectSample をコンパイルおよび実行する際には、make.bat と run.bat (上記サブフォルダにあります) のパス指定を、ご使用の環境と合わせてください。
iPush2JavaSubjectSample を実行しましたら、iPush サーバーに接続するため、以下の情報を入力してください。:
- Server: www.icetechnology.com
- Port: 8000
- Company: ICE
- Product: iPush
- Username: eclipse
- Password: eclipse

図 28. メッセージの送り手として iPush2JavaSubjectSample を実行
[Connect TCP] ボタンをクリックしてください。
接続されますと、ステータス情報 Connect to server [www.icetechnology.com] with Connection ID [x] が表示されます。
demo.eclipse.[あなたの名前] のサブジェクト名でメッセージを送信します。
(a) Subject 欄に demo.eclipse.[あなたの名前] を入力します。ステップ 13 でサブスクライブしたものと同一のサブジェクト名にする必要があります。
(b) Message 欄に Hello, world! と入力します。
(c) [Send subject msg] ボタンをクリックして iPush サーバーにメッセージを送信します。

図 29. サブジェクト demo.eclipse.[あなたの名前] で iPush サーバーに Hello, world! を送信
ステータス情報 Sent: Hello world! が表示されます。
動作確認 3 - Eclipse 上で受信メッセージを確認
Eclipse のコンソール・ビューを確認すると、Subject = demo.eclipse.[あなたの名前], Data = Hello world! が表示されるはずです。
表示されていれば、例題は正しく動作しています。

図 30. Subject = demo.eclipse.[あなたの名前], Data = Hello world! が Eclipse のコンソール・ビューに表示される
例題クライアントは iPush サーバーから更にメッセージを受信できます。また更にコードを追加することも可能です。
Eclipse コンソール・ビューの [Terminate] ツールボタンをクリックしてプログラムを停止します。

図 31. 例題クライアントの実行を停止
更に改良 - 自動返答ロボット
Eclipse の Java エディターに戻って、メソッド OnSubjectMessage() のところで ip1 が受信メッセージに応えて demo.eclipse.[あなたの名前]_reply というサブジェクト経由で(非パーシステント)メッセージ Hello world, too! を送り返すようにします。
ここでは iPush サーバーに応答メッセージを送信するメソッド ipushSendNPSubjectData() を使用します。引数は次の通りです:
- arg0: 接続 ID.
- arg1: 送信サブジェクト名。ここでは "demo.eclipse.[あなたの名前]_reply" になります。
- arg2: 送信メッセージ本体。ここでは "Hello world, too!" になります。
- arg3: メッセージのプライオリティ。ここでは値 5 にします。
- arg4: メッセージの QoS レベル。ここでは値 0 にします。
|
ip1.ipushSendNPSubjectData(connId, "demo.eclipse.tonyhsiao_reply", "Hello world, too!", (byte)5, (byte)0); |

図 32. 自動返答ロボットを追加
ここでも ipushSendNPSubjectData() メソッドの左側にクイック・フィックス・エラーが表示されますので、アイコンをクリックし [Surround with try/catch] を選択して修正します。

図 33. クイック・フィックス・エラーのアイコンをクリック
|
try { |

図 34. クイック・フィックスが try/catch コードの追加を支援
動作確認 4 - 双方向通信
もう一度例題を実行します。
(a) Eclipse 上で、[Run] / [Run As] / [Java Application] を選択します。 Connect OK! がコンソール・ビューに表示されます。
(b) 実行中であれば iPush2JavaSubjectSample ウィンドウに移ります。
(c) Subject 欄に demo.eclipse.[あなたの名前]_reply と入力します。必ず上記「更に改良 - 自動返答ロボット」と同一のサブジェクト名を入力してください。
(d) [Subscribe subject] ボタンをクリックしてサブジェクトをサブスクライブします。
次のようなステータス情報が表示されます。
Subject subscribed [demo.eclipse.[あなたの名前]_reply]
iPush[1]:Subject Command OK (700-demo.eclipse.[あなたの名前]_reply)

図 35. iPush2JavaSubjectSample でサブジェクト demo.eclipse.[あなたの名前]_reply をサブスクライブ
(e) iPush2JavaSubjectSample 画面の Subject 欄に demo.eclipse.[あなたの名前] を入力します。ステップ 13 でサブスクライブしたものと同一のサブジェクト名にする必要があります。
(f) [Send subject msg] ボタンをクリックしてメッセージ Hello world! を送信します。

図 36. メッセージ Hello world! を再び送信
(g) Eclipse のコンソール・ビューに Hello world! が表示され、同時に Hello world, too! が iPush2JavaSubjectSample 画面に表示されます。例題クライアントは iPush サーバーを経由してメッセージの送受信を行なえるようになります。このことは iPush アプリケーションは双方向通信が可能であることを示します。

図 37. iPush アプリケーションは双方向通信が可能
終わりに - Eclipse で簡単に iPush アプリケーションが開発できます。
本例題を通じて、iPush アプリケーションの開発がいかに簡単かつ素早くできるかがお分かりいただけたものと思います。Eclipse と iPush V2 Java パッケージ API を使用すれば、ほんのわずかの時間でリアルタイム Java アプリケーション及びアプレットを作成できます。