分类: Java
2008-12-22 14:44:31
にて構成した各ファイルの中身をみていきたいと思います。
サンプルでは、簡単な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"?>
"">
<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.requiredTxproperty>
<initMethod name="addClassPattern">
<arg>"snowhiro"arg>
<arg>".*Dao"arg>
initMethod>
component>
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">dao.interceptorproperty>
<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"?>
"">
<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を記載しています。
j2ee.dicon
xml version="1.0" encoding="UTF-8"?>
"">
<components namespace="jdbc">
<include path="jta.dicon"/>
<component
name="resultSetFactory"
class="org.seasar.dao.pager.PagerResultSetFactoryWrapper">
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
arg>
<property name="useScrollCursor">trueproperty>
component>
<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<component class="org.seasar.dao.pager.PagerStatementFactory"/>
arg>
<property name="fetchSize">100property>
component>
<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">600property>
<property name="maxPoolSize">10property>
<property name="allowLocalTx">trueproperty>
<destroyMethod name="close"/>
component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
components>
j2ee.diconではDBの接続先等の設定を記載します。 URLと、user名、パスワードを記載しています。
jta.dicon
xml version="1.0" encoding="UTF-8"?>
"">
<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"/>
<component name="TransactionSynchronizationRegistry"
class="org.seasar.extension.jta.TransactionSynchronizationRegistryImpl"/>
<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が実行されているのがわかります。
以上で初期設定は完了です。