Menu

設定ファイルリファレンス

S2BlazeDSで使われている設定ファイルの説明をします。

web.xml

サーブレットコンテナ用の設定ファイルです。WEB-INFにおきます。 s2blazeds-server-exampleプロジェクトでは、webapp/WEB-INFにあります。

<?xml version="1.0"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=
    "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <context-param>
        <param-name>flex.class.path</param-name>
        <param-value>/WEB-INF/flex/hotfixes</param-value>
    </context-param>

    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>
    
    <filter>
        <filter-name>encodingfilter</filter-name>
        <filter-class>
            org.seasar.extension.filter.EncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>hotdeployfilter</filter-name>
        <filter-class>
            org.seasar.framework.container.hotdeploy.HotdeployFilter
        </filter-class>
    </filter>

    <filter>
        <filter-name>s2filter</filter-name>
        <filter-class>
            org.seasar.framework.container.filter.S2ContainerFilter
        </filter-class>
    </filter>

    <filter>
        <filter-name>routingfilter</filter-name>
        <filter-class>
            org.seasar.struts.filter.RoutingFilter
        </filter-class>
        <init-param>
            <param-name>jspDirectAccess</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>
        
    <filter-mapping>
        <filter-name>encodingfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <filter-mapping>
        <filter-name>hotdeployfilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>s2filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>routingfilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>configFactory</param-name>
            <param-value>
                org.seasar.struts.config.S2ModuleConfigFactory
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>s2container</servlet-name>
        <servlet-class>
            org.seasar.framework.container.servlet.S2ContainerServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <display-name>MessageBrokerServlet</display-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>s2container</servlet-name>
        <url-pattern>/s2container</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
    </welcome-file-list>
    
    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error/debug.jsp</location>
    </error-page>
    
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored>
            <page-encoding>UTF-8</page-encoding>
            <scripting-invalid>false</scripting-invalid>
            <include-prelude>/common/common.jsp</include-prelude>
        </jsp-property-group>
    </jsp-config>
</web-app>

flex.class.pathは、ホットフィックス用みたいです。 資料がなくて実体が良くわかりません。

HttpFlexSessionは、FlexSession用のリスナです。

EncodingFilterは、リクエストのパラメータをエンコードするためのフィルタです。

S2ContainerFilterは、Seasar2がリクエストやレスポンスなどの サーブレット用のオブジェクトをあつかえるようにするためのフィルタです。

HotdeployFilterは、Seasar2がJavaのクラスの変更をHOTに認識できるようにするためのフィルタです。

filterタグとfilter-mappingタグの順番は、非常に重要です。 必ず上記の順序で定義するようにしてください。

Seasar.2.4.34以前では上記の通りS2ContainerFilter,HotDeployFilterの順序で定義します。

Seasar2.4.35以降の場合はweb.xmlでHotDeployFilter,S2ContainerFilterの順でfilterを適用してください。

S2ContainerServletは、Seasar2の初期化と終了処理を行なうためのサーブレットです。 ActionServletよりも後に起動されるようにload-on-startupの値を ActionServletのload-on-startupの値より大きくしてください。

MessageBrokerServletは、BlazeDSの起点となるサーブレットです。 S2ContainerServletよりも後に起動されるようにload-on-startupの値を S2ContainerServletのload-on-startupの値より大きくしてください。

services-config.xml

MessageBrokerServletが最初に読み込むファイルがWEB-INF/flex/services-config.xmlです。 Seasar2用にmy-amfのEndpointをS2AMFEndpointに書き換えます。

<services-config>
    ...
    <channels>
        ...
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
                class="org.seasar.blazeds.endpoints.S2AMFEndpoint"/>
        </channel-definition>
        ...
    </channels>
    ...
</services-config>

SSL通信を使用するときには、my-amfのEndpointに加えて my-secure-amfの設定のEndpointをS2SecureAMFEndpontに書き換えます。(S2BlazeDS1.0.2以降)

<services-config>
    ...
    <services>
    ...
    	<default-channels>
           <channel ref="my-secure-amf"/>
           <channel ref="my-amf"/>
        </default-channels>
    </services>
    ...
    <channels>
        ...
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
                class="org.seasar.blazeds.endpoints.S2AMFEndpoint"/>
        </channel-definition>
        ...
        <channel-definition id="my-secure-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure"
                class="org.seasar.blazeds.endpoints.S2SecureAMFEndpoint"/>
        </channel-definition>
        ...
        
    </channels>
    ...
</services-config>

remoting-config.xml

services-config.xmlのservice-includeタグ経由で読み込まれるファイルが WEB-INF/flex/remoting-config.xmlです。 Seasar2用にjava-objectのadapter-definitionをコメントアウトして、 s2-objectのadapter-definitionを追加します。

