##### Cubby 2.0

- ホーム

##### スタートアップガイド

- 2分間チュートリアル
- 5分間チュートリアル

##### リファレンス

- セットアップ
  - 前提
  - プロジェクトの作成
  - S2Container 統合
    - 前提
    - プロジェクトの作成
    - 各種ファイル
  - Spring Framework 統合
  - Google Guice 統合
- アクション
- バリデーション
- メッセージリソース
- JSP
- Mayaa
- カスタマイズ
- JavaDoc
- TLDDoc
- Tips集
- 移行ガイド

##### プロジェクト文書

- プロジェクト情報
- プロジェクトレポート

##### モジュール

- Cubby
- Cubby Unit
- Cubby S2Container Plugin
- Cubby Guice Plugin
- Cubby Spring Plugin
- Cubby Gson Plugin
- Cubby OVal Plugin
- Cubby S2Container Integration Archetype
- Cubby Guice Integration Archetype
- Cubby Spring Integration Archetype
- Cubby Admin
- Cubby Distribution

## 目次

- 前提
- プロジェクトの作成
  - Maven2 によるプロジェクトの雛形作成
- 各種ファイル
  - 必要なライブラリ (WEB-INF/lib)
  - デプロイメント記述子 (WEB-INF/web.xml)
  - diconファイル (WEB-INF/classes)
  - プロパティファイル (WEB-INF/classes)

## 前提

S2Container に統合する場合は S2Container2.4 の SMART Deploy 環境下で動作させることを前提としています。 ソースコードのパッケージ構成は SMART Deploy 推奨のパッケージ構成 に従ってください。\

## プロジェクトの作成

- Maven2 によるプロジェクトの雛形作成

  まずは以下のコマンドを入力してください。
  もし「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)

依存関係を参照してください。 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 と S2Container のバージョンの推奨の組み合わせ

### デプロイメント記述子 (WEB-INF/web.xml)

Cubby はサーブレットフィルタとして動作します。 web.xml にサーブレットフィルタとフィルタマッピングを追加します。 登録する際は以下の順序で登録してください。

1. SendErrorFilter (任意)

   *.jsp ファイルなど、直接アクセスされたくないファイルへのアクセスを制御するフィルターです。
   この例ではブラウザ等から *.jsp へアクセスがあった場合に NotFound (404) を返します。

           <filter>
               <filter-name>sendErrorFilter</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>sendErrorFilter</filter-name>
               <url-pattern>*.jsp</url-pattern>
               <dispatcher>REQUEST</dispatcher>
           </filter-mapping>

2. EncodingFilter (任意)

   リクエストのエンコーディングを設定するためのフィルタです。

               <filter>
                       <filter-name>encodingFilter</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>encodingFilter</filter-name>
                       <url-pattern>/*</url-pattern>
               </filter-mapping>

3. S2ContainerFilter (必須)

   Cubby 内部ではリクエストの自動バインディングを使用するので、S2ContainerFilter を定義します。

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

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

4. HotdeployFilter

   Hot deploy を使用する場合は HotdeployFilter を定義します。

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

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

5. CubbyFilter (必須)

   Cubby の主な処理を行うフィルタです。 リクエストの情報からアクションメソッドを起動します。 対象のアクションが見つからない場合は FilterChain で後続のフィルタに処理を移譲します。

   また、処理の対象外とする URL を ignorePathPattern で指定できます。 Hot deploy の場合はすべてのパスを対象としてしまうとクラスパスを走査する回数が増えるので、イメージのフォルダなどはここで指定して処理対象外とすることでパフォーマンスの低下を防ぐことができます。 対象外にするパスを正規表現のカンマ区切りで指定してください。

           <filter>
               <filter-name>cubbyFilter</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>cubbyFilter</filter-name>
               <url-pattern>/*</url-pattern>
               <dispatcher>REQUEST</dispatcher>
               <dispatcher>FORWARD</dispatcher>
           </filter-mapping>

### diconファイル (WEB-INF/classes)

1. app.dicon

   以下の dicon ファイルをインクルードしてください。

   - cubby.dicon (Cubby の jar ファイルに含まれます)
   - app-cubby.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>

2. convention.dicon

   dicon ファイルの設定例を参考に、ルートパッケージを設定してください。

3. creator.dicon

   dicon ファイルの設定例を参考に、ActionCreator を設定してください。

4. customizer.dicon

   アクションメソッドでトランザクションの制御が必要な場合もここで定義してください。 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>

5. app-cubby.dicon

   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-handlers.dicon"/>
               <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 class="org.seasar.cubby.controller.impl.DefaultRequestParser" />
               <component class="org.seasar.cubby.controller.impl.MultipartRequestParser" />

               <!-- 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>

### プロパティファイル (WEB-INF/classes)

1. messages_ja.properties (messages_en.properties)

   メッセージリソース用のプロパティファイル。 メッセージリソースを参照してください。