いきなり EJB (Enterprise JavaBeans)

更新日 2001/12/21

[HOME] / [Java] / [Perl5] / [Palm(GCC)] / [Palm(CodeWarrior)] / [本の紹介]


1. はじめに
 最近、Java関連の雑誌を見ていると、EJB (Enterprise JavaBeans) という言葉をよく見かけるようになりました。このEJBについてアプリケーションサーバ(以下 APサーバ)、トランザクション処理などをキーワードに、ミッションクリティカルなサーバ機能への適用を目標として、基礎の基礎と思われる部分を実践的に検証していきたいと思います。
 APサーバとしては、BEA社のWebLogic Server、IBM社のWebSphereなどを含め各社から提供されていますが、大きく分けて端末のブラウザに情報を提供することに重きをおいたものと、トランザクション処理などサーバ側の処理に重きをおいたものに分類されます。JavaWorldなどの記事などから判断すると、Websphereは端末側に、WebLogicはサーバ側の処理に特長を持っているように思われます。(1999年10月にリリースされるWebLogic4.5ではJSP1.0も搭載され、端末側の機能も充実されています)

 両方とも、評価用のソフトがダウンロード可能でパソコンで試すことができます。特にWebLogicはドキュメントが充実しており、これを読んでいるだけである程度のノウハウが読み取れます。ここでは、このWebLogicを使ってEJBとは何なのか、システムへの適用について考えて行きたいと思います。

   2. 準備(インストール)
   3. ちょっとだけ実験
   4. EJBとは何か?
   5. データベースとトランザクション処理
   6. SSL(Secure Socket Layer)の設定
   7. TUXEDOとの接続
   8. VisualCafeでのデバッグ
   9. JSP (Java Server Pages) をかじる
 10. CORBA インタフェースを提供する
 11. いまさらCGI
 12. 参考文献
2. 準備 (インストール)            ↑top
 WebLogicは 100% PureJavaで JVM の環境さえあれば、どのマシンでも動くことになっていますが、とりあえずここでは Windows に JDK1.2.2 を載せた環境を使っています。WindowsNT4.0(SP6)で動作を確認しています。Windows2000でも問題なく動作するはずです。メモリは最低128MB欲しいようなことが書かれていたと思います。128MBで1万円しませんから、この際増設されてはいかがでしょうか?
  1. まず、JDK1.2.2を入手しましょう

  2. ファイル名は、jdk-1_2_2_006-win.exe で 20MBぐらいあります。ダブルクリックしてインストールします。
    PATH  をコントロールパネルのシステムの中で設定します

      PATH
      <元々の設定>;C:\jdk1.2.2\bin;
     

  3. 次に、WebLogicの30日間有効評価版をダウンロードしてきましょう

  4. BEA社ホームページにて左側の「Download BEA WebLogic Server 最新版をクリックして、Step-1 登録を選択し指示に従うと、メールが届きます。メールの中のURLよりダウンロードが可能になります。大きさは 約28MBなので、ダイヤルアップでも何とか我慢できる範囲でしょうか。ファイル名は weblogic510.exe ですが、これをダブルクリックしてインストールします。
     
  5. インストール後の設定もBEA社のホームページを参照して実施します。サーブレットのクラスなどを参照するため、環境設定に習って以下の設定が必要です。

  6.  CLASSPATH
      <元々の設定>;C:\weblogic\classes\boot;C:\weblogic\classes;C:\weblogc\license;C:\weblogic\lib\weblogicaux.jar;C:\weblogic\myserverclasses
     
  7. WebLogic Server の起動

  8. 普通は Windowsのスタートメニュー  -> WebLogic 5.1 -> WebLogic Server で立ち上げています。
