プログラムを作成
実際にJMSを使って、非同期通信を実装します。
準備
JMSはJava SEではなくJava EEの仕様です。筆者の連載「GlassFishからアプローチするJava~入門編~」の第1回で述べたとおり、Java EEに準拠した製品ではあってもJava EEの全ての仕様をカバーしているわけではありません。たとえばTomcatという非常に優れたWebアプリケーションサーバがありますが、ServletやJSPの仕様は実装していますが、JMSは実装していません。このような場合、JMS製品と組み合わせる必要があります。たとえば同じApacheのActiveMQと組み合わせることによりTomcatにJMSの機能を組み込むことが可能です。
今回は非同期通信を説明することが目的であるため、設定が簡単なGlassFishというWebアプリケーションサーバを使用します。GlassFishはMOMの機能を持っているため、組み合わせるという手間が省けます。また、開発環境はNetBeansを採用します。インストールの仕方は「GlassFishからアプローチするJava~入門編~」の第1回に詳細に記述していますので、それに沿ってインストールしていただければと思います。
JMSを使うための設定
「表1.JMSのプレイヤーズ」でコネクションファクトリとデスティネーション(キューやトピック)が管理オブジェクトであり、MOM製品をカプセル化していると説明しました。MOM自体はリソースであり、リソースの場合カプセル化することで使用できます。データベースを接続する場合も接続するための設定が必要なようにMOMに接続する場合も設定が必要です。JMSの場合、コネクションファクトリとデスティネーションの設定が必要となります。
新規プロジェクトの作成
今回は簡単なJavaアプリケーションを2つ作成します。1つが送信側、もう1つが受信側のPTPのアプリケーションです。次回、業務で使えるためにMDB(Message-Driven Bean)を使いWebアプリケーション同士での非同期通信を説明します。
NetBeansを起動し[ファイル]-[新規プロジェクト]-[プロジェクト選択]を選択すると、右ペインにカテゴリ、プロジェクトとあります。カテゴリで[Java]を選択すると、プロジェクトに複数のプロジェクト候補が表示されますが、今回は[Javaアプリケーション]を選択します。
[次へ]ボタンをクリックすると[名前と場所]画面が表示されます。プロジェクト名に「PTPSender」と入力します。
下から2番目にある「主クラスを生成」では、既にチェックボックスにチェックが入った状態になっており、「ptpsender.Main」と自動的にパッケージ名を含んだ主クラス名が設定されています。プログラム名は後から見て名前からその責務がわかるようにすべきであると思います。今回はクラス名を「jmssample01.PtpSender」と変更し、[完了]ボタンをクリックします。
左ペインのプロジェクトタブを開くと[PTPSender]プロジェクトが作成され、右ペインにはPtpSenderプログラムを編集するためのエディタが開いているはずです。
受信側のプロジェクト「PTPReceiver」も同様の方法で作成してください。クラス名は「jmssample01.PtpReceiver」とします。
プログラムの作成は一旦置いておき、JMSの設定をまず行います。そのためにはGlassFish管理コンソールを開く必要があります。今回、初めてNetBeansを使用される方は、左ペインに[サービス]タブがないと思います。その場合は[ウィンドウ]-[サービス]と選択することで左ペインに[サービス]タブが現れます。
javaee.jarの追加
当記事のサンプルコードはスタンドアロンのJavaアプリケーションであるため、NetBeansでJavaアプリケーションを選択しても、JMSのjarファイルはライブラリに追加されません。また、GlassFishはOpenMQというMOMを取り込んでいるため「XXXjms.jar」などのjarファイルは存在しません。したがって、JMSのクラスが含まれているjavaee.jarファイルをライブラリに追加する必要があります。
NetBeansで[プロジェクト]-[ライブラリ]を開き右クリックし[Jar/フォルダを追加]を選択すると、Jarまたはフォルダの選択画面が表示されます。デフォルトのインストールでは「C:\Sun\AppServer\lib」フォルダにjavaee.jarファイルがあり追加します。デフォルトでない場合はインストール先を指定してください。