JBossにデプロイするアプリを入れるフォルダを変更するの巻

あまりJBossを触ったことがなかったですが、タイトルの件を知りませんかと言われて調査したので、それのメモです。


JBossの構造

ところでJBossの構造ってどうなってるの、という話ですが、JBossのドキュメントにこのような図が載っています。


http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Web_Platform/5.0/html/Administration_And_Configuration_Guide/images/jboss-as-components-ewp.png


JBoss MicroContainerというのが、その上に乗っかる各種サービスを管理するコンテナです。
WebコンテナやEBJコンテナもこのMicroContainerに乗っかっています。
JBossは、MicroContainer上に乗っけるものを選んで、「プロファイル」という単位で管理できるようです。
TomcatはいるけどEJBはいらない、みたいな構成を作れる感じです。

JBossのダウンロード

http://www.jboss.org/jbossas/downloads
からダウンロード可能。最新の安定版は5.1。ライセンスはLGPLです。GPLじゃないのが男気ですね。
なお、上記リンクから5.1のダウンロード先に飛ぶと、「Download Now!」のリンクはなぜかweldなのでご注意。
一覧から、「jboss-5.1.0.GA-jdk6.zip」あたりを選択してダウンロードします。

展開

ダウンロードしたアーカイブを展開します。
中のツリーはこんな具合です。



JBossのコア部分と、serverフォルダがあります。serverフォルダには、いくつかのプロファイルが入っています。
deployフォルダが、そのプロファイルにデプロイされているサービスやアプリです。
中を見るとわかるのですが、allだとクラスタやらWebサービスやらEJB3やら入っていて、逆にminimalだと何も入っていません。
以下はwebプロファイルのdeployフォルダの中身です。



deployフォルダに、Tomcatと普通のwebアプリが同居しています。そのほかにも、jmxやらtransactionの設定ファイルが入っています。なんとなく違和感のある構成ですが、これがJBoss流のようです。

起動

起動は、binフォルダのrun.bat(run.sh)で行います。引数なしの場合、defaultプロファイルが起動します。
コマンド引数の-cでプロファイル名を指定すると、そのプロファイルが起動します。先ほどのwebプロファイルの場合、

run.bat -c web

という風になります。

JBossにデプロイするアプリを入れるフォルダを変更する

ここまでが前置きで、タイトルの件に戻ります。
JBossにデプロイするアプリを入れるフォルダを変更したい」というのは、deployフォルダにいろいろ入っていて、アプリだけ別のところにデプロイできないか、という要望でした。TomcatEJBコンテナと同列にアプリを置くというのもなんとなく違和感があるのはうなずけるのではないかなと思います。


ということでしばらくググってみると、同様のお悩みに回答したwikiに当たりました。
http://community.jboss.org/wiki/HowtodeploymyapplicationinanexternaldirectoryinJBoss-5
各プロファイルの下にconfディレクトリがあるのですが、その中のbootstrap/profile.xmlを変更すればOKのようです。


まず、デプロイ先ディレクトリを作成します。

つぎに設定ファイル(conf/bootstrap/profile.xml)を変更します。

      <property name="bootstrapURI">${jboss.server.home.url}conf/jboss-service.xml</property>
		<property name="deployersURI">${jboss.server.home.url}deployers</property>
		<property name="applicationURIs">
			<list elementClass="java.net.URI">
				<value>${jboss.server.home.url}deploy</value>
				<!-- 追加 -->
				<value>${jboss.server.home.url}webapps</value>
			</list>
		</property>
		<property name="attachmentStoreRoot">${jboss.server.data.dir}/attachments</property>
		<property name="profileFactory"><inject bean="ProfileFactory" /></property>
	</bean>


最後にwebappsフォルダにwarファイル(t2-sample.war)を入れ、起動します。


起動ログですが、deployフォルダに入っているjmx-consoleと、webappsフォルダに入っているt2-sampleがデプロイされていることが分かります。
うまく行ったようです。

結論

ちょっとJBossが身近に感じました。