S2Dao 初期設定
スポンサード リンク1.初期設定
s2Daoのセットアップにて構成した各ファイルの中身をみていきたいと思います。
サンプルでは、簡単なselect文を作成するための構成となっています。
パッケージ名 | クラス名 | 説明 |
---|---|---|
snowhiro | S2Dao_sample10.java | サンプルのメインクラス |
snowhiro | ProjectDao.java | サンプルのS2Dao用のインターフェース |
snowhiro | Project.java | サンプルのS2Sao用のjavaBean(テーブルとの関連付け) |
snowhiro | s2Dao.dicon | 設定ファイル(コンポーネントの登録等) |
デフォルトパッケージ | j2ee.dicon | 設定ファイル(S2Dao用) |
デフォルトパッケージ | jdbc.dicon | 設定ファイル(DBの接続先等) |
デフォルトパッケージ | jta.dicon | 設定ファイル(トランザクション用) |
では個別のクラスおよび設定ファイルの内容を見てみます。
S2Dao_sample10.java
package snowhiro; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; /** * S2Daoのサンプルメインクラス */ public class S2Dao_sample10 { // 設定ファイルのPath private static final String PATH = "snowhiro/s2Dao.dicon"; /** * メインクラス * @param args 引数 */ public static void main(String[] args) { System.out.println("S2Dao_sample10 開始"); // 設定ファイルを読み込む. SingletonS2ContainerFactory.setConfigPath(PATH); // 初期化する. SingletonS2ContainerFactory.init(); // コンテナを取得する. S2Container container = SingletonS2ContainerFactory.getContainer(); ProjectDao pjDao = (ProjectDao) container.getComponent(ProjectDao.class); pjDao.selectProject(); } }
mainクラスでは、S2Dao用のコンテナを取得し実行しています。
Project.java
package snowhiro; import org.seasar.dao.annotation.tiger.Bean; @Bean(table="PROJECT") public class Project { public Integer id; public String pjName; }
Project.javaでは、対象のテーブルとのマッピングを記載しています。
@Bean(table="PROJECT")
の部分で対象のテーブルと対応しているということを記載しています。
また各インスタンス変数は、DBの各カラムをS2の機能であるpublic フィールドを用いて記載しています。
ProjectDao.java
package snowhiro; import org.seasar.dao.annotation.tiger.S2Dao; @S2Dao(bean = Project.class) public interface ProjectDao { public Project selectProject(); }
ProjectDao.javaでは、Data Access Object用のインターフェースです。
@S2Dao(bean = Project.class)の部分では、JavaBeansとの関連付けの定数宣言を行っています。
selectProject();はselect文を発行するためのメソッドとなります。
s2Dao.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="dao.dicon"/> <include path="j2ee.dicon"/> <!-- ログ出力用のコンポーネント --> <component name="traceInterceptor" class="org.seasar.framework.aop.interceptors.TraceInterceptor"/> <!-- コンポーネントの自動登録--> <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> <property name="autoNaming"> <component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/> </property> <initMethod name="addClassPattern"> <arg>"snowhiro"</arg> <arg>".*Dao"</arg> </initMethod> </component> <!-- アスペクトの自動登録 --> <component class="org.seasar.framework.container.autoregister.AspectAutoRegister"> <property name="interceptor">j2ee.requiredTx</property> <initMethod name="addClassPattern"> <arg>"snowhiro"</arg> <arg>".*Dao"</arg> </initMethod> </component> <component class="org.seasar.framework.container.autoregister.AspectAutoRegister"> <property name="interceptor">dao.interceptor</property> <initMethod name="addClassPattern"> <arg>"snowhiro"</arg> <arg>".*Dao"</arg> </initMethod> </component> </components>
s2Dao.diconでは、S2で管理するコンポーネントの自動登録およびアスペクトを記載しています。
s2Dao.diconの名前は何でもかまいません。
サンプルメインクラスの
private static final String PATH = "snowhiro/s2Dao.dicon";
にて対象のdiconファイルを呼び出しています。
また、S2Dao用のアスペクトとしてdao.interceptorを、
トランザクション用のアスペクトとして後述するj2ee.diconのrequiredTxを記載しています。
他のアスペクトと同様に、自動登録が可能です。
j2ee.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components namespace="j2ee"> <include path="jta.dicon"/> <include path="jdbc.dicon"/> <component name="requiredTx" class="org.seasar.extension.tx.RequiredInterceptor"/> <component name="requiresNewTx" class="org.seasar.extension.tx.RequiresNewInterceptor"/> <component name="mandatoryTx" class="org.seasar.extension.tx.MandatoryInterceptor"/> <component name="notSupportedTx" class="org.seasar.extension.tx.NotSupportedInterceptor"/> <component name="neverTx" class="org.seasar.extension.tx.NeverInterceptor"/> </components>
j2ee.diconでは、トランザクション関係の設定を記載しています。
このファイルはトランザクション関係の記載をしており、今回のサンプルでは特にいじっていません。
S2Dao.diconのDaoインターフェイスにrequiredTxを記載しています。
jdbc.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components namespace="jdbc"> <include path="jta.dicon"/> <!-- 全DBMS対応のページング処理用設定 --> <component name="resultSetFactory" class="org.seasar.dao.pager.PagerResultSetFactoryWrapper"> <arg> <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/> </arg> <property name="useScrollCursor">true</property> </component> <component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory"> <arg> <component class="org.seasar.dao.pager.PagerStatementFactory"/> </arg> <property name="fetchSize">100</property> <!-- <property name="maxRows">100</property> --> </component> <!-- for Oracle --> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "oracle.jdbc.driver.OracleDriver" </property> <property name="URL"> "jdbc:oracle:thin:@localhost:1521:XE" </property> <property name="user">"user_name"</property> <property name="password">"pass_word"</property> <initMethod name="addProperty"> <arg>"includeSynonyms"</arg> <arg>"true"</arg> </initMethod> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <property name="timeout">600</property> <property name="maxPoolSize">10</property> <!-- JTAトランザクションが開始されていない場合にコネクションを 取得できないようにするには次のプロパティをfalseにしてください.--> <property name="allowLocalTx">true</property> <destroyMethod name="close"/> </component> <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"/> </components>
jdbc.diconではDBの接続先等の設定を記載します。 URLと、user名、パスワードを記載しています。
jta.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="jta"> <description> Seasar2 が提供する JTA 実装 (S2JTA) を使用するための設定ファイルです. この設定ファイルでは,以下の全てのトランザクション属性がサポートされます. ・REQUIRED ・MANDATORY ・NEVER ・REQUIRES_NEW ・NOT_SUPPORTED </description> <component name="UserTransaction" class="org.seasar.extension.jta.UserTransactionImpl"/> <component name="TransactionManager" class="org.seasar.extension.jta.TransactionManagerImpl"/> <!-- TransactionManager を利用する TransactionSynchronizationRegistry --> <component name="TransactionSynchronizationRegistry" class="org.seasar.extension.jta.TransactionSynchronizationRegistryImpl"/> <!-- JTA の TransactionManager を利用する TransactionManagerAdapter --> <component class="org.seasar.extension.tx.adapter.JTATransactionManagerAdapter"/> </components>
Seasar2 が提供する JTA 実装 (S2JTA) を使用するための設定ファイルです. このファイルは特に設定ファイルをいじる必要はありません。
では早速サンプルのメインクラスを実行してみたいと思います。
S2Dao_sample10 開始 DEBUG S2Containerを作成します。path=snowhiro/s2Dao.dicon DEBUG S2Containerを作成します。path=dao.dicon DEBUG S2Containerを作成します。path=j2ee.dicon DEBUG S2Containerを作成します。path=jta.dicon DEBUG S2Containerを作成しました。path=jta.dicon DEBUG S2Containerを作成します。path=jdbc.dicon DEBUG S2Containerを作成しました。path=jdbc.dicon DEBUG S2Containerを作成しました。path=j2ee.dicon DEBUG S2Containerを作成しました。path=dao.dicon DEBUG S2Containerを作成しました。path=snowhiro/s2Dao.dicon INFO Running on [ENV]product, [DEPLOY MODE]Normal Mode DEBUG トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG 物理的なコネクションを取得しました DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG SELECT PROJECT.id, PROJECT.pjname FROM PROJECT DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=] DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1215123725920/0, BranchId=]
ログの中に
DEBUG SELECT PROJECT.id, PROJECT.pjname FROM PROJECT
とあり、SQLが実行されているのがわかります。
以上で初期設定は完了です。
Seasar2 Topに戻る