<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
    <!--
        <adapter-definition id="java-object"
            class="flex.messaging.services.remoting.adapters.JavaAdapter"
            default="true"/> 
    -->
        <adapter-definition id="s2-object"
            class="org.seasar.blazeds.adapters.S2Adapter"
            default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
    
</service>

SSL通信をするときには、Channelの設定にsecure-amfのchannelsetを追加します。(S2BlazeDS1.0.2以降)

<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
    <!--
        <adapter-definition id="java-object"
            class="flex.messaging.services.remoting.adapters.JavaAdapter"
            default="true"/> 
    -->
        <adapter-definition id="s2-object"
            class="org.seasar.blazeds.adapters.S2Adapter"
            default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-secure-amf"/>
        <channel ref="my-amf"/>
    </default-channels>
    
</service>

messaging-config.xml

services-config.xmlのservice-includeタグ経由で読み込まれるファイルが WEB-INF/flex/messaging-config.xmlです。 Seasar2用の設定は特に必要ありません。 メッセージの送信先・受信元をdestinationタグで定義します。

<service id="message-service"
    class="flex.messaging.services.MessageService">
    ...
    <destination id="feed"/>

    <destination id="chat"/>
    
</service>

proxy-config.xml

services-config.xmlのservice-includeタグ経由で読み込まれるファイルが WEB-INF/flex/proxy-config.xmlです。 DefaultHTTPの定義に、dynamic-urlタグを追加します。 *を指定することで、FlexのHTTPServiceタグのurl属性や WebServiceタグのwsdl属性で指定した値でそのまま外部にアクセスすることができます。

<service id="proxy-service"
    class="flex.messaging.services.HTTPProxyService">
    ...
    <destination id="DefaultHTTP">
        <properties>
            <dynamic-url>*</dynamic-url>
        </properties>
    </destination>
    ...
</service>

app.dicon

Seasar2アプリケーションの起動時に最初に読み込まれるファイルがapp.diconです。 app.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに app.diconがあります。

app.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="convention.dicon"/>
    <include path="aop.dicon"/>
    <include path="j2ee.dicon"/>
    <include path="s2jdbc.dicon"/>
	
    <component name="actionMessagesThrowsInterceptor"
        class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
</components>

ある設定ファイルから別の設定ファイルを読み込むためには、 includeタグを使います。 includeされている設定ファイルから、さらに別の設定ファイルをincludeすることができるので、 app.diconをルートとして、設定ファイルのツリーが構成されます。

convention.diconは規約を定義している設定ファイルです。

aop.diconはトレースなどの良く使うインターセプタが定義されている設定ファイルで、 s2-framework-xxx.jarの中に含まれています。 インタセプタとは、メソッドの呼び出しの前後に自動的に呼び出されるAOPのモジュールです。 AOPの詳細は、こちらを参照してください。

j2ee.diconはトランザクション用のインターセプタが定義されている設定ファイルで、 s2-extension-xxx.jarの中に含まれています。

s2jdbc.diconはS2JDBC用の設定ファイルです。

SAStrutsでアクション以外から、 ActionMessages(html:errors)にメッセージを出力するためのインターセプタが ActionMessagesThrowsInterceptorです。 詳細は、こちらを参照してください。

convention.dicon

規約を定義しているのがconvention.diconです。 convention.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに convention.diconがあります。

convention.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <component
        class="org.seasar.framework.convention.impl.NamingConventionImpl">
        <initMethod name="addRootPackageName">
            <arg>"flex.samples"</arg>
        </initMethod>
    </component>
    <component
        class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
</components>

addRootPackageNameで追加しているflex.samplesの部分は、 プロジェクトにあわせて書き換えてください。 ルートパッケージの詳細は、こちらを参照してください。

env.txt

Seasar2が動作している環境を定義するファイルがenv.txtです。 env.txtは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに env.txtがあります。

デフォルトで定義されている環境は下記のとおりです。

  • utは単体テスト用の環境です。
  • ctは結合テスト用の環境です。
  • itは統合テスト用の環境です。
  • productは本番用の環境です。env.txtがない場合のデフォルトです。

Seasar2がHOT deployで動作するのは、env.txtがctの場合です。 s2blazeds-server-exampleプロジェクトでは、env.txtがctに設定されています。

env.txtがitかproduct(設定無し)の場合、Seasar2はCOOL deployで動作します。 COOL deployで動作している場合、Javaのクラスの変更をHOTに認識することはできませんが、 アプリケーションの起動時にすべてのデプロイを完了させるので、 アプリケーションがHOT deployに比べて高速に動作します。

