kagamihogeの日記

kagamihogeの日記です。

JBossAS7.1.0.CR1bでstandalone.xmlを減らしたりしてみた

JBoss Application Server Downloads - JBoss Community

こんな環境でやりました

  • jdk1.6.0_24
  • eclipse3.7
  • JBoss Application Server 7(7.1.0.CR1b)
  • JBoss Tools 3.2

やったこと

JbossAS7を動かした - kagamihogeのblog と同じ手順でまずは動かしました。

コレ見てなんとなく「いらないサービス(モジュールと呼ぶべき?)消したら、起動速度早くなるのかな〜」とか思いました。ので、ドキュメントとかなんも見ずに設定ファイルを適当にいじって遊んでみることにしました。

まず、いじる設定ファイル。とりあえず起動する分には、standalone\configuration\standalone.xml を適当にさわれば良いらしい。そのため、これの中身を削ったり減らしたりしながら、トライアンドエラーで探っていくことにする。

standalone.xmlをぜんぶ消す

ぜんぶというと少し語弊がありますが、まずは次のような設定にしてみる。

<?xml version='1.0' encoding='UTF-8'?>

<server name="xxxxxxx" xmlns="urn:jboss:domain:1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">

</server>

*1

すると、起動した。


00:53:12,314 情報 [org.jboss.modules] JBoss Modules version 1.1.0.CR6
00:53:12,611 INFO [org.jboss.msc] JBoss MSC version 1.0.1.GA
00:53:12,658 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" starting
00:53:13,002 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 829ms - Started 20 of 21 services (1 services are passive or on-demand)

起動するのか……

とはいえ、アプリケーションサーバとしてはおろかHTTPサーバの機能すら削っているので、当然http://localhost:8080/とかも表示されない。Started 20 of 21 servicesとか言ってるのでまだなんか削れそうな気はするけど、今回はstandalone.xmlに焦点を絞ることにする。

HTTPサーバのモジュールを動かす

次はHTTPサーバとして動かすことを目論む。まともにドキュメントを読んでいないのでどの設定がどう必要なのか分からないため、とりあえず、webとかhttpとか以外のものを消してみる。

<?xml version='1.0' encoding='UTF-8'?>

<server name="xxxxxxx" xmlns="urn:jboss:domain:1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">

    <extensions>
        <extension module="org.jboss.as.web"/>
    </extensions>

    <profile>
        <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>

    </profile>

    <interfaces>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="http" port="8080"/>
    </socket-binding-group>
</server>

これで、HTTPサーバのモジュールが起動する。


01:03:24,736 情報 [org.jboss.modules] JBoss Modules version 1.1.0.CR6
01:03:25,033 INFO [org.jboss.msc] JBoss MSC version 1.0.1.GA
01:03:25,080 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" starting
01:03:26,173 INFO [org.apache.coyote.http11.Http11AprProtocol] Coyote HTTP/1.1を http--127.0.0.1-8080 で起動します
01:03:26,205 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 1610ms - Started 23 of 28 services (5 services are passive or on-demand)

ログ的にもhttpなんちゃらが動いてるのが見て取れる。ブラウザからもhttp://localhost:8080/がアクセスできる。alias name="example.com"とか要らなさそうなのもあるけど、今回はこれ以上突っ込まない。

JavaEEサーバのモジュールも動かす

次はやはりサーブレットとかを動かすことを目論む。ここは少し試行錯誤が入ったので、過程も書いていく。

<?xml version='1.0' encoding='UTF-8'?>

<server name="xxxxxx" xmlns="urn:jboss:domain:1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">

    <extensions>
        <extension module="org.jboss.as.ee"/>
        <extension module="org.jboss.as.web"/>
    </extensions>

    <profile>
        <subsystem xmlns="urn:jboss:domain:ee:1.0"/>
        <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>

    </profile>

    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="http" port="8080"/>
    </socket-binding-group>


</server>

eeってのがタブンJ2EEなんだろうという憶測で、その設定項目を増やしてみると、エラーになった。

頂いたコメントによると上記は誤りです。(20120109追記)

Servlet/JSPであれば、webモジュールだけで良くて、eeモジュールは必須ではありません。BeanVlidation、ManagedBean、DataSourceアノテーションなんかがeeモジュールのものです。


ところでこのエントリはJBossASをワザワザEclipseから起動しながら書いていますが、特に深い意味はありません。

というわけで、今の状態では起動するにはするんですが、Eclipseからプロジェクトを追加してjspなどにブラウザからアクセスしても404になる。なぜか? デプロイ担当のモジュールが居ないからなんですね。

