第2回 XdocletでEJB作成を簡単にする
EJBコンソーシアム
2004/8/12
主な内容 EJBの構成要素 JBossIDEを使ってEJBを作ろう JBoss上でEJBを動かそう |
本連載の第1回「EJBの学習の準備」にてEJBが難しいと思われる理由として以下のものを挙げました。
- EJBを開発する環境や実行する環境を作るのは難しいのでは?
- デプロイメントディスクリプタや各種インターフェイスなど付加的なものがあって難しそう
- EJBを使うメリットが分かりづらい
さらに第1回では、JBoss、Eclipse、JBossIDEを用いて開発環境を整えることにより、1つ目の問題点に答えました。
今回は、前回整えた環境のうえで、XDocletを用いてSession Beanを作ることにより、付加的なファイルを自動生成できることを示し、2つ目の問題に答えていきます。
なお、今回からEclipseを操作していきますが、慣れていない方は「連載:Eclipseを使おう!」を参考にしてください。
|
EJB の構成要素 |
EJBにはSession Bean、Entity Bean、Message-driven Beanの3種類があります。Session Beanは主にビジネスロジックを扱うEJBで、クライアントとのやりとりの状態を保持できるStateful Session Beanと保持しないStateless Session Beanがあります。Entity Beanは、主にデータベースなどのデータソースのデータを扱うEJBで、データソースとのやりとりをコンテナが行うCMP Entity BeanとBean開発者が行うBMP Entity Beanがあります。Message-driven BeanはEJB 2.0で登場したEJBで、JMS(Java Messaging Service)のキューやトピックに送られたデータを処理するEJBです。
また、EJBはEJBで行う処理を実装したBean実装ファイルのほかに、EJBの生成、検索、破棄の際にアクセスされるホームインターフェイス、ビジネスメソッドを呼び出す際に呼び出されるビジネスインターフェイス、EJBコンテナにデプロイする際の情報を記述したXMLファイルのデプロイメントディスクリプタが必要です。ホームインターフェイス/ビジネスインターフェイスには、同じプロセス内から呼び出されるときに使われるローカルインターフェイス、外部のプロセスから呼び出される場合に使われるリモートインターフェイスがあります。
EJBを使用するためにはこれらのファイルを決められた形式で1つのjarファイルとしてアーカイブし、EJBコンテナにデプロイします。
参考:EJBの構成についてさらに詳しく知りたい方は「EJBの役割とメリット」「EJBのアーキテクチャ」「パフォーマンス問題を解決したEJBは実用期を迎える」を参考にしてください。
|
JBossIDEを使ってEJBを作ろう |
ここでは、簡単な銀行口座を扱うサービスをStateless Session Beanを用いて作成してみます。この際、XDocletを用いてJBossIDE上で開発を進めていきます。
まず、Eclipseを立ち上げて、Javaプロジェクトを1つ作ります。この手順は以下のようになります。
1.Javaパースペクティブのパッケージ・エクスプローラー上でマウスの右ボタンをクリックし、[新規]→[プロジェクト]を選択する
2. [新規プロジェクト]ダイアログ上で[Java]→[Javaプロジェクト]を選択し[次へ]、プロジェクト名を入力し[次へ]を押す
3. [ソースタブ]ソースフォルダを[src]フォルダに指定し、[ライブラリ]タブで[外部JARの追加]をクリックし、%JBOSS_HOME%\server\default\lib\jboss-j2ee.jarを追加する
4.[終了]ボタンをクリックする
■Bean実装ファイルの作成
次に、EJBのBean実装ファイルを作成します。このクラスは、javax.ejb.SessionBeanインターフェイスを実装している必要があります。ここでは、このクラスのパッケージをsample、クラス名をBankBeanとします。このクラスを作成するには、以下の手順になります。
1. 作成したプロジェクトの「src」フォルダ上で、マウスの右ボタンをクリックし、[新規]→[クラス]を選択する
2. [パッケージ]フィールドに「sample」、[名前]フィールドに「BankBean」と入力する
3. [インターフェイス]フィールドの[追加]ボタンをクリックし、表示されたダイアログ上で「インターフェイスを選択してください」と書いてあるフィールドに「SessionBean」と入力し、マッチした[javax.Ejb.SessionBean]を選択し、[OK]ボタンをクリックする
設定を終了したところ |
4. [終了]ボタンをクリックする
エディタ上にいま作成されたクラスが表示されていると思います。ここでは、SessionBeanインターフェイスで定義されていたメソッドが自動的に追加されています。今回はここで特別な処理をしませんので、これらのメソッドはこのままにしておきます。
SessionBeanはビジネスロジックを受け持つEJBです。ここでは、このEJBのビジネスメソッドとして以下のメソッドを定義します。
|
これらのメソッドでは、データベースから対応する口座の情報を参照・更新します。データベースのデータを扱う処理は次回に説明しますので、今回は仮に簡単な実装をしておきます。
次に、このクラスからXDocletがEJBに関連するファイルを自動生成できるように、このクラスに付加情報を付けていきます。
まず、クラスレベルのXDocletコメントを作成します。クラス作成時に作成されたクラスレベルのJavaDocコメント(/**で始まるブロックコメント)の中で、@を入力し、その後ろでCtl+Spaceキーを押します。すると、補完の候補が表示されます。ここでは、XDoclet用の要素やJavaDoc要素が選択できます。それに加えて、Tで始まるものもいくつかあると思います。これは、JBossIDEが提供しているXDocletコメントのテンプレートです。ここでは、このテンプレートの中から「Stateless Session EJB」を選択します。すると、@ejb.beanで始まるコメントが生成されます。ここで生成されたコメントを自分の環境に合わせて変更します。ここでは、description属性とdisplay属性とjndi-name属性を変更し、以下のようなコメントとしました。
/** |
EJBをデプロイしたとき、このEJBのリモートホームインターフェイスが、jndi-name属性で指定した名前でJNDIレポジトリに登録されます。ローカルホームインターフェイスのJNDI名はlocal-jndi-name属性で指定します。また、view-type属性にはremote、local、bothが指定でき、remoteを指定した場合はリモートからアクセスされるEJBとして、localを指定した場合はローカルからアクセスされるEJBとして、bothを指定した場合はその両方からアクセスされるEJBとしてデプロイされます。これ以外にもさまざまな要素が指定できますので、詳しくはXDocletのサイト(http://xdoclet.sourceforge.net/xdoclet/index.html)を参照してください。
次にメソッドレベルのXDocletコメントを記述します。先ほど作成したメソッドをEJBのビジネスメソッドとして公開するためには、これらのメソッドがビジネスインターフェイス上に定義されている必要があります。先ほど作成したメソッドにJavaDocコメントがなければ、そのメソッド内でマウスを右ボタンクリックし、「ソース→JavaDocコメントの追加」を選択するとJavaDocコメントのひな型が生成されます。通常のJavaDocコメントに加えてXDocletコメントも追加します。ここでは、@ejb.と入力しCtl+Spaceキーを押してみます。すると、指定できる要素の補完候補が表示されますので、この中からinterface-methodを選択します。これで、このメソッドはEJBのビジネスメソッドとしてマークされました。
/** |
これで、Bean実装ファイルの実装が完了しました。
■EJB関連ファイルの生成
ここでは、いま作成したBean実装ファイルからXDocletを用いてインターフェイスやデプロイメントディスクリプタを生成します。この手順は、以下のようになります。
1.プロジェクトを選択し、右ボタンをクリックして[プロパティ]を選択する
2.「XDoclet Configurations」を選択する
3.右上の領域で、右ボタンをクリックし[Add Standard]を選択する
4.ダイアログ上で[Standard EJB]を選択し、[OK]ボタンをクリックする
5.これで、ダイアログ上に設定が追加される
ダイアログ上に設定が追加されたところ (クリックすると拡大) |
注:テンプレートではjboss用のデプロイメントディスクリプタの出力先の設定が不十分です。jboss→destDirのチェックボックスにチェックを入れます
6. [OK]ボタンを押してダイアログを閉じる
これで、XDoclet用の設定が完了しました。
次にXDocletを呼び出します。これは、プロジェクトを選択し、右ボタンをクリックし、「Run XDoclet」を選択することによって呼び出されます。これで、インターフェイスやユーティリティクラス、デプロイメントディスクリプタが生成されました。
|
JBoss上でEJBを動かそう |
最後にJBoss上でこのEJBを動かしてみましょう。EJBをアプリケーションサーバにデプロイするためには、初めにEJB jarファイルを生成する必要があります。この手順は以下のようになります。
1.プロジェクトを選択し、右ボタンをクリックして「プロパティ」を選択する
2. 「Packaging Configurations」を選択する
3.右側の領域で、右ボタンをクリックし「Add Std. Archive」を選択する
4.ダイアログ上で「Standard-EJB.jar」を選択し、[OK]ボタンをクリックする
5.これでダイアログ上に設定が追加される
ダイアログ上に設定が追加されたところ (クリックすると拡大) |
注:テンプレートではエラーが出るので、MANIFEST.MFのチェックボックスをオフにします
6.[OK]ボタンを押してダイアログを閉じる
これで、EJB-jar用の設定が完了しました。次にEJB-jarを生成します。これは、プロジェクトを選択し、右ボタンをクリックし、「Run Packaging」を選択することによって呼び出されます。これで、プロジェクトの直下にStandard-EJBというファイルが生成されました。
次に、ここで生成されたEJB-jarをJBoss上にデプロイします。
1.先ほど生成したEJB-jarファイルを選択し、[Deployment]→[Deploy To…]を選択する
2.ダイアログ上にデプロイ先の候補がリストされるので、その中から1つ選択し、[OK]ボタンを押す(ここではdefaultを選ぶ)
3.デプロイがうまくいったことを示すダイアログが出るので、[OK]を押す
デプロイが成功すると、デプロイしたアーカイブファイルのアイコンに緑色の矢印が表示されるはずです。
最後にJBossサーバを起動し、作成したEJBがうまくデプロイされていることを確認します。[Server Navigator]ビュー上で前回設定したサーバを選択し、右ボタンをクリックし[Start]を選択します。コンソール上に以下のような出力が表示され、このサーバ上で作成したEJBが起動されたことが分かります。
09:26:39,104 INFO
[MainDeployer] Starting deployment of package: file:/C:/jboss-3.2.3/server/default/deploy/Standard-EJB.jar |
次回は、Entity Beanを用いてデータベースにアクセスする手順を説明します。そこでは、CMP Entity Beanによる簡単なデータベースアクセスを例にEJBを使う利点を説明します。
筆者プロフィール |
河村嘉之 EJBコンソーシアム オープンソース研究会 副主査(日立ソフトウェアエンジニアリング株式会社 インターネットビジネス部) 鷲尾典俊 EJBコンソーシアム オープンソース研究会 JBossチーム リーダー(日立ソフトウェアエンジニアリング株式会社 インターネットビジネス部) 【筆者あとがき 】 EJBコンソーシアムでは、オープンソースプロダクトを題材にJ2EE技術者のすそ野を広げる目的で、J2EEオープンソース研究会を立ち上げ、第1期としてJBossとJUnitに関する教材を作成いたしました。なお、この原稿はEJBコンソーシアムJ2EEオープンソース研究会JBossチームの成果を基に書かれています。このチームの成果は、以下の各社の皆さまの努力によるものです。 川鉄情報システム株式会社 株式会社電通国際情報サービス 株式会社トスコ 日立ソフトウェアエンジニアリング株式会社 富士通株式会社 株式会社豆蔵 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|