env.txtがutの場合、Seasar2はWARM deployで動作します。 WARM deployで動作している場合、Javaのクラスの変更をHOTに認識せず、 アプリケーションの起動時にもデプロイしません。 ただし、デプロイした内容をキャッシュするので、 一度利用したコンポーネントは高速に動作します。

それに対し、HOT deployは、HOTに変更を認識するためにリクエストの終了時に デプロイした内容はすべて破棄して、 リクエストのたびに必要とされるコンポーネントを再デプロイします。

WARM deployのCOOL deployに対するメリットは、 アプリケーションの起動が早いことです。 例えば、COOL deployの場合、1つのテストケースのメソッドで1つしかコンポーネントを 使わない場合でも、すべてのコンポーネントをデプロイしてしまいます。 それに対し、WARM deployでは、必要なコンポーネントしかデプロイしないので、 テストケースを高速に実行できます。 また、テストの場合は、HOT deployは必要ありません。

データプッシュを使う場合には、HOT deployを使うことができません。 COOL deployかWARM deployを使うようにしてください。

env_ut.txt

S2Unitを使った 単体テスト用の環境を定義するファイルがenv_ut.txtです。 env_ut.txtは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに env_ut.txtがあり、値はutになっています。

s2container.dicon

Seasar2自身をカスタマイズする設定ファイルがs2container.diconです。 s2container.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに s2container.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
    <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
    <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
</components>

includeタグのcondition属性を使って、 特定の条件に一致するときにファイルをincludeすることができます。 #ENVは、env.txtの値です。 条件は、OGNLで記述します。 warmdeploy.dicon、hotdeploy.dicon、cooldeploy.diconは、 s2-framework-xxx.jarの中に含まれています。

env.txtの値で、Seasar2のデプロイの仕方が変化するのは、s2container.diconで実現されています。

creator.dicon

ルートパッケージ.serviceなどにおいたJavaの設定情報を自動的に作成するための 設定ファイルがcreator.diconです。 creator.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに creator.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="convention.dicon"/>
    <include path="customizer.dicon"/>
	
    <component
        class="org.seasar.framework.container.creator.ActionCreator"/>
    <component
        class="org.seasar.framework.container.creator.ServiceCreator"/>
    <component
        class="org.seasar.framework.container.creator.LogicCreator"/>
    <component
        class="org.seasar.framework.container.creator.DtoCreator"/>
    <component
        class="org.seasar.framework.container.creator.InterceptorCreator"/>
</components>

action、service、logic、dtoなどそれぞれのパッケージ応じたクリエータが登録されています。

customizer.dicon

クリエータが作成した設定情報をカスタマイズするための 設定ファイルがcustomizer.diconです。 customizer.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに customizer.diconがあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="default-customizer.dicon"/>
	
    <component name="actionCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addAspectCustomizer">
            <arg>"actionMessagesThrowsInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
            </arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.struts.customizer.ActionCustomizer"/>
            </arg>
        </initMethod>
    </component>
	
	<component name="serviceCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
            </arg>
        </initMethod>
    </component>
    
    <component name="logicCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component
                    class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
            </arg>
        </initMethod>
    </component>
</components>

アクション、サービス、ロジックの設定をカスタマイズするために actionCustomizer、serviceCustomizer、logicCustomizerが定義されています。

aop.traceInterceptorはトレース用のログを出力するためのインターセプタで、 aop.diconに定義されています。

actionMessagesThrowsInterceptorはActionMessagesExceptionをキャッチして、 ActionMessages(html:errors)にメッセージを出力するためのインターセプタで、 app.diconに定義されています。

TxAttributeCustomizerは、トランザクションを自動的に処理するためのカスタマイザです。 詳細は、こちらを参照してください。

ActionCustomizerは、アクションがデプロイされるときに、Struts用の設定情報を自動的に組み立てるクラスです。

jdbc.dicon

データベース接続用の設定ファイルがjdbc.diconです。 jdbc.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに jdbc.diconがあります。

jdbc.diconの詳細は、こちらを参照してください。

s2jdbc.dicon

S2JDBC 用の設定ファイルがs2jdbc.diconです。 s2jdbc.diconは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに s2jdbc.diconがあります。

s2jdbc.diconの詳細は、こちらを参照してください。

log4j.properties

log4j 用の設定ファイルがlog4j.propertiesです。 log4j.propertiesは、クラスパスの通っているディレクトリにおきます。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesに log4j.propertiesがあります。

log4j.category.org.seasar=DEBUG, C
log4j.additivity.org.seasar=false

log4j.category.flex.samples=DEBUG, C
log4j.additivity.flex.samples=false

log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.out
log4j.appender.C.ImmediateFlush=true
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

flex.samplesの部分は、ルートパッケージ名を指定します。 ルートパッケージの詳細は、こちらを参照してください。