Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

S2Daoのデータソース

S2の続きです。

Seasar入門 はじめてのDI&AOP

Seasar入門 はじめてのDI&AOP

とりあえずカスタムインターセプタまで行ったのでS2Daoにジャンプ。しばらくは順調だったけど、S2Daoを使ったDrinkサンプルのところで問題発生。。。動かない。。。実行すると、

org.seasar.framework.exception.OgnlRuntimeException: [ESSR0073]OGNLで例外が発生しました。理由はognl.OgnlException: Could not get static field class from class org.seasar.dao.impl.ClobTest [java.lang.ClassNotFoundException: org.seasar.dao.impl.ClobTest]

が発生。
んー。。。org.seasar.dao.impl.ClobTest何て作ってないし、S2DaoのプロジェクトをEclipseにインポートし、含まれているサンプルはちゃんと動作するし。。。
で、調べてみると、j2ee.diconにデータソース情報が書かれていることが判明。後で見たら、コネクションプーリングのところに書いてあった。。。orz
とりあえず、

  <component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
      "org.hsqldb.jdbcDriver"
    </property>
    <property name="URL">
      "jdbc:hsqldb:hsql://localhost:9001"
<!--
      "jdbc:hsqldb:file:"
        + @org.seasar.framework.util.ResourceUtil@getBuildDir(@org.seasar.dao.impl.ClobTest@class).getCanonicalPath() 
        + "/data/demo"
-->
    </property>
    <property name="user">"sa"</property>
    <property name="password">""</property>
  </component>

とすると動作しました。ホッ。。。ちなみに、j2ee.diconはS2Dao付属のものを使ってます。
ついでに、「実際的な例」も次のクライアントをでっち上げることで、動作を確認できました。

package test;

import java.util.List;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import dao.StudentDao;

public class S2DaoClient {
    private static final String PATH = "student.dao.dicon";
    public static void main(String[] args) {
        S2Container container = S2ContainerFactory.create(PATH);
        container.init();
        try {
            StudentDao dao = (StudentDao) container
                    .getComponent(StudentDao.class);
            List students = dao.findAllStudent();
            for (int i = 0; i < students.size(); ++i) {
                System.out.println(students.get(i));
            }
        } finally {
            container.destroy();
        }
    }
}

こうやって、はまらなくて良いところではまってるなぁ。。。