EJBのアプリケーションは、JavaServletやJSPのように、ファイルシステムにコピーするだけでは稼働させることはできない。なぜなら、EJBコンテナがその存在を認識し、Homeインターフェイス(サーバコード)の初期化やJNDIネーミング・サービスへの登録などを行わなければならないからだ。このため、EnterpriseBeanを配置する作業(デプロイという)を行う。この作業によって、ディプロイメント・ディスクリプタの生成、配置コード、すなわちスタブやスケルトンの生成、DBアクセスコードなどを生成することができる。そして、BeanがEJBコンテナに登録され、EJBコンテナが起動されると、EnterpriseBeanが利用可能になる。
VAJを使って開発を行うので、VAJ上でディプロイ作業を行い、配置の終了したJARファイル(配置JARファイルという)を作成し、コンテナに登録していくことにする。
配置JARを作るには、EJBグループのアイコン上で右クリックし「エクスポート」→「配置JAR」を選択し、ファイル名を指定する。WASに配置するのであれば、「c:\WebSphere\AppServer\deployedEJBs\DeployedAtmarkit.jar」といったファイルにエクスポートする。
WASにおいて、このJARファイルをディプロイする前に、行わなければいけない作業がある。それは、データ・ソースの作成だ。WAS上では、エンティティBeanのデータベースは、データ・ソースに割り当てられる。そのため、データ・ソース定義を作成しておく必要がある。
データ・ソースを作成するには、管理コンソールにて、[コンソール]→[タスク]→[データ・ソースの作成]を選択する。「既にインストール済みのJDBCドライバーを使用」、データ・ソース名「atmarkit」、データベース名「atmarkit」と選択、あるいは入力すればよい。
次に先ほどのJARファイルを指定してBeanを登録する。登録するには管理コンソールで、コンテナ(Default Containerなど)を探して右クリックし、「作成」→「EnterpriseBean」を選択する。先ほどエクスポートしたJARファイルを探してダブルクリックすると、ディプロイメント・ディスクリプタの一覧が表示されるので、「UserinfoEntity.ser」を選択する。
UserinfoEntityにおいては、データ・ソースの指定、RDB用ユーザーID/パスワードを指定するのを忘れないようにしてほしい。また、表は先ほどVAJで作成したので、「表を作成」のチェックを外す。同様にUserinfoSessionも登録する。
最後に、アクセス用BeanをVAJから「C:\WebSphere\AppServer\servlets」へエクスポートすれば、準備完了である。WASの管理コンソールから「Default Server」を起動してテストしてみよう。
さぁ、いよいよ、稼働確認をしよう。最初に作ったのと同じ手順で確認ができるはずだ。Webブラウザから、「http://localhost/atmarkit2/login.htm」を開く。
ユーザーIDとパスワードを適当に入力して[ログイン]を押す。
ユーザーが追加されたことが表示された。これは例外「UserAddedExceptioni」の処理のためだ。
ここでDB表の内容を確認してみよう。
確かにユーザーID「米持」が追加されている。次にパスワードを変更してみよう。新しいパスワード「passnew」を指定して、[パスワード変更]ボタンを押す。
このようなダイアログが出るので[OK]を押すと、パスワードが変更される。
もう一度DB表の内容を確認してみよう。
ユーザーID「米持」のパスワードが変更されている。ログイン画面に戻るので、同じユーザーIDでパスワードを間違えてログインしてみよう。
正しくログインエラーが出た。これは、エンティティBeanにアクセスしてパスワードデータの比較を行ったためだ。もう一度正しいパスワードでログインしてから、[ユーザー削除]ボタンを押してみよう。
このダイアログに[OK]で答えると、ユーザーIDが削除される。
再びDB表の内容を確認してみよう。
ユーザーIDが削除されている。
以上のように、EJBの開発は、適切なツールを使うことによって非常に少ないコーディングでRDBアクセス、トランザクション処理を行うようなアプリケーションを開発することができる。Beanなどを上手にデザインすれば、作業分担もそれなりにうまくできそうであることもご理解いただけたのではないだろうか。大規模なアプリケーション開発を行う場合に、JDBCやトランザクション処理などを大勢のプログラマでプログラミングする必要が減り、アプリケーションのクオリティを上げ、開発効率を向上させるのに大きく貢献するはずだ。
しかし、残念なことに、EJBアプリケーションのデザインは思ったよりも複雑である。EnterpriseBeanのデザインをするためにはEJBの仕様を隅から隅まで知っている必要があると思われるし、トランザクション管理(JTA:Java Transaction API)や、RDBの分離レベル(Isolation Level)、JDBCの特徴、さらにはフロントエンドに配置されるTCP/IPなどのネットワーク、Java Servlet、JSP、JavaBeansなどの動きにもかなり高いレベルで知識が必要である。EJBが世の中に真の意味で普及するには、こういった知識を持った技術者が無理なく育つ環境がIT業界には求められていると筆者は思う。
米持幸寿
1987年、日本アイ・ビー・エム入社。
IBMメインフレームOSであるVSE、およびVM関連ソフトウェアプロダクト の保守、 システム無人化ソフトウェア開発を手がける。現在はJava、XML、EJBに関わるプロモーション活動を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.