第3回 J2EEアプリケーションと配置
丸山不二夫
稚内北星学園大学学長
(http://www.wakhok.ac.jp/)
2001/5/26
今回の内容
|
J2EE利用の基本パターンと「配置」 |
前回、Java Pet Storeのサンプルを紹介しましたが、皆さんうまく動かすことができましたでしょうか? サンプル・デモといっても、J2EEを動かすうえでの、基本的な利用パターンはすべて含まれていますので、ぜひ、動くまで頑張ってみてください。
マシンの余裕があれば、データベース、J2EEサーバ、Webブラウザの3者をネットワーク上の別々のマシンに割り当てて、Java Pet Storeデモを動かすことに挑戦してみてください。
J2EE利用の基本パターンと |
もう一度、J2EEを利用する手順を振り返ってみましょう。前回は、J2EEのインストールや環境設定、Java Pet Storeデモの設定などの具体的な手順の中で語ってきましたので、今回は、それらの中から、J2EE利用の基本的なパターンを抜き出してみましょう。少し大まかにいえば、J2EEを利用するには、一般的に次の4つのステップが必要です。
1.まず、データベースを立ち上げます
J2EEの典型的なシナリオでは、データベースとの接続はJ2EEの最も重要な構成要素の1つですが、データベースを使わないJ2EEアプリケーションもありえます。
2.J2EEサーバを立ち上げます
J2EEを利用する以上、これは当然のことですね。
3.J2EEサーバに、J2EEアプリケーションを「配置(deployment)」します
「配置」といっても「配備」といっても同じことです。小論では、「配置」という用語を使うことにします。この配置のために、専用のツール「deploytool」が用意されています。この手順は、必須です。
4.Webのブラウザを立ち上げて、J2EEサーバ上のURLを指定します。
J2EEの典型的なシナリオでは、WebブラウザがJ2EEクライアントとして想定されています。Webブラウザ以外のJ2EEアプリケーション・クライアントが利用されることもあります。いずれにせよ、J2EEにJ2EEクライアントは必須です。
一般的な3ティアのアプリケーション・モデルが3つの階層を持つことを考えると、こうしたJ2EE利用の手順(1、2、4)は、自然なものだと分かると思います。その意味では、上記の3.の「配置」の手順が、J2EE特有の手順だということになるのかもしれません。もっとも、サーバ・サイドのアプリケーションをサーバ上で動かすためには、それなりの手順が必要だと思えば、配置の操作も自然なものに見えてくるかもしれませんね。SOAPでも、J2EEと比べるととても単純なものですが、配置をします。
配置は「永続」する |
J2EEにおける配置の見かけ上の複雑さは、アプリケーション自体を変更することなく、できるだけ柔軟に現実の環境にアプリケーションを適応させようとすることから生まれたものです。
J2EEでは、J2EEシステムの「管理者」と並んで、“deployer”という仕事が想定されているほどです。「配置屋さん」というわけですね。Java Pet Storeのデモを立ち上げる仕事では、「管理者」=「配置者」=「利用者」という、1人3役の仕事をしているわけです。このことの説明は別の機会に譲るとして、J2EEアプリケーションの「利用者」として、配置については、当面、次の2つのことに注意しておいてください。
1つは、アプリケーションが与えられていれば、細かな設定をしなくてもdeploytoolでただちに配置の作業をすることは可能だということです。前回のJava Pet Storeデモでも、deployのボタンは押しましたが、deploytool上のさまざまなタブを開いて、細かなパラメータのチューニングを行ったわけではありませんでしたね。
もう1つは、J2EEのサーバを立ち上げるたびに、配置の操作が必要なわけではないということです。J2EEサーバは、いったん配置されたアプリケーションを記憶します。ですから、前回、Java Pet StoreデモでJ2EEサーバへの配置が成功しているのなら、もしももう一度あのデモを動かそうと思ったら、今度は、配置のステップを省略できるのです。配置の手順を省いて、単にJ2EEサーバを立ち上げるだけで、Java Pet Storeデモ・アプリケーションが配置された状態が復活します。Cloudscapeデータベースへのテーブルの作成・データの初期設定についても同じことがいえます。いったん作成されたデータベースは、マシンの電源を落として再び立ち上げても、以前のデータベースの状態に戻らなくてはなりません。J2EEサーバへのアプリケーションの配置も、同じ性質を持つのです。配置は、データベース上のデータ同様「永続」するのです。
J2EEアプリケーション = EARファイル |
J2EEでのアプリケーションの配置については、読者の皆さんに少し考えてもらいたい問題が幾つかあります。
第1は、「J2EEアプリケーションをJ2EEサーバに配置する」と簡単にいってきましたが、それでは、「配置される前」のJ2EEアプリケーションとはどんなものかという問題です。
これについては以前にも簡単に説明したように、J2EEでは、配置前のアプリケーションは、実体としては*.earという名前を持つ1つのファイル(EARファイル)にほかなりません。例えばJava Pet Storeデモは、petstore.earという名前の1つのファイルにまとめられています。
Java Pet Storeデモは、実際にはJSPファイル、Servletのクラス、EJBのJavaクラス、画像データ・ファイルなどなどの、たくさんのファイルから構成されています。deploytoolは、petstore.earという名前を持つ1つのファイルからたくさんのファイルを取り出して、J2EEサーバ上に配置しているわけです。逆に、どんなに複雑で多数の構成要素からなるアプリケーションも、こうして、たった1つのファイルにまとめ上げられるというのは、結構面白いことです。スタティックな実体としてのearファイルに配置という操作をすると、サーバ上でダイナミックにアプリケーションが走り出すという図式は、なかなか魅力的です。
第2は、deploytoolにはたくさんのタブがあってさまざまなパラメータを設定できるのですが、deploytoolは、なぜ何の設定なしでもアプリケーション・ファイルから取り出されたファイルを、J2EEサーバ上に正しく配置できるのかという問題です。
それは、J2EEアプリケーション・ファイル自身に、アプリケーションをJ2EEサーバ上に配置するための情報が組み込まれているからです。J2EEサーバ上では、配置情報はDeployment Descriptorというオブジェクトに収納されています。これらの情報は、実はXMLファイルの形式でEARファイルに含まれています。先に見たpetstore.earには、次のようなファイル(application.xml)があります。このほかにも、deploy関連のファイルは存在します。deploytoolは、まず、これらのDeployment Descriptorファイル(以下DDファイル)を、EARファイルから取り出して、その情報に従って配置を行います。
<?xml version="1.0" encoding="ISO8859_1"?>
|
リスト1 application.xml |
では、だれがこのDDファイルを作ったのでしょうか? J2EEでのアプリケーションの配置で、読者の皆さんに考えてもらいたい3つ目の問題は、実はこの疑問と結びついています。開発者はどのようにしたらさまざまのファイルを結び合わせて、deploytoolで配置可能な、*.ear形式のJ2EEアプリケーション・ファイルを作ることができるのでしょう?
これへの答えは簡単です。deploytoolは、J2EEアプリケーションの利用者が、それをJ2EEサーバに配置するためのツールであると同時に、J2EEアプリケーションの開発者が、それを利用してJ2EEアプリケーション・ファイルを生成するための「開発ツール」でもあります。
deploytoolで配置可能なファイルはdeploytool自身で作られるのです。DDファイルも、その際、deploytoolによって自動的に生成されます。
先に見たDDファイルを、開発者が直接コードする必要はありません。開発者にとっては、deploytoolは、J2EEアプリケーションがJ2EEサーバに正確に渡さなければならないDeployment Descriptorの情報をキチンと作ってくれるツールとして、とても便利なものなのです。
petstore.earファイルを「解凍」してみる |
本当に、J2EEアプリケーション・ファイルにDeployment Descriptorの情報が含まれているかを確認してみましょう。
*.earの識別子を持つJ2EEアプリケーション・EARファイルは、JavaのJarファイルと同じデータ形式を持っています。JavaのJarファイルは、PCの世界ではよく利用されているZIP形式の圧縮ファイルですから、識別子は違っていてもJ2EEアプリケーション・ファイルは、ZIP解凍ツールでも解凍できるはずです。今回は、petstore.earファイルを「解凍」してみます。皆さんも、ぜひpetstore.earを解凍してみてください。
実は、deploytoolの[Tools]メニューで[Descriptor Viewer...]を開けば、指定したコンポーネントのDeployment Descriptorの情報は、簡単に取り出せるのです(画面1)。
画面1 deploytoolを使ってDeployment Descriptorの情報を取り出す(クリックすると拡大します) |
自分の手でJ2EEアプリケーションを「分解」するわけですが、こうした、いわば「実験」的なアプローチは、対象をよく理解するうえではとても役に立つものです。時間がなければ、「マニュアルに書いてあるからそうなっているはずだ」と考えてもよいのですが、マニュアルに書いてあっても実際にそうなっていなかったり、マニュアルには書かれていないことも結構たくさんあるものです。
次のリストは解凍ツールではなく、コマンドラインから、jarコマンドを使って、petstore.earの中身を確認してみたものです。
C:\java\j2sdkee1.3\jps1.1.1>
jar tvf petstore.ear 9752 Tue
Nov 14 00:29:44 JST 2000 inventoryEjb.jar |
このリストを見ると、このpetstore.earファイルには、*Ejb.jarという名前のファイルが5つ、petstore.warという識別子が*.war型のファイルが1つ、含まれていることが分かります。先に見たapplication.xmlも、ちゃんとMETA-INFというディレクトリの下にあることが分かりますね。
今度は、先のapplication.xmlのリストとこのリストとを、比較してみてください。
<application>....</application>の中に、
<module>
<ejb>inventoryEjb.jar</ejb>
</module>
という形で、*Ejb.jarファイルが、さらに、
<module>
<web>
<web-uri>petstore.war</web-uri>
<context-root>estore</context-root>
</web>
</module>
という形で、*.warファイルが含まれていますね。このように、application.xmlの記述は、きれいにJ2EEアプリケーション・ファイル「petstore.ear」の構成に対応していることが分かると思います。こうしたアプリケーションの構成の情報は、deploytoolの左側のカラムで表示されています(画面2)。
画面2 アプリケーション構成の情報は、deploytoolの左側のカラムに表示される (クリックすると拡大します) |
J2EEアプリケーション・ファイルの構成 |
J2EEアプリケーション・ファイルの構成をまとめておきましょう。*.earという形のJ2EEアプリケーション・ファイルは、主要に、*Ejb.jarという形のEJBコンポーネントと、*.warという形のWebコンポーネントという2つのタイプのファイルから構成されています。J2EEアプリケーションが、Webブラウザ以外のクライアントを利用するときには、このクライアントもJ2EEアプリケーション・ファイルに含まれます。また、データベースへの接続などの条件を記述するRARファイルも、新しいバージョンのJ2EEでは追加されましたが、これについては今回は説明を割愛します。もちろんEARファイルには、このアプリケーションの配置情報も、XMLファイルの形式で含まれなければなりません。
J2EE アプリケーション・ファイル | *.ear | |
EJB コンポーネント・ファイル
|
*Ejb.jar | |
Web コンポーネント・ファイル
|
*.war | |
リソース・アダプタ・ファイル |
*.rar | |
J2EE アプリケーション・クライアント・ファイル | *.jar | |
<J2EE アプリケーション Deployment Descriptor> | *.xml |
もう少し、強い言い方をしてみましょう。すべてのJ2EEアプリケーションは、*.earの形のJ2EEアプリケーション・ファイルの形でまとめられていなければなりません。サーバ・サイドのアプリケーションとしてJ2EEが動くためには、*.earの形のファイルが存在して、それが、サーバ上に配置されなければなりません。J2EEアプリケーションのEARファイルは、内部に必ず、EJBコンポーネント・ファイルかWebコンポーネント・ファイルを含まなければなりません。
EARファイルの内部に含まれる、これらのファイルの構造については、次回に見ることにしましょう。
連載内容 | |
J2EEの基礎 | |
第1回 Java Pet Storeで、J2EEを体験する(1) | |
第2回 Java Pet Storeで、J2EEを体験する(2) | |
第4回 J2EEアプリケーションを構成するコンポーネント | |
第5回 データベースのブラウザを作る | |
第6回 EJBにおけるコンテナとコンポーネント | |
第7回 J2EEのセキュリティのキホンを知る | |
第8回 J2EEのトランザクション処理 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|