S2Container に統合する場合は S2Container2.4 の SMART Deploy 環境下で動作させることを前提としています。 ソースコードのパッケージ構成は SMART Deploy 推奨のパッケージ構成 に従ってください。\
まずは以下のコマンドを入力してください。
もし「BUILD FAILURE」と表示されエラーになった場合は、maven-archetype-plugin が古い可能性があります。 その場合「M2_REPO/org/apache/maven/plugins/maven-archetype-plugin/」をディレクトリごと削除して再実行することで、 最新のmaven-archetype-pluginを使用して実行することができます。(M2_REPOはMavenのローカルリポジトリ)
mvn archetype:generate -DarchetypeCatalog=http://cubby.seasar.org/
コマンド入力後、いくつかの質問に回答していきます。
Choose archetype: 1: remote -> cubby-s2-archetype (Cubby 2.0.1 S2Container Integration) 2: remote -> cubby-guice-archetype (Cubby 2.0.1 Guice Integration) 3: remote -> cubby-guice-archetype (Cubby 2.0.1 Spring Integration) 4: remote -> cubby-archetype (Cubby 1.1.7) Choose a number: (1/2/3/4):
1を入力して、cubby-s2-archetype (Cubby 2.0.1 S2Container Integration) を選んでください。
Define value for groupId: :
作成するプロジェクトのグループIDを入力してください。 例 : com.example.foo
Define value for artifactId: :
作成するプロジェクトのアーティファクトIDを入力してください。 例 : barapp
Define value for version: :
作成するプロジェクトのバージョンを入力してください。 例 : 1.0-SNAPSHOT
Define value for package: :
作成するプロジェクトのパッケージを入力してください。 例 : com.example.foo.barapp
Confirm properties configuration: cubby-version: 2.0.1 s2container-version: 2.4.38 s2dao-version: 1.0.50 use-s2dao: false use-s2jdbc: true groupId: com.example.foo artifactId: barapp version: 1.0-SNAPSHOT package: com.example.foo.barapp Y: :
いままで入力した内容の確認を求められます。問題がなければ Y を入力してください。プロジェクトの雛形が作成されます。
s2container などのライブラリのバージョン、S2Dao/S2JDBC を使用するかどうかの設定を変更する場合はここで N を選択して再度設定を入力してください。 再設定の際に全てのオプションが設定可能です。(プロジェクトのアーティファクト名、パッケージ名は再入力する必要があります。)
デフォルトでは上記のように S2JDBC を使用する、S2Dao を使用しない設定になっています。
また、ここで作成された pom.xml に含まれる production プロファイルにはリリース向けの log4j.properties と env.txt が含まれます。 以下のようにプロファイルを指定して (-Pproduction) war ファイルを作成した場合、Cool Deploy での動作となります。 (参考:Seasar2のevn.txtについての説明)
mvn clean package -Pproduction
ディレクトリに配備する必要があるファイルを説明します。 Maven2 を使わずにプロジェクトを作成するときも参考にしてください。
依存関係を参照してください。 WEB-INF/lib 以下に配備します。
主な依存ライブラリを以下にあげます。
| cubby-*.jar | Cubby 本体 | 必須 |
| cubby-s2-*.jar | S2Container 統合 | 必須 |
| cubby-unit-*.jar | 単体テストサポート | 必須 |
| cubby-gson-*.jar | JSON サポート | 任意 |
| s2-framework-*.jar s2-extension-*.jar s2-tiger-*.jar |
S2Container | 必須 |
| slf4j-api.jar | ログ出力 | 必須 |
| commons-fileupload-*.jar commons-io-*.jar |
ファイルアップロード機能 | 必須 |
| Cubby | S2Container |
| 2.0.0+ | 2.4.38+ |
Cubby はサーブレットフィルタとして動作します。 web.xml にサーブレットフィルター、フィルターマッピング、サーブレットフィルタ、サーブレットマッピングを追加します。 登録する際は以下の順序で登録してください。
*.jsp ファイルなど、直接アクセスされたくないファイルへのアクセスを制御するフィルターです。
この例ではブラウザ等から *.jsp へアクセスがあった場合に NotFound (404) を返します。
<filter>
<filter-name>senderror</filter-name>
<filter-class>org.seasar.cubby.filter.SendErrorFilter</filter-class>
<init-param>
<param-name>statusCode</param-name>
<param-value>404</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>senderror</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
リクエストのエンコーディングを設定するためのフィルタです。
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.seasar.cubby.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
リクエストの自動バインディングを使用するので、S2ContainerFilter を定義します。
<filter>
<filter-name>s2container</filter-name>
<filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>s2container</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
Hot deploy を使用する場合は HotdeployFilter を定義します。
<filter>
<filter-name>hotdeploy</filter-name>
<filter-class>org.seasar.framework.container.hotdeploy.HotdeployFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hotdeploy</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
Cubby の主な処理を行うフィルタです。 リクエストの情報からアクションメソッドを起動します。 対象のアクションが見つからない場合は FilterChain で後続のフィルタに処理を移譲します。
また、処理の対象外とする URL を ignorePathPattern で指定できます。 Hot deploy の場合はすべてのパスを対象としてしまうとクラスパスを走査する回数が増えるので、イメージのフォルダなどはここで指定して処理対象外とすることでパフォーマンスの低下を防ぐことができます。 対象外にするパスを正規表現のカンマ区切りで指定してください。
<filter>
<filter-name>cubby</filter-name>
<filter-class>org.seasar.cubby.filter.CubbyFilter</filter-class>
<init-param>
<param-name>ignorePathPattern</param-name>
<param-value>/css/.*,/js/.*,/img/.*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cubby</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
S2Container のサーブレットです。
<servlet>
<servlet-name>s2container</servlet-name>
<servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
<init-param>
<param-name>configPath</param-name>
<param-value>app.dicon</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>s2container</servlet-name>
<url-pattern>/s2container/*</url-pattern>
</servlet-mapping>
Cubby のプラグインの初期化を行うサーブレットです。
<servlet>
<servlet-name>cubby</servlet-name>
<servlet-class>org.seasar.cubby.servlet.CubbyServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
以下の 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="cubby.dicon"/>
<include path="app-cubby.dicon"/>
</components>
dicon ファイルの設定例を参考に、ルートパッケージを設定してください。
dicon ファイルの設定例を参考に、ActionCreator を設定してください。
アクションメソッドでトランザクションの制御が必要な場合もここで定義してください。 org.seasar.cubby.customizer.ActionMethodCustomizer は、アクションメソッドのみが対象になるカスタマイザです。
<?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="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<!-- トランザクションの設定 -->
<initMethod name="addCustomizer">
<arg>
<component class="org.seasar.cubby.customizer.ActionMethodCustomizer">
<initMethod name="addInterceptorName">
<arg>"j2ee.requiredTx"</arg>
</initMethod>
<property name="pointcut">".*"</property>
</component>
</arg>
</initMethod>
</component>
</components>
Cubby アプリケーション全体の設定です。 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 namespace="app-cubby">
<include path="cubby-converters.dicon"/>
<!-- date and time format patterns -->
<component class="org.seasar.cubby.controller.impl.DefaultFormatPattern">
<property name="datePattern">"yyyy-MM-dd"</property>
<property name="timePattern">"HH:mm:ss"</property>
<property name="timestampPattern">"yyyy-MM-dd HH:mm:ss"</property>
</component>
<!-- request parsers -->
<component name="multipartRequestParser" class="org.seasar.cubby.controller.impl.MultipartRequestParser" />
<component name="defaultRequestParser" class="org.seasar.cubby.controller.impl.DefaultRequestParser" />
<component name="requestParsers">
{ multipartRequestParser, defaultRequestParser }
</component>
<!-- file upload -->
<component class="org.apache.commons.fileupload.servlet.ServletFileUpload" instance="prototype">
<property name="fileItemFactory">
<component class="org.apache.commons.fileupload.disk.DiskFileItemFactory">
<property name="sizeThreshold">4096</property>
</component>
</property>
<property name="fileSizeMax">10000000</property>
</component>
<component class="org.apache.commons.fileupload.servlet.ServletRequestContext" instance="prototype"/>
<!-- messages behaviour -->
<component class="org.seasar.cubby.controller.impl.DefaultMessagesBehaviour">
<property name="baseName">"messages"</property>
</component>
</components>
メッセージリソース用のプロパティファイル。 メッセージリソースを参照してください。