ということで、デプロイをやってくれるっぽいdeployment-scannerのモジュールの設定を追加する。ついでに、このモジュールが依存するsecurity, namingのモジュールの設定も追加する。

<?xml version='1.0' encoding='UTF-8'?>

<server name="xxxxxxxxxx" xmlns="urn:jboss:domain:1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">

    <extensions>
        <extension module="org.jboss.as.deployment-scanner"/>
        <extension module="org.jboss.as.naming"/>
        <extension module="org.jboss.as.security"/>
        <extension module="org.jboss.as.web"/>
    </extensions>

    <profile>
        <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.0">
            <deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:naming:1.1"/>
        <subsystem xmlns="urn:jboss:domain:security:1.1">
            <security-domains>
                <security-domain name="other" cache-type="default">
                    <authentication>
                        <login-module code="UsersRoles" flag="required"/>
                    </authentication>
                </security-domain>
            </security-domains>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>
    </profile>

    <interfaces>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="http" port="8080"/>
    </socket-binding-group>


</server>

これで、デプロイされてJ2EEサーバが立ち上がる。適当なjspを作ってアクセスするとブラウザからちゃんと画面が表示される。


15:03:49,296 情報 [org.jboss.modules] JBoss Modules version 1.1.0.CR6
15:03:49,608 INFO [org.jboss.msc] JBoss MSC version 1.0.1.GA
15:03:49,655 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" starting
15:03:50,202 INFO [org.jboss.as.security] Activating Security Subsystem
15:03:50,202 INFO [org.jboss.as.naming] JBAS011800: Activating Naming Subsystem
15:03:50,202 INFO [org.jboss.as.security] Picketbox version=4.0.6.Beta2
15:03:50,452 INFO [org.jboss.as.naming] JBAS011802: Starting Naming Service
15:03:50,749 INFO [org.jboss.as.server.deployment.scanner] JBAS015012: Started FileSystemDeploymentService for directory C:\...\jboss-as-7.1.0.CR1b\standalone\deployments
15:03:50,764 INFO [org.jboss.as.server.deployment.scanner] JBAS015014: Re-attempting failed deployment jboss71test.war
15:03:50,764 INFO [org.jboss.as.server.deployment.scanner] JBAS015003: Found jboss71test.war in deployment directory. To trigger deployment create a file called jboss71test.war.dodeploy
15:03:51,014 INFO [org.apache.coyote.http11.Http11AprProtocol] Coyote HTTP/1.1を http--127.0.0.1-8080 で起動します
15:03:51,030 INFO [org.jboss.as] JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 1875ms - Started 38 of 43 services (5 services are passive or on-demand)
15:03:51,046 INFO [org.jboss.as.server.deployment] Starting deployment of "jboss71test.war"
15:03:51,561 INFO [org.jboss.web] registering web context: /jboss71test
15:03:51,952 INFO [org.jboss.as.server] JBAS018559: Deployed "jboss71test.war"

*2

設定を追加するに従い、だんだんコンソールログが増えていくのが面白いですね。

そして、このweb+J2EEという設定項目は良くありがちな設定パターンだからなのか、standalone\configuration\standalone_xml_history\standalone.boot.xmlにマッタク同じ内容のファイルが置いてあります。デフォルトのstandalone.xmlだと、クラスタリングやキャッシュのinfinispanとかEJB3とかWebサービス(SOAPとかWSDLとかそっち系)とか、使う時は使うんだろうけど、使わない時はマッタク使わないものも入ってるんですよね。とはいえまぁJBoss選ぶような人たちはそういうモジュールを使う人が多くて、だからデフォルトの設定ファイルではよくつかいそーなものについては最初から設定されてる、ということなんでしょうかね。
頂いたコメントによると上記は誤りです。(20120109追記)

standalone_xml_history/standalone.boot.xmlはバックアップファイルで、事前に用意されていたものではありません。変更後のものが起動時にバックアップされたものです。

しかしまぁ、こうしてアレコレやってみるとJBossマジイミフ状態から少しくらいは抜け出せたような気分が味わえます。このエントリの当初目的であった「色んなもん消せばもう少しくらい早くなるかな?」も達成できましたし、謎の満足感がせりあがってくる。

あとはJBoss Application Server 7 - JBoss Communityのトップページで喧伝されてるModular Designがどーのこーのの片鱗が見えてくる感じですね。設定ファイルでモジュールの設定を増やしたり減らしたりしてると、なんとなく言いたいことが伝わってくるといいますか。

*1:server name="xxxxxxx"のところは環境に応じて何か適当な値が入ってると思ってください

*2:C:\....のところは何か適当なローカルファイルのパスが書かれているのを一応省略したもの