この記事では、JBoss v4にデプロイされたサーブレットとJSPをApache Geronimoに移行する際の一助となります。この記事は様々な種類のアプリケーションの移行に関する記事のシリーズのひとつです。
この記事はJ2EEの最も基礎的な側面のひとつ、すなわちサーブレットとJSPの移行をカバーしています。この移行の練習で使用するサンプル・アプリケーションは College Fest で、制御の流れを司るサーブレットとJSPだけを含んでいます。College Festサンプル・アプリケーションはデータベースは一切使用していません。JDBCアプリケーションの移行の詳細については 4.7. JBoss to Geronimo - JDBC の移行 の記事を参照してください。
この記事を読み終えれば、貴方はJBossのビルド・ファイルとデプロイメント記述子を再構成し、移行先であるApache Geronimo向けにセットアップしてシンプルなWebアプリケーションとしてデプロイできるようになります。
この記事は以下のセクションから構成されています。
サーブレットとJSPの実装の分析
サーブレットとJSPの実装はアプリケーション・サーバー毎に異なっているかもしれません。このセクションの目的はサーブレットおよびJSPの個別の機能をJBossとApache Geronimoの間で比較して、移行前に相違点を明確にして、計画を策定できるようにすることです。
Apache GeronimoはJ2EE WebアプリケーションをサポートするWebアプリケーション・コンテナを含んでいます。Webコンテナそれ自体はネットワーク・ポートやSSLオプションのような基本的な構成をサポートしており、WebアプリケーションはGeronimo固有の構成情報を含んでいる場合があります。WebアプリケーションはGeronimoのセキュリティ機構に参加しているので、Webアプリケーションを認証することでEJBやコネクターにセキュアにアクセスすることができます。
Apache Geronimoは現在2つのWebコンテナ、すなわち Jetty と Tomcat をサポートしています。
Jetty
Jettyは100% Javaで書かれたHTTPサーバーであり、サーブレット・コンテナです。ということは、サーブレットやJSPを使用して動的なコンテンツを生成する際に、別のWebサーバーを構成し、動かしておく必要がないということを意味します。Jettyは静的なコンテンツと動的なコンテンツの両方のための、完全な機能を持つWebサーバーです。
サーバーとコンテナを分離するソリューションと違って、JettyのWebサーバーとWebアプリケーションは、通信のオーバーヘッドや複雑な構成をとらずに、同一のプロセスの内部で動きます。さらに、Jettyはpure Javaのコンポーネントなので、デモ、配布、デプロイ用に貴方のアプリケーションに含めてしまうこともできます。
GeronimoではWebコンテナに接続を試みるブラウザーの経路を明示的に構成する必要があります。デフォルトのWebコンテナがJettyの場合には、この経路はコネクターと呼ばれます。標準的な構成ではJettyコネクターはHTTPをポート8080番で、HTTPSをポート8443番でサポートするように構成されています。
Jettyコネクター各々はGBeanなので、Jettyコネクターを構成する際にはGBeanの構成作業が必要です。
Apache Tomcat
Apache TomcatはJavaサーブレットとJSPテクノロジーの公式なリファレンス実装として使用されるサーブレット・コンテナです。
http://java.sun.com/products/servlet
http://java.sun.com/products/jsp
相違点
JBoss v4はデフォルトのWebコンテナとしてTomcat5.5しかサポートしていません。埋め込まれたTomcatサービスはdeployディレクトリーに存在する jbossweb-tomcat55.sar という拡張SARです。
HTTPコネクターはポート8080番の上に構成されており、もしApache HTTPのような分離されたWebサーバー経由で接続したい場合は8009番が使用されます。
デフォルトのWebコンテナの次の、二番目の大きな相違点はデプロイメント・プランです。Geronimoのデプロイメント・プランは特定のアプリケーションやサービスの構成情報を格納しているXMLファイルを含んでいるという意味で、J2EEのデプロイメント記述子に似ています。
セキュリティやリソース参照が不要な、非常にシンプルなアプリケーションでは、Geronimoのでプロイメント・プランは必要なく、デプロイ時に自動的にデフォルトのコンテキスト・ルートと依存性の定義が提供されます。
GeronimoのWebアプリケーションのデプロイメント・プランは geronimo-web.xml です。JBossで相当するデプロイメント記述子は jboss-web.xml です。より詳細なGeronimoのデプロイメント・アーキテクチャーについては Understand Geronimo's deployment architecture の記事をご参照ください。
サーブレットとJSPにおけるもうひとつの違いは、Webアプリケーションのデプロイの方法です。Geronimoでは、アプリケーションのパッケージ(ear, war, rar またはjar)は <geronimo_home>/bin ディレクトリーにある deployer.jar というデプロイ・ツールを使ってデプロイします。
deployer.jar は(もしプランが提供されていれば)デプロイメント・プランの中で提供された情報に基づいてアプリケーション・モジュールをGeronimoサーバーにデプロイします。その後、サーバーはメタ・データを構成ストアに、実行イメージはバイナリー・リポジトリーに各々保管します。以下の図はデプロイメント・ツールの動きを図解したものです。
JBossでは、Webアプリケーションはアプリケーション・パッケージ(ear, war, rar or jar)は、単純に<jboss_home>/server/<your_server_name>/deploy ディレクトリーにコピーするだけでサーバーはそれを検知し、適切にデプロイします。
以下の表はJBossとGeronimoの相違点のサマリーです。
機能 |
JBoss v4 |
Apache Geronimo |
---|---|---|
デプロイメント記述子/プラン |
jboss.xml |
geronimo-web.xml |
デプロイの方法 |
パッケージ(ear, war, rar or jar)をJBossサーバーの<jboss_home>/server/<your_server_name>/deploy |
サーバーのbinディレクトリー<geronimo_home>/binの - 1.9.3. Deployer tool - デプロイヤー・ツール を利用可能。 |
Web コンテナ |
Apache Tomcat 5.5 |
Jetty または Apache Tomcat |
サンプル・アプリケーション
College Fest アプリケーションは大学祭のイベントの登録申し込みを扱います。これはとてもシンプルなアプリケーションで、一切データベースは使いません。College Fest アプリケーションには以下の4種類のページがあります。
- Welcome(ようこそ)ページ
- Event List (イベント・リスト)ページ
- Event Details (イベントの詳細)ページ
- Registration (参加登録)ページ
以下の図でアプリケーションの流れを説明します:
ユーザーはWebページにアクセスしてユーザー名とパスワードを入力します。その後の画面で現在有効なイベントのリストが表示されます。利用者はリスト中のイベントをクリックすれば、その詳細を見ることができます。イベントの詳細ページでは、その特定のイベントへの参加申し込みを行えます。
アプリケーションのクラスとJSPページ
大学祭サンプル・アプリケーションは以下の2つのサーブレットから成り立っています。
- WelcomeServlet - ユーザーのログインを処理し、ユーザー名を取得してから次のサーブレットへ引き渡します。
- PersonalServlet - そのユーザー向けにページを処理してから制御をwelcome.jspに戻します。
大学祭サンプル・アプリケーションには以下のJSPが含まれています。
- welcome.jsp - イベントのリストをユーザーに表示して、どのイベントに参加するかを選択できるようにします。
- dc.jsp - Dumb Charades イベントの詳細を表示します。
- pp.jsp - Pot Potpourri イベントの詳細を表示します。
- wtgw.jsp - What's The Good Word イベントの詳細を表示します。
- gq.jsp - General Quiz イベントの詳細を表示します。
- team_reg.jsp - イベントの参加登録を処理します。
使用するツール
大学祭サンプル・アプリケーションを開発・ビルドするのに使用するツールは下記のとおりです。
Eclipse
サンプル・アプリケーションの開発にはEclipse IDEを使います。これはとてもパワフルで有名なオープンソースの開発ツールです。JBossとGeronimoの統合用のプラグインが利用できます。Eclipseは http://www.eclipse.org からダウンロードできます。
Apache Ant
Antはpure Javaのビルド・ツールです。大学祭アプリケーションのwarファイルをビルドするために使います。Antはhttp://ant.apache.orgからダウンロードできます。
JBoss環境
このセクションではサンプルのJBossの環境のインストールの方法やインストールの場所を示し、貴方の環境に於けるシナリオと対比できるようにします。
JBossのインストール、構成、管理の詳細な方法は、製品ドキュメントで提供されています。製品のWebサイトで最新のドキュメントを確認してください。
以下のリストがサンプル・アプリケーションをデプロイする際の出発点として、初めの環境のインストール・構成を完了する際に必要となるタスクの概要のハイライトです。
- 製品ドキュメントのガイドに従ってJBoss v4をダウンロードし、インストールします。以降、導入ディレクトリーは <jboss_home> と記載します。
- デフォルトのJBoss v4アプリケーション・サーバーのコピーを作成します。 <jboss_home>\server\default から下をすべて <jboss_home>\server\<your_server_name> へコピーします。
- <jboss_home>\bin ディレクトリーから
run.sh -c <貴方のサーバーの名前>
コマンドで新しいサーバーを開始します。 - サーバーが開始したら、WebブラウザーでURL: http://localhost:8080 を指定して、JBossが稼動していることを確認します。
- アプリケーション・サーバーが開始して稼動したら、次のステップとして、サンプル・アプリケーションに必要な残りの前提ソフトウエアをインストール・構成します。
前にも述べましたが、大学祭アプリケーションのバイナリーをビルドするにはApache Antを利用します。もし貴方がAntをインストールしていなければ、これが丁度よい機会です。インストール後、システムのpath変数に <ant_home>\bin ディレクトリーが追加されていることを確認してください。
Apache Antは以下のURLからダウンロードできます。
サンプル・アプリケーションのビルド
この記事で扱う大学祭アプリケーションにはアプリケーションをビルドする際に使用するAntスクリプトが含まれています。以下のリンクから大学祭アプリケーションをダウンロードしてください。
Zipファイルを解凍すると、college_festディレクトリーが作られます。そのディレクトリーで build.properties ファイルを開き、以下の例に従って貴方の環境に一致するように属性を編集してください。
#java.homeを貴方のJDKディレクトリーに書き換えます。 java.home=<JAVA_HOME> #j2ee.homeをlib/j2ee.jarの親ディレクトリーに書き換えます。 j2ee.home=<jboss_home>/server/<your_server_name> #jbossのホーム・ディレクトリーに書き換えます。 jboss.server=<jboss_home>/server/<your_server_name> #Geronimoのホーム・ディレクトリー geronimo.home=<geronimo_home>
college_festディレクトリーに更に2つのビルド・ファイル build.xmlとjboss-build.xmlもあります。build.xmlはデフォルトのビルド・ファイルで、もし貴方が ant とだけタイプしたら、アプリケーションのビルドにはこのファイルが使われます。今回のサンプル・アプリケーション用にはjboss-build.xml が提供されています。
college_festディレクトリーのコマンド行から、以下のコマンドをタイプしてください。
ant -f jboss-build.xml clean deploy
このコマンドを入力すると、antはjboss-build.xmlファイル中に定義してあるターゲットを使って大学祭アプリケーションをビルドし、JBossサーバーにデプロイします。<target name="deploy" ...>, にご注目ください。jboss-build.xml中のこの箇所でWARファイルをデプロイする場所を指定しています。以下の例でjboss-build.xmlファイル中の定義を示します。
<?xml version="1.0"?> <!-- build file for building a war --> <project name="build" default="war" basedir="."> <property file="build.properties"/> <property name="src.dir" value="src"/> <property name="dest.dir" value="bin"/> <target name="clean" description="Delete all generated files"> <echo message="Deleting bin directory" /> <delete dir="bin" /> </target> <target name="compile"> <mkdir dir="${dest.dir}"/> <javac srcdir="${src.dir}" destdir="${dest.dir}"> <classpath path="${java.home}/lib/tools.jar"/> <classpath path="${j2ee.home}/lib/j2ee.jar"/> </javac> </target> <target name="war" depends="compile"> <war destfile="college_fest.war" webxml="WEB-INF/web.xml"> <zipfileset dir="jsp" prefix="jsp"/> <zipfileset dir="pix" prefix="pix"/> <classes dir="${dest.dir}"/> <webinf dir="WEB-INF" /> </war> </target> <target name="deploy" depends="war"> <copy file="college_fest.war" todir="${jboss.server}/deploy"/> </target> <target name="undeploy"> <delete file="${jboss.server}/deploy/college_fest.war"/> </target> </project>
Antのビルドで作成されたwarはJBoss固有のデプロイメント記述子を含んでいます。下記にWARのWEB-INFディレクトリー中の jboss-web.xml を示します。
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <context-root>college_fest</context-root> <context-priority-classloader> false </context-priority-classloader> </jboss-web>
サンプル・アプリケーションのデプロイ
ここまでのステップでは、カスタマイズされたjboss-build.xmlファイルを使って、ビルド時にアプリケーションをデプロイする方法をご覧頂きました。もし貴方がデフォルトのbuild.xmlを使ってしまった場合は、大学祭アプリケーションをご自分の手でデプロイせねばなりません。大学祭アプリケーションをJBossにデプロイするには、Antでビルドした college_fest.war ファイルを以下のディレクトリーにコピーしてください。
<jboss_home>\server\<your_server_name>\deploy
既にJBossが開始しているなら、自動的にデプロイされ、アプリケーションが開始します。JBossが開始していなければ、次回の始動時にデプロイされ、開始されます。
アプリケーションのテスト
アプリケーションをテストするには、Webブラウザーを開いて以下のURLへアクセスしてください。
http://localhost:8080/college_fest
Welcome画面が表示され、貴方の名前と大学を指定すればログインできます。貴方の名前と大学を入力してSubmit をクリックすると、ページの末尾のメッセージに貴方の名前と、サイトに入るための"Click here" リンクが表示されます。サイトを閲覧でき、オプションをチェックできれば、大学祭アプリケーションは構成され稼動しています。
Geronimo環境
以下のURLからGeronimoをダウンロードしてインストールしてください。
http://geronimo.apache.org/downloads.html
URLにあるリリース・ノートには、システム要件、Geronimoのインストールや構成のための方法が正確に記載されています。以降、当記事では以降、Geronimoの導入ディレクトリーを <geronimo_home> と表記します。
TCP/IPポートの競合
もしJBossとGeronimoを同じマシンで動かそうとしているなら、いずれかのサーバーのデフォルトのポート番号を変更することを検討する必要があります。
ステップ・バイ・ステップの移行
大学祭アプリケーションをGeronimoに移行するには、jboss-web.xmlファイルをGeronimo固有の記述子ファイルである geronimo-web.xml に置換する必要があります。geronimo-web.xmlファイルはcollege_festディレクトリー構造のWEB-INFディレクトリーにあります。Geronimoのデプロイメント・プランgeronimo-web.xmlを以下の例で図示します。
以下のgeronimo-web.xmlはJ2Gツールで生成されたものです。
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1" xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.1" xmlns:security="http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1"> <sys:environment> <sys:moduleId> <sys:groupId>j2g</sys:groupId> <sys:artifactId>web-module</sys:artifactId> <sys:version>1.0</sys:version> <sys:type>war</sys:type> </sys:moduleId> <sys:dependencies/> </sys:environment> <context-root>college_fest</context-root> </web-app>
大学祭アプリケーションはシンプルなアプリケーションなので、Geronimoのデプロイメント・プランもとてもシンプルなものです。このアプリケーションではデータベースも使っていませんし、セキュリティの構成も行っていないことはお忘れなく。他の 「JBossからGeronimoへ」 の移行関連の記事を読むと、サンプル・アプリケーションの様々な移行シナリオでの複雑さが増すにつれ、デプロイメント・プランの複雑さも増すことに気づかれることでしょう。
この記事の初めの方で、デプロイメント・ツールの振る舞いについて説明しました。デプロイメントの際には、アプリケーション・モジュールとデプロイメント・プランを指定します。サンプルの大学祭アプリケーションはとてもシンプルなので、わざわざデプロイメント・プランを指定せず、デフォルトの設定値(例えばコンテキスト・ルートなど)を使ってGeronimoにデプロイを任せてしまってもかまいません。
Antを使ってサンプルの大学祭アプリケーションをビルドした際には、デフォルトのbuild.xmlの代わりにjboss-build.xml を使用しました。以下がデフォルトのbuild.xmlの例です。
<?xml version="1.0"?> <!-- build file for building a war --> <project name="build" default="war" basedir="."> <property file="build.properties"/> <property name="src.dir" value="src"/> <property name="dest.dir" value="bin"/> <target name="clean" description="Delete all generated files."> <echo message="Deleting bin folder" /> <delete dir="bin"/> </target> <target name="compile"> <mkdir dir="${dest.dir}"/> <javac srcdir="${src.dir}" destdir="${dest.dir}"> <classpath path="${java.home}/lib/tools.jar"/> <!--classpath path="${j2ee.home}/lib/j2ee.jar"/--> <classpath path="${geronimo.home}/repository/org/apache/geronimo/specs/geronimo-servlet_2.5_spec/1.1/geronimo-servlet_2.5_spec-1.1.jar" /> </javac> </target> <target name="war" depends="compile"> <war destfile="college_fest.war" webxml="WEB-INF/web.xml"> <zipfileset dir="jsp" prefix="jsp"/> <zipfileset dir="pix" prefix="pix"/> <classes dir="${dest.dir}"/> <webinf dir="WEB-INF" /> </war> </target> </project>
移行後のアプリケーションをビルドするには、コマンド行で追加のパラメーターの指定を一切せずに、ant コマンドを実行してください。大学祭アプリケーションのディレクトリー構造のルート・ディレクトリーにcollege_fest.warファイルが作成されます。
生成されたファイルを削除して、クリーンにビルドするには ant の次に ant clean を実行してください。
Back to Top
移行後のサンプル・アプリケーションのデプロイ
移行後の大学祭サンプル・アプリケーションをデプロイするために、Geronimoサーバーが起動していることを確認してください。
次に、コマンド行で <geronimo_home>/bin
ディレクトリーに移動して、下記のコマンドを入力してください。
deploy --user system --password manager deploy <college_fest_home>/college_fest.war
アプリケーションがデプロイされたら、Webブラウザーを開き、以下のURLへアクセスします。
http://localhost:8080/college_fest/
そしてJBoss環境での アプリケーションのテスト で行ったステップを繰り返してください。
サマリー
この記事では、シンプルなサーブレットとJSPをJBossからGeronimoアプリケーション・サーバーに移行する方法を示しました。アプリケーションをビルド、デプロイ、実行してからGeronimo環境へ移行する手順を順番に行いました。
当記事を読み終えた方への特記事項:
- Apache GeronimoはJettyとApache Tomcatの2種類のコンテナを提供しています。
- Geronimoへアプリケーションをデプロイするためのデプロイヤー・ツールの使用法を学びました。
- 常にデプロイメント・プランが必要というわけではありません。アプリケーションがリソース参照を使用していないなら、Geronimoのデフォルトのデプロイメントを受け入れることもできます。