JBoss AS7を使い始める

JBoss ASは4.2.0.GA、5.1.0.GAを使ったことがあって、6.xも最新リリースをダウンロードして中を軽く見たみたことがあるけど、この前7.xをダウンロードしてみて、中の構成が大きく変更されていることを知った。

server/default/deploy/みたいなものは、別のものになっていて、ここでは簡単に移行のためのメモを書き残すことにする。以下、「これまでの」という記述は「Jboss6.x以前の」という意味合い。

メモにあたり、nekop さんのサイト( http://d.hatena.ne.jp/nekop/ )を参考にしました。

起動

bin/standalone.(bat|sh)を実行する。

これまでのrun.(bat|sh)と比べると、起動がとても早い(30sに対して2〜3s)。まったく同じ内容についての比較ではないかもしれないけど、それでも早い。

設定

設定ファイルは以下を参考にするとよい。基本的に必要なものだけが設定ファイルとして切り出されている模様。

https://github.com/jbossas/jboss-as/blob/master/build/src/main/resources/standalone/configuration/standalone.xml

アドレスのバインド設定

これまでの「run.bat」(ローカルからのみアクセス)から「run.bat -b 0.0.0.0」への変更に相当すること。

アドレスの定義はstandalone/configuration/standalone.xmlにあり、にする。

利用するポートを変えたい

8080から48080に変えるなど、JBoss ASが使用するポート番号のセットをまとめて変えたい場合、server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xmlを使っていた。

JBoss7ではどこで変えるのか要調査。ポートを設定しているようなファイルがstandalone\configuration以下に複数ある…。

JBoss6.xまでのdefault/all/minimalのような構成を分けて管理したい場合

bin/domain.(bat|sh)を実行する。
ドメインってのは、ドメインコントローラと呼ばれる一元管理サーバによって管理されるサーバ群のことらしい。

Jboss5.1.0.GAを使っていた時に、本番用とテスト用の2つのJBossを起動したい、って場合には、server/defaultフォルダ以下を丸ごとコピー(server/test)して、ポート番号が衝突しないように設定した上で、"run.bat"と"run.bat -c test"で別々のアプリケーションサーバを起動、みたいなことをしていた。
これが、ドメインコントローラ上から管理され、起動・停止が自由にできるようになっているらしい。

アプリケーションをデプロイ

standalone/deploymentsに.jarや.warや.earをコピー(つまり、server/default/deployに替わるものらしい)

確認

Seam2.2.0.GAのexamplesから作ったjboss-seam-booking.earを上記のstandalone/deploymentに放り込んでみる。

デプロイエラーになった。

02:47:48,404 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC0000
1: Failed to start service jboss.deployment.subunit."jboss-seam-booking.ear"."jb
oss-seam-booking.war".POST_MODULE: org.jboss.msc.service.StartException in servi
ce jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".PO
ST_MODULE: Failed to process phase POST_MODULE of subdeployment "jboss-seam-book
ing.war" of deployment "jboss-seam-booking.ear"
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(Deplo
ymentUnitPhaseService.java:121)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(Se
rviceControllerImpl.java:1824)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceCont
rollerImpl.java:1759)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886) [:1.6.0_29]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908) [:1.6.0_29]
        at java.lang.Thread.run(Thread.java:662) [:1.6.0_29]
Caused by: java.lang.NoClassDefFoundError: javax/faces/FacesException
        at java.lang.Class.getDeclaredConstructors0(Native Method) [:1.6.0_29]
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) [:1.6
.0_29]
        at java.lang.Class.getConstructor0(Class.java:2699) [:1.6.0_29]
        at java.lang.Class.getConstructor(Class.java:1657) [:1.6.0_29]
        at org.jboss.as.web.deployment.jsf.JsfManagedBeanProcessor.deploy(JsfMan
agedBeanProcessor.java:105)
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(Deplo
ymentUnitPhaseService.java:115)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException from [Mo
dule "deployment.jboss-seam-booking.ear:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:
191)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(Concu
rrentClassLoader.java:361)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(Concu
rrentClassLoader.java:333)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentCl
assLoader.java:310)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoad
er.java:103)
        ... 11 more

どうもSeam2.xにしろ3.xにしろ、JBoss AS7との連携はまだリスクがある(自己責任)な部分があるらしい。現実問題として、AS6になるかなぁ…。