3. ちょっとだけ実験    ↑top
 サーブレットは、Webでのサーバサイドプログラミング技術の1つで、CGI のJava版だと思っています。通常の CGI がその度にプロセスが起動するのに対して、サーブレットはスレッドで動くためオーバヘッドが少なく処理性能がよいとされています。ここでは、サーブレットの実験を通して WebLogjc Server の動作確認してみましょう。サンプルとして \weblogic\examples\servlets\HelloWorldServlet.java を使います。
  1. サンプルプログラムの HelloWorldServlet.java をコンパイルします

  2. C:\>cd \weblogic\examples\servlets
    C:\weblogic\examples\servlets>javac -d \weblogic\classes HelloWorldServlet.java

    これにより、\weblogic\classes\examples\servlets\HelloWorldServlet.class として作成されます
    ここでコンパイルエラーが出るのは前節のCLASSPATHの設定が行われていない可能性があります
     

  3. プロパティファイルにサーブレットを設定します

  4. \weblogic\weblogic.properties に以下の設定を追加します。HelloWorld は何でもかまいません。

    weblogic.httpd.register.HelloWorld=examples.servlets.HelloWorldServlet
     

  5. WebLogic Server を起動します

  6. Windowsのスタート->プログラム->WebLogic 5.1 ->WebLogic Server で起動します
     
  7. ブラウザから、http://localhost:7001/HelloWorld でサーブレットを呼び出します。

  8. HelloWorld は上の設定に合わせています。
    Hello World! と表示されれば、正常に動作していることになります
 これらの作業は、コマンドプロンプト画面を使って行いますが、画面がスクロールできないため流れて行った情報が読み取れずに困ってしまいます。WindowsNTでは、以下の方法でスクロールできるようになります。

 コマンドプロンプトの上方ラベルで右クリックして、「プロパティ」を選択し、「レイアウト」のタブを選んで「ウィンドウのサイズ」を 幅 120 高さ 40に、 「画面バッファのサイズ」を 幅 120 高さ 200 に設定する。いちいち設定するのは面倒なので 「このウィンドウを起動したショートカットを変更する」 で次回からスクロールが出来るように設定する。
 
4. EJB (Enterprise Java Beans) とは何か?   ↑top
 先に紹介したBEA社のHPによれば、Enterprise JavaBeanの本質は、トランザクション的でセキュアなRMI(またはCORBA)のオブジェクトということです。EJBでは、セキュリティ、トランザクション、状態管理の詳細を処理するコンポーネント・フレームワークにビジネス・ロジックがカプセル化され、 マルチスレッド、リソース・プール、クラスタリング、分散ネーミング、自動持続性、リモート呼出し、トランザクション境界管理、分散トランザクション管理等のはん雑な処理は、EJBの「コンテナ」がおこなうので、EJB開発者はビジネスに関する問題解決に専念できます。これらの内容は、BEA社のEJBに関する記述を参考にされた方が分かりがいいと思います。また、EJBを作るにあたってのノウハウが WebLogic Server EJBの設計と開発 として用意されているので、こちらも参考にしてください。

 EJB は、大きく以下の4つに分類されます。それぞれについて例題を用いながら説明していきましょう。

  1. コンテナ管理 Entity Bean (サンプルプログラムを使った説明

  2. コンテナ生成ツールが Entity Bean の永続化を維持するデータベースアクセスコードを自動的に生成してくれるものです。開発者は、このためのコーディングをする必要がなく、驚くほど簡単にEJBが書けてしまいます。実際に見たほうが理解しやすいので、サンプルプログラムを使って説明していきたいと思います。この例では、データベースと連携するのが面倒だったので、File による永続化を選択しています。
     
  3. Bean管理 Entity Bean

  4. Entity Bean 自身のコードで自らの永続化を管理する方法で、きめ細かい管理が実現できます。実際には永続化時にコンテナから自動的に呼ばれるメソッドにJDBCでSQLを発行するようなコーディングを行うことになります。このとき、データベース依存部分ができるためEJBのポータビリティが損なわれる欠点があります。
     
  5. ステートフル Session Bean(サンプルプログラムを使った説明

  6. クライアントとのセッション管理機能を持つ Bean で、クライアントは自分が生成した Bean をあたかもクライアントに存在するオブジェクトのようにアクセスすることが可能になります。
     
  7. ステートレス Session Bean

  8. その名の通り、固有の情報や状態を保持しないため、リソースの消費が少なく、シンプルで軽量なサーバコンポーネントが実現できます。セッション管理はクライアントに任されます。
EJBの開発手順をJavaWorld1999年6月号を元にまとめています(作成中)

この他、Java World 1999年9月号の「実践 Enterprise Java Beans 〜第2回 Session Beanの開発(その1)〜」での例題を用いて、端末からサーブレットを通してステートフルな Session Bean を呼び出す方法を検証してみることにします。
 
5. データベースとトランザクション処理    ↑top
 準備中
Oracleとの接続
 
 
6. SSL(Secure Socket Layer)の設定    ↑top
 SSLは、安全な接続の交渉を行うためにNetscapeが提案したプロトコル標準で、エレクトリックコマース(電子商取引)などを行う際にクレジット番号などの情報がインターネット上で他人に読みとられることがないように、主にブラウザとサーバの間で情報の暗号化を行うためのしくみです。

 正式なIDを取得する前に、ちょっとだけ動作確認をしておきましょう。とりあえずWebLgic Serverを起動してください。デモ用のSSLはデフォールトで設定されています。この状態で、ブラウザから https://localhost:7002/ とすると、以下のような画面が表示されると思います。

 新しいサイト証明書  ・・・ですが、Netscapeは証明書に署名した発行人を認識できません。

 次の画面で、受け付けるかどうかを聞いてきますので、例えば、「このセッションに対して、証明書を受け付ける」を選択します。そうするとWebLogic Serverの紹介画面が表示され、左下の鍵が掛かるはずです。これで確認は終わりです。

 それでは、有名な認証局であるベリサイン社からテスト用のディジタルIDを取得して実験してみましょう。しくみの簡単な解説もありますので、参考にしてください。

  1. WebLogic Serverを起動し、ブラウザで http://localhost:7001/Certificate を指定します。このときアカウントとパスワードを求められますが、systemとインストール時に設定したパスワードを記入します。パスワードは、\weblogic\weblogic.propertiesファイルにも書かれていますので忘れちゃった場合は参照してください。

  2.  
  3. Server Certificate Request Generatorなるものが表示されます。会社やサイトに関する情報を記入して Generate Request をクリックします。以下はすべて半角英数字で記入します

  4.  

     
     
     

    Country code(国コード)・・・・・・・・・・・・・・・JP(日本)
    Organizational unit name(部署名)・・・・・・・テスト用ID取得なので架空のものでいいのかも知れません
    Organization name(会社名)・・・・・・・・・・・・同上
    Email address・・・・・・・・・・・・・・・・・・・・・・・・テスト用IDが送られるメールアドレスを指定します
    Full host name(ホスト名)・・・・・・・・・・・・・・これも架空のものでいいのかも知れません
    Locality name(city)・・・・・・・・・・・・・・・・・・・市
    State name・・・・・・・・・・・・・・・・・・・・・・・・・州名と言われてもねぇ。とりあえず県名を書いときました。
    Random string・・・・・・・・・・・・・・・・・・・・・・・特に書かなくてもいいです。

    このとき秘密鍵(プライベートキー)と公開鍵のペアーが作成されます。これらを以下に示します。

     以下が秘密鍵です。ファイル名は、例えば www.egami.co.jp であれば www_egami_co_jp-key.der になります
      Key filename: C:\weblogic\<Full host name>-key.der

     これは、公開鍵に上記情報を追加したものでベリサインなどに送られるものです
      Request filename: C:\weblogic\<Full host name>-request.pem  
     
    この画面で、VeriSignの方の Submit をクリックして、テスト用IDの申請を行います。
     

  5. 次の画面で内容の確認および連絡先の記入を行って ACCEPT をクリックすると、Processing Requestという画面が表示され30分程度でメールが届きます。ちょっとコーヒーでも飲んで待ちましょう。

  6.  
  7. さて、いよいよ WebLogic server へのインストールですが、まず上記の秘密鍵のファイルを \weblogic\myserver 配下に持っていきます。ファイル名はそのままでいいでしょう。

  8.  

     
     
     

    次にベリサインからのメールの最後にあるIDを取り出してテキストファイルとして作成します。ファイル名は、拡張子が .pem であれば勝手に付けていいようです。取り出すIDについても以下の2行に挟まれた文字をこの2行も含めてカット、ペーストでテキストファイルに張り付ければいいでしょう。このファイルは、認証機関(ベリサインなど)から受けたサーバ証明書と呼ばれるものです。
    -----BEGIN CERTIFICATE-----

    -----END CERTIFICATE-----

    最後に、\weblogic\weblogic.properties に以下の設定を行います。

    weblogic.security.ssl.enable=true    このままでいいです
    weblogic.system.SSLListenPort=7002 このままでいいです

    #weblogic.security.certificate.server=democert.pem デモ用の3行をコメントアウトして
    #weblogic.security.key.server=demokey.pem
    #weblogic.security.certificate.authority=ca.pem

    weblogic.security.certificate.server=www_egami_co_jp.pem ベリサインからのメールを切り出した証明書ファイルの設定と
    weblogic.security.key.server=www_egami_co_jp-key.der   秘密鍵の設定を行います
     

  9. 最後に、WebLogic server を起動します

  10. このとき、以下のメッセージが出ていればうまくいっていることになります

    Sun Jan 02 20:32:32 JST 2000:<I> <SSLListenThread> Listening on port: 7002

    確認のために、ブラウザで https://www.egami.co.jp:7002/ とすれば、WebLogicの紹介ページが表示され Netscape なら左下の鍵が掛かっているはずです。www.egami.co.jp は、あなたのマシンのホスト名で置き換えてください。また、httpをhttpsにしていること、ポートを7001でなく7002にしていることに注意してください。

    このとき、ベリサインに申請したときのホスト名が違っているとブラウザが注意を促します。例えば、https://localhost:7002/ とやると以下のような画面が表示されます。

    証明書名の確認  サイト'localhost'から提出された証明書には、正しいサイト名が含まれていません。・・・

    ここで、続けるを選択すれば接続されますが、普通ならキャンセルを押されて接続を拒否されるでしょう。

 今回紹介したベリサインの証明書ですが14日間の限定版です。この証明書は何回でも取得できるとベリサインのホームページにも書かれていますが、起動の際にコンピュータの時間を元に戻すことでも対応できます。実はこれも同ホームページに書かれていることなのです。

 本格的にディジタルIDを使うことになれば、あなたのサーバマシンを正式に認証してもらうことになりますが、このために年間 \85,050 かかるようです。 128ビット対応のものもあってこちらは、年間\144,900 らしいですが、詳しくはベリサイン社のHPを参照してください。ヘルプなども参考になります。
 
7. TUXEDOとの接続   ↑top
 TUXEDOといってもあまりなじみがないと思いますが、これもAPサーバの一種です。BEA社によれば、WebLogicがオブジェクト指向言語(Java言語)用のAPサーバで、TUXEDOは手続き型言語(C言語、COBOLなど)用のAPサーバという言い方をしていました。既存の基幹システムでは、このTUXEDOのトランザクション処理を使ったものがいくつかあります。WebLogicは、このような既存システムの機能をWebから利用するような場合にも適用されます。
 ここでは、Jolt for WebLogic という機能を使って、TUXEDOとの接続方法について考えてみます。
 
8. VisualCafe でのデバッグ    ↑top
 近年のJavaの発展は、言語自体のすばらしさもさることながら、各社から提供される統合的な開発環境が大きく貢献していると思われます。EJBやAPサーバについても開発環境、特にデバッグ環境は重要な鍵となるでしょう。今扱っている WebLogicは開発環境として、Inprise社のJBuilder3やSYMANTEC社のVisualCafeなどを推奨していますが、特に VisualCafe とは特別の結びつきがあるようです。VisualCafe は現在 Version3.0ですが、1999年10月始めに提供される 3.0dでは WebLogic4.0.3と4.5に対応し、ウィザードによるEJBの枠組みの作成やデバッグ時のClientプログラムも同時に作成されます。その上、WebLogicサーバ機能をVisualCafe上で自動起動させることができ、開発したEJBの詳細なデバッグが実現可能です。

 もし評価版を手に入れることができるのであれば、ここで紹介していきたいと思います。
 
9. JSP (Java Server Pages) をかじる    ↑top
 サーブレットは、Webでのサーバサイドプログラミング技術の1つですが、それまでのCGI+Perl言語に比べて、「マルチスレッドによる処理性能の向上」が大きな特長になっています。しかし、プログラミングの生産性の点でサーブレットがそれほど優れているとは思いません。Perlにしろ、サーブレットにしろコンテンツとコードが混在してしまうからです。コンパイルの必要なサーブレットの方がより面倒なぐらいです。

 ここで紹介するJSP(Java Server Pages)は、コンテンツの静的な部分と動的な部分をページコンパイル技法により分離するテクノロジということです。
 まずはサンプルプログラムで動作を確認してみます。

  1. weblogic.properties の編集

  2. 以下の行のコメントをはずしてください。この中で、pageCheckSeconds=60 と compileCommand=c:/java/bin/javac.exe を変更します。

    weblogic.httpd.register.*.jsp=\
           weblogic.servlet.JSPServlet
    weblogic.httpd.initArgs.*.jsp=\
           pageCheckSeconds=0,\
           packagePrefix=examples.jsp,\
           compileCommand=C:/jdk1.1.7B/bin/javac.exe,\  <-  各自の環境に合わせてください
           workingDir=C:/weblogic/myserver/classfiles,\   <-  JSPファイルをJavaファイルに変換しコンパイルされたClassファイルが入ります
           verbose=true
     

  3. WebLogic Server を起動します

  4.  
  5. サンプルのJSPファイルを所定にディレクトリにコピーします

  6. C:\weblogic\myserver\public_html\jsp ディレクトリを作成し、C:\weblogic\examples\jsp\ShowDate.jsp HelloWorld.jsp をコピーします。
     
  7. ブラウザでhttp://localhost:7001/jsp/ShowDate.jsp を入力すると、コンパイルのための時間を経過した後、時刻が表示されます。

  8. WebLogic Serverを立ち上げている間は、Classファイルを参照するため処理は高速です。


 今後、Java World 1999年5月号や 1999年12月号の記事について検証して行きたいと思います。
 
10. CORBA インタフェースを提供する    ↑top
 CORBA (Common Object Request Broker Architecture) は、分散オブジェクトを実現するための仕様であり、IIOP (Internet Inter-ORB Protocol) はその通信プロトコルの1つです。ここでは、既に実現しているRMIによる分散オブジェクトプログラムをRMI over IIOP という新しい技術を用いることで、プログラムにほとんど手を加えることなく、CORBAと相互運用できることを実証してみます。内容は、Java World 1999年10月号の記事を参考にしていくつもりなのでお急ぎの方は、そちらを参照下さい。
 
 
11. いまさらCGI    ↑top
 サーブレットの解説記事は、いつもCGIの欠点から始まるのが定石になっています。でも、いままでperlでCGIをいっぱい書いてきた人は、みんなサーブレットに書き換える必要があるのでしょうか。サーバの負荷のことを考えればそうなんでしょうが、資産の有効利用ができてもいいでしょう。WebLogicでは、新規プロジェクトにはサーブレットを推奨しながら、いままで作ってきたCGI利用の道も閉ざしてはいません。ここでは、その方法を簡単に説明します。

  1. まず、Webサーバにperlをインストールしましょう。こちらのWindows用のperlのところを参照して下さい。
  2. 次に weblogic.propertiesに以下の記述を加えて、WebLogic Serverを起動してください。

  3.  

     

    weblogic.httpd.register.cgi-bin=weblogic.servlet.CGIServlet
    weblogic.httpd.initArgs.cgi-bin=\                                            <-  \ は2行にわたる場合の印です
    cgiDir=/weblogic/myserver/cgi-bin,*.pl=/bin/perl.exe,*.cgi=/bin/perl.exe   <- perl のインストール場所に合わせます

 これだけです。propertiesの内容から類推すると、実は CGIservlet なるサーブレットを介して perl で cgiファイルを実行しているようです。
  最初てこづった点は、cgiファイルはすべてcgi-binの直下におく必要があることです。
 
 
12. 参考文献    ↑top
 EJBに限らず役に立つと思われる書籍を紹介しています。本文からも参照できるようにしていきますが、一覧はこちらでまとめています。


[HOME] / [Java] / [Perl5] / [Palm(GCC)] / [Palm(CodeWarrior)] / [本の紹介]

このページにご意見のある方は、egami3@cc.rim.or.jp までお願い致します。