在J2SE环境中的Hibernate JPA中使用OracleDataSource

| 是否可以将Hibernate / JPA配置为在独立环境中使用OracleDataSource?更具体地说,我想通过persistence.xml文件配置oracle隐式连接缓存。这可能吗? 提前致谢 布赖恩     
已邀请:
我最近在使用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\");
不仅如此,您还可以在persistence.xml文件中使用此URL来配置JPA连接的源,或者在创建它时提供给EntityManagerFactory的属性中。
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(\"javax.persistence.provider\", \"org.hibernate.ejb.HibernatePersistence\");
properties.put(\"javax.persistence.jdbc.url\", \"jdbc:apache:commons:dbcp:myPool\");
this.entityManagerFactory = Persistence.createEntityManagerFactory(\"myUnit\", properties);
this.entityManager = this.entityManagerFactory.createEntityManager();
现在,使用此JDBC URL,您可以访问池中的连接,也可以通过它访问原始数据源。     

要回复问题请先登录注册