Doma JPetStoreは、SAStrutsとの連携方法を示すデモ用Webアプリケーションです。 他のプロジェクトの雛形として使用されることも想定しています。
このアプリケーションは、iBATISが提供する JPetStore 5.0 Example Application をベースに作成されています。
バージョン6以上のJDKをインストールします。 JREではなくJDKが必要であることに注意してください。 JDK 6 は以下のURLのサイトからダウンロードできます。
バージョン3.5以上のEclipseをインストールします。 Pluggable Annotation Processing API をサポートしていれば、Eclipse以外のIDEであってもかまいませんが、 このドキュメントではEclipseを使うことを前提に説明を進めます。 Eclipseは以下のURLのサイトからダウンロードできます。
http://www.eclipse.org/downloads/
Eclipseは、バージョン6以上のJDKに含まれるJREで起動されるようにしてください。 明示的にJREを指定するには、-vm オプションを使用します。
-vm %JAVA_HOME%\bin\javaw.exe
Tomcatのバージョン6.xをインストールします。 Tomcatは以下のURLのサイトからダウンロードできます。
アプリケーションをEclipseから動作させるには、EclipseプラグインのSysdeo/SQLI Tomcat Launcher をインストールsます。 Sysdeo/SQLI Tomcat Launcher は以下の更新サイトからインストールできます。
http://eclipse.seasar.org/updates/3.2/
Sysdeo/SQLI Tomcat Launcher をインストールしたら、メニューの「Window」 - 「Preference」 ー「Tomcat」 よりTomcatのバージョンとホームを指定してください。
Doma Toolsをインストールします。
Doma Toolsは、以下の更新サイトからインストールできます。
ダウンロードのページからdoma-jpetstore-x.x.x.zipをダウンロードし、 Eclipseへインポートしてください。インポートの具体的な手順は次のとおりです。2つの方法を説明します。
以上の手順を実行し終えるとビルドエラーは解消されます。
プロジェクトを右クリックし、コンテキストメニューから「Tomcatプロジェクト」 - 「コンテキスト定義を更新」 を実行します。 そして、メニューの「Tomcat」 - 「Tomcat起動」 を実行します。
Tomcatの起動が完了したことを確認し、http://localhost:8080/doma-jpetstore/ にアクセスしてください。
Internet Explorerで表示すると画面レイアウトが崩れます。 オリジナルのJPetStore 5.0 Example ApplicationのCSSがInternet Explorerに対応できていないようです。 Internet Explorerでもレイアウトが崩れないように直してくれる方がいたら歓迎いたします。
DomaとSeasar2を連携させるためのTipsを説明します。
設定クラスのgetDataSourceメソッドで、 S2Containerからデータソースを取り出し返します。 src/main/java/demo/config/AppConfig.javaを参照してください。
別の方法としては、設定クラスのコンポーネントをS2Containerで管理してデータソースをDIし、それから設定クラスのコンポーネントをDaoにDIするという戦略もあります。 こちら方法を使用したい場合は、DIコンテナを利用する場合の設定例を参照してください。
Seasar2で管理されたデータソースを利用していれば、ほとんど意識することなくSeasar2で管理されたトランザクションマネジャーと連携できます。 Doma JPetStoreアプリケーションでは、Actionがトランザクション境界になっているため、Action呼び出し以降であれば Daoで行われるデータアクセスはSeasar2で管理されたトランザクションマネジャーの配下で行われます。
通常、Domaがトランザクションマネジャーを意識する必要はないのですが、テーブルを使った採番で行ロックを極力短くするために局所的にトランザクションマネジャーと連携したいことがあります。
そのために用意されているのが、org.seasar.doma.jdbc.RequiresNewController
というインタフェースです。
Seasar2用の実装例としては、src/main/java/demo/config/S2RequiresNewController.javaを参照してください。
設定クラス(src/main/java/demo/config/AppConfig.java)のgetRequiresNewControllerメソッドでは、上記のS2RequiresNewControllerのインスタンスを返すようにします。
Seasar2では、ログ管理にCommons Loggingを使用しています。 DomaはデフォルトではJDKのLogging APIを使用していますが、Seasar2に合わせてCommons Loggingに出力したほうが管理しやすいでしょう。
Domaのログ出力の実装を切り替えるには、org.seasar.doma.jdbc.JdbcLogger
というインタフェースの実装を用意します。
実装例としては、src/main/java/demo/config/CommonsJdbcLogger.javaを参照してください。
設定クラス(src/main/java/demo/config/AppConfig.java)のgetJdbcLoggerメソッドでは、上記のCommonsJdbcLoggerのインスタンスを返すようにします。
Seasar2が提供するHotdeployUtilというユーティリティクラスを使用し、 HOT deployの場合にはSQLファイルをキャッシュしないようにします。 実装例としてはsrc/main/java/demo/config/SqlFileRepositoryProxy.javaを参照してください。
設定クラス(src/main/java/demo/config/AppConfig.java)のgetSqlFileRepositoryメソッドでは、上記のSqlFileRepositoryProxyのインスタンスを返すようにします。
Domaのaptが生成するクラスは、デフォルトでは、Seasar2のSMART deployの命名規約に即していません。 SMART deployに対応させるには、aptで生成されるDao実装クラスの名前を調整する必要があります。
たとえば、Daoインタフェースがdemo.smart.dao.ProductDao
という名前の場合、
生成されるDao実装クラスがdemo.smart.dao.impl.ProductDaoImpl
となるようにします(前提としてdemo.smartがルートパッケージでなければいけません)。
このような名前の調整は注釈処理のオプション指定で行います。 具体的には、「dao.subpackage」には「impl」を、「dao.suffix」には「Impl」を指定します。 Eclipseの場合、プロジェクトのプロパティの「Annotation Processing」の項目で次のように指定します。
JPetStoreを他プロジェクトの雛形として使用する際の注意点を述べます。
src/main/resources/convention.diconには、ルートパッケージを指定します。 JPetStoreでは、「demo.smart」と「demo」の2つを指定していますが、このパッケージ名を新しいプロジェクトのパッケージ構成に合わせて変更してください。
src/main/resources/jdbc.diconには、JDBCの接続情報を記述します。 JPetStoreでは、H2 Database Engineを使用していますが、新しいプロジェクトで使用するデータベースに合わせて変更してください。
JPetStoreでは、独自のRequestProcessorを使用しています。
SAStrutsのRequestProcessorを使用するには、
src/main/webapp/WEB-INF/struts-config.xml内のcontroller要素のprocessorClass属性でdemo.action.JPetStoreRequestProcessor
のかわりにorg.seasar.struts.action.S2RequestProcessor
を指定してください。