感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JBoss ASにアプリケーションをデプロイする際の用語や仕組みのメモ。WAR,EJB-JAR,EAR,SARとは何か。

<スポンサーリンク>

デプロイって何?

WebアプリケーションやEJBファイルを、JBoss AS(アプリケーションサーバ)にコピーして使用できるようにすることをデプロイという。
英語にするとdeployで、配備する、という意味がある。

JBoss ASでは、アーカイブファイルを所定の位置に置くだけですぐに使うことができる。
ホットデプロイといって、アプリケーションが起動中でも、同じように所定の位置にコピーするだけで使えるようになる。

warファイルとかは、アーカイブファイルとしてだけではなく、展開したフォルダ名に~.warという名前をつけてコピーして、デプロイすることもできる。
これを展開形(Exploded)デプロイという。

JBossにデプロイ可能なアプリケーションの種類

JBoss ASにデプロイ可能なアプリケーションは4種類ある。
これらはアーカイブファイルにまとめてもいいし、展開形デプロイすることもできる。

  • WAR

→拡張子.warを持つ。Web ARchiveのこと。
コンテキストルート直下にあるWEB-INFディレクトリには、web.xmlファイルやjboss-web.xmlファイルを置く。web.xmlJava EE標準も設定を記述する。
jboss-web.xmlにはコンテキストルートの設定など、JBoss固有の設定を記述する。

→拡張子は.jarで、セッションBeanやエンティティBeanなどのEJBファイルとEJBの属性を記述するデプロイメントディスクリプタをパッケージングしたもの。
ルートディレクトリの直下のMETA-INFディレクトリにはエンティティBeanの永続属性を設定するデプロイメントディスクリプタのpersistence.xmlを配置する。

  • EAR

Enterprise ARchiveの略。拡張子は.earとなる。
WARファイルやEJB-JARファイルにパッケージングされたWebアプリケーションやEJBを、モジュールとして内部に取り込み、アーカイブしたもの。
EARファイルとして、WARファイルとEJB-JARファイルを1つにパッケージングすることで、WebアプリケーションとEJBのクラスローダが統合されて、他のアプリケーションのクラスローディングの影響を受けにくくなる。
ルートディレクトリ直下にあるMETA-INFにはapplication.xmlとjboss-app.xmlがあって、application.xmlJava EEの標準規約に従う。
jboss-app.xmlはJBoss固有のもので、EAR内で利用するライブラリのJARファイルの置き場所をlibrary-direcotryで指定したり、serviceで、SARファイル名を設定したりする。

  • SAR

Service ARchiveの略。拡張子は.sarで、SAR自体がJBoss固有のものである。
JBoss ASにデプロイするサービスを構成するMBeanクラスファイルとサービス内容を記述したデプロイメント・ディスクリプタであるjboss-service.xmlを含む。
SARファイルのルートディレクトリに、MBeanクラスファイルという普通のJavaのクラスファイルを配置する。
で、これらをサービスとして使うために、ルート直下のMETA-INFの下に、jboss-service.xmlを配置する。
こんな感じ。

<server>
	<mbean cose="hoge.fuga.HogeSample"
		name="jboss:service=HogeSample">
	<attribute name="MyName">Takashi</attribute>
	<depends>jboss:service=FugaService</depends>
	</mbean>
</server>

mbean要素には、JBoss ASにサービスとしてデプロイするMBeanを記述する。

参考文献

JBoss徹底活用ガイド ーJava・オープンソース・JBoss Seam・JBoss AS

JBoss徹底活用ガイド ーJava・オープンソース・JBoss Seam・JBoss AS

JBossの数少ない日本語書籍。
これはSeamとJBoss ASの両方の解説があるんだけど、自分はJBoss ASの方を活用している。
基礎の基礎をまず勉強したいときはこの本がぴったりだと思う。
その上で、JBoaa At Workなどを使って、実際に色々と動かしていくことが、JBossを勉強する方法かなぁと思っている。
まぁ、すごい人はそんな回り道しないで、JBossのソースを読んですぐ理解しちゃうんだけど・・・。