Session に JDBC 接続を提供するには、 ConnectionProviderの実装が必要です。
デフォルトでは、Hibernate はこれを使用してJNDI からインスタンスDatasourceConnectionProvider
を取得します。DataSource
カスタムDataSource
インスタンスを使用するには、インスタンスを使用InjectedDataSourceConnectionProvider
して挿入しDataSource
ます。
InjectedDataSourceConnectionProviderに TODO ノートがあります
注 : setDataSource(javax.sql.DataSource) は、configure(java.util.Properties) の前に呼び出す必要があります。
TODO : setDataSource が実際に呼び出されている場所が見つかりませんでした。これを configure に渡すことはできませんか???
注記に従って、setDataSource()
メソッドからconfigure()
メソッドを呼び出します。
public class CustomConnectionProvider extends InjectedDataSourceConnectionProvider {
@Override
public void configure(Properties props) throws HibernateException {
org.apache.commons.dbcp.BasicDataSource dataSource = new BasicDataSource();
org.apache.commons.beanutils.BeanUtils.populate( dataSource, props );
setDataSource(dataSource);
super.configure(props);
}
}
UserSuppliedConnectionProviderを拡張することもできます。
ConnectionProviderの契約による
実装者は、パブリックの既定のコンストラクターを提供する必要があります。
カスタム ConnectionProvider が Configuration インスタンスを介して設定されている場合、Hibernate はこのコンストラクターを呼び出します。
Configuration cfg = new Configuration();
Properties props = new Properties();
props.put( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
cfg.addProperties(props);