2011-04-14 6 views
3

スタンドアロン環境でOracleDataSourceを使用するようにHibernate/JPAを構成できますか?具体的には、persistence.xmlファイルを使用してoracle暗黙的接続キャッシュを構成します。これは可能ですか?事前 ブライアンJ2SE環境でHibernate JPAでOracleDataSourceを使用する

答えて

1

おかげで私は最近、MySQLを使用して、JSEアプリケーションで同様の問題を解決しました。あなたのケースでは、既存の接続プロバイダを使用する必要がありました。

私の場合、Apache Commons DBCPを使用しました。この接続プーリング・フレームワークを使用すると、データ・ソースを介して接続プールを作成し、persistence.xmlファイルのJPA構成で使用できる偽のドライバ名でプールを登録できます。

これが私のやり方です。まず、元のデータソースに基づいて接続プールを登録し、このプールに偽のドライバを登録しました。

private ObjectPool getNewConnectionPool(DataSource mySqlDataSource) { 
    try { 
     GenericObjectPool pool = new GenericObjectPool(null, 10); 
     pool.setTestOnBorrow(true); 
     ConnectionFactory factory = new DataSourceConnectionFactory(mySqlDataSource); 
     PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(factory, pool, null, "SELECT 1 FROM DUAL", false, true); 
     Class.forName("org.apache.commons.dbcp.PoolingDriver"); 
     PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:"); 
     driver.registerPool("myPool", pool); 
     return poolableConnectionFactory.getPool(); 
    } catch (Exception e) { 
     throw new RuntimeException("Unable to initialize connetion pooling", e); 
    } 
} 

次に、元のデータソースを使用する代わりに、ここからプールされたデータソースを引き続き使用します。

DataSource dataSource = new PoolingDataSource(getNewConnectionPool(mySqlDataSource)); 

この時点までに、接続を取得できる元の機能データソースがあります。このプールに登録されている偽のドライバを介して接続を取得することもできます。これらは、元のデータソースから取得したものでもあります。

Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:myPool"); 

だけでなく、そのため、あなたはJPAのためか、あなたはそれを作成するとき、あなたのEntityManagerFactoryに提供するプロパティであなたの接続のソースを設定するには、あなたのpersistence.xmlファイルでこのURLを使用することができます。

このJDBC URLを使用すると、プール内の接続にアクセスして、元のデータソースにアクセスできるようになります。

関連する問題