DomaでJNDI経由でDataSourceを取得する方法
先日の宿題。
DomaでJNDI経由でDataSourceを取得する方法。
サーブレットコンテナにTomcat、データベースはPostgreSQLを使いました。
取り急ぎ、以下のようなクラスを作ります。
public class JndiDaoConfig extends DomaAbstractConfig { protected static final DataSource data_source = createDataSource(); protected static final Dialect dialect = new PostgresDialect(); protected static DataSource createDataSource() { try { InitialContext context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/名前"); return ds; } catch (NamingException e) { throw new RuntimeException(e); } } @Override public DataSource getDataSource() { return data_source; } @Override public Dialect getDialect() { return dialect; } }
これで、TomcatのServer.xmlにJDBCの設定を記載すれば、取得できます。
もちろん、JNDIに登録していないと使用できないので、Eclipseから実行すると、DataSourceがnullになり正常に実行できません。
これでは、あんまり面白くないので、Eclipseで実行してもDataSourceを取得できるようにJNDIに登録してあげます。
僕の場合、JNDIUnitTestHelperというライブラリを使います。
これは、設定ファイルにデータベースとかの設定を記載しておくと、JNDIに登録してくれます。
JUnitのTestCaseを使う場合
public class BaseTestCase extends TestCase { protected void setUp() throws Exception { super.setUp(); if(JNDIUnitTestHelper.notInitialized()) JNDIUnitTestHelper.init("target/test-classes/jndi_unit_test_helper.properties"); } }
jndi_unit_test_helper.propertiesの記載方法は、Google先生がおしえてくれると思います。
あとは、BaseTestCaseのサブクラスでテストを記載すれば、DataSourceが取得されデータベース接続が可能となります。
取り急ぎ、動作は確認しましたが、まだ本格的に使えてはいないので、週末にでも個人的なサイトに組み込んでみようと思います。