第4回 J2EEアプリケーションを構成するコンポーネント
丸山不二夫
稚内北星学園大学学長
(http://www.wakhok.ac.jp/)
2001/6/30
今回の内容
|
EJBファイルとWARファイルの形式 |
今回は、すこし回り道になるのですが、EJBコンポーネント・ファイルとWebコンポーネントのWARファイルがどのような構造をしているかを見てみることにしましょう。
前回と同じく、petstore.earファイルを解凍して取り出したファイルの構造を探ることから始めることにしましょう。
EJBファイルとWARファイルの形式 |
*Ejb.jarファイルは、名前から分かるようにJar形式のファイルです。実は、*.warファイルもJar形式のファイルです。このように、それ自身がJar形式のファイルである*.earファイル(J2EEアプリケーション・ファイル)は、内部に同じくJar形式の*Ejb.jarファイル、*.warファイルを含んでいます。このあたりは、ZIPで圧縮したファイルに、さらにZIPで圧縮を加えたというよりは、1つのアプリケーションを構成する性格の異なる複数のファイルたちを1つのアプリケーション・ファイルに束ねたということでしょう。
余談ですが、JarファイルはZIPファイルだといいましたが、ZIPファイルにはMETA-INFOディレクトリがあるとは限りません。しかし、Jarファイルにはそれが存在します。META-INFOはMETA-INFORMATIONの略で、そのアーカイブ・ファイルの中身に「ついての(meta)」情報を格納します。その意味では、Deployment Descriptorの情報がここに置かれるのは自然なことです。
customerEjb.jarファイルを解凍する |
タマネギの皮をむくように、petstore.earファイルを解凍してcustomerEjb.jarを取り出し、再びcustomerEjb.jarファイルを解凍してみましょう。次のリストはこのEJBファイルに含まれているファイルの一覧です。
./META-INF/ejb-jar.xml |
リスト1 customerEjb.jarに含まれるファイルの一覧 |
EJBファイルの構造 |
たくさんのファイルが無秩序に存在しているように見えるかもしれませんが、そうではありません。EJBコンポーネントは、基本的にはEJBとその補助クラス・ファイルから構成されています。1つのEJBは、EJBクラスとリモート・インターフェイスとホーム・インターフェイスの3つのファイルによって定義されます。先のcustomerEjbの例では、Order、Customer、Accountという3つのEJBが含まれています。それぞれの名前を持った3つの定義ファイルが存在していることを確かめてください。このように、1つの*Ejb.jarファイルには複数のEJBが含まれることがあります。画面1の左側のパネルは、それぞれのEJBコンポーネント・ファイルに、複数のEJBが含まれていることを示しています。
画面1 左側のパネルを見ると、EJBコンポーネント・ファイルに、複数のEJBが含まれていることがわかる (クリックすると拡大します) |
EJBは、J2EEの本体といっていいほど大事なものです。ここでは、簡単にしか触れられませんでしたが、EJBとその3つの定義ファイルの役割などについては、別の機会に詳しく説明することになると思います。
以下に、一般的な形で、EJBファイルの構造をまとめてみました。
EJBコンポーネント・ファイル | *.Ejb.jar | |
EJBクラス | *.class | |
リモート・インターフェイス | *.class | |
ホーム・インターフェイス | *.class | |
その他のクラス | *.class | |
<EJB Deployment Descriptor> | *.xml | |
表1 EJB コンポーネントの構造 |
EJBコンポーネントに含まれるファイルたちは、どのようにJ2EEサーバに配置されるのでしょう? EJBコンポーネント自身に配置についての詳しい情報が含まれています。表1を見てください。META-INFOディレクトリの下に、ejb-jar.xmlという名前のXMLファイルがありますね。そのファイルが、このコンポーネントにかかわる詳細なDeployment Descriptorの情報を与えています。次に、そのリストの一部を示します。もちろん、petstore.earに含まれる5つの*Ejb.jarファイルすべてについて、このようなDeployment DescriptorがXMLの形式で記述されています。
ここでは、Order、Customer、Accountという3つのEJBそれぞれについて、ホーム・インターフェイスとリモート・インターフェイスとEJBクラスの3つの定義クラス名が、記述されています。これが表1のクラス・ファイルと対応していることを確認してください。
<?xml version="1.0"
encoding="ISO8859_1"?> |
リスト2 Deployment Descriptorの内容 |
petstore.warファイルを解凍する |
今度は、petstore.earファイルを解凍してpetstore.warを取り出し、再びこのファイルを解凍してDeployment Descriptorファイルを探してみましょう。このファイルには、300個近いファイルが詰め込まれています。Java Pet Storeデモが、結構大がかりなデモであることが分かると思います。この長大なファイル・リストを示すことはしませんが、ServletからJSP、画像ファイルからHTMLファイルまで、いろんな種類のファイルがこの中にあることが分かります。
./WEB-INF/web.xml |
リスト1 application.xml |
Webコンポーネントの構造 |
Webコンポーネントは、JSPファイル、Servletのクラス・ファイル、画像データやHTMLを含んでいます。そのほかにJSPの内部で呼び出されるJavaBeansのクラス・ファイルや、JSPのtag定義のクラス・ファイルなどのさまざまなJavaクラスを含むことができます。
Webコンポーネント・ファイル | *.war | |
JSPファイル | *.jsp | |
サーブレット・クラス | *.class | |
GIFファイル | *.gif | |
HTMLファイル | *.html | |
その他のJavaクラス | *.class | |
<Webコンポーネント Deployment Descriptor> | *.xml | |
表2 Webコンポーネントの構造 |
WebコンポーネントのDeployment Descriptor |
*.warファイルでは、META-INFOではなくWEB-INFOというディレクトリの下に、Web コンポーネントのDeployment Descriptorの情報が見つかります。次のリストは、web.xmlというWeb コンポーネントのDeployment Descriptorファイルの一部です。
<?xml version="1.0" encoding="ISO8859_1"?>
|
リスト1 application.xml |
J2EEアプリケーション・ファイルに含まれる |
このように、EARファイルに直接含まれるEJBコンポーネント・ファイル、Webコンポーネント・ファイルたちは、その内部にクラス構造を持っています。また、それぞれがその内部にDeployment Descriptor情報を抱えています。こうした形で、J2EEアプリケーション・ファイル *.earには、確かにDeployment用の情報が組み込まれていることが分かりました。
以下に、J2EEアプリケーション・ファイルに含まれるファイルの一覧を示します。
J2EEアプリケーション・ファイル *.ear | ||||||||||||||||||||||||||||||||||||||||||||||
|
J2EEアプリケーションの開発 |
これまでは、Java Pet Storeの解説を通じて、基本的には誰かが作ったJ2EEアプリケーションを動かすというJ2EEアプリケーションの利用者の立場でJ2EEを見てきましたが、今度は、J2EEアプリケーションの開発者の立場に立ってみようと思います。いうまでもありませんが、アプリケーションを使うのとアプリケーションを作るのとでは、まったく立場は違います。
第3回で“deployer”の話をしましたが、J2EEで面白いのは、開発者にもいろいろな層がありうることが想定されていることです。
J2EE Product Providerは、J2EEコンテナ自身やJ2EE開発ツールを作る開発者です。これは高度な作業で、基本的にはOSベンダやデータベース・ベンダが行う仕事かもしれません。Application Component Providerは、J2EEを構成する基本要素として、さまざまな機能を持つEJBコンポーネントやWebコンポーネントを市場に提供します。今後、日本でもこうしたJ2EEコンポーネント・プロバイダが成長していくでしょう。Application Assemblerは、市場でコンポーネント・プロバイダが提供する部品を調達して、それらを組み合わせてアプリケーションを作成します。
J2EEアプリケーションを作成するというのは、最終的には、J2EEアプリケーションをパッケージしたEARファイルを作成することです。EARファイルは、基本的にはEJBコンポーネント・ファイルとWebコンポーネント・ファイルから構成されているのはお分かりですね。それでは、EARファイルを構成する、これらのファイルは、どのように作られるのでしょうか? もちろん、それらのファイルの生成にもdeloytoolが使われます。前回見たように、deploytoolで配置可能なファイルはdeploytool自身で作られるのです。
アプリケーション開発のシナリオ |
J2EEアプリケーションを開発するうえで、こうしたJ2EEアプリケーション・ファイルの構成を知っていることが必要です。以下に、J2EEアプリケーション開発の典型的なシナリオでの大まかなステップを記します。
1 | 開発者は、まず、アプリケーションをWebコンポーネントとEJBコンポーネントの2つの部分に分ける設計をします |
2 | 続いて、それぞれのWebコンポーネント、EJBコンポーネントを構成するソフトウェア部品をコードします |
4 |
Webコンポーネント、EJBコンポーネントから、アプリケーション・ファイルを作成します ここでも、deploytoolを利用することができます。deploytoolのファイル・メニューの[Add to Application ...] のメニューを選んで、3で作成したコンポーネントを、1つずつアプリケーションに付け加えます(図3)。アプリケーション・ファイルのDeployment Descriptorも自動的に生成されます。
ここでは、コンポーネント・ファイルの追加に先立って、受け皿としてアプリケーションがあらかじめ必要であることに留意してください。アプリケーションの生成は、先のファイル・メニューの[New...]の中から可能です。 |
次回は、単純な、Webコンポーネントを含むJ2EEアプリケーションを実際に開発して、開発ツールとしてのdeploytoolの利用法を見てみたいと思います。
連載内容 | |
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に関する基礎知識を解説する。
|
|