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.xmlJDBCの設定を記載すれば、取得できます。
もちろん、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が取得されデータベース接続が可能となります。

取り急ぎ、動作は確認しましたが、まだ本格的に使えてはいないので、週末にでも個人的なサイトに組み込んでみようと思います。