Использование OracleDataSource в JPA Hibernate в среде J2SE - PullRequest
3 голосов
/ 14 апреля 2011

Можно ли настроить Hibernate / JPA на использование OracleDataSource в автономной среде?Более конкретно, я хочу настроить кеш неявных соединений оракула через файл persistence.xml.Возможно ли это?

Заранее спасибо Брайан

1 Ответ

1 голос
/ 08 июня 2011

Недавно я решил похожую проблему в приложении JSE, использующем MySQL.Как и в вашем случае, мне нужно было использовать существующего поставщика соединений.

В моем случае я использовал Apache Commons DBCP .Эта структура пула соединений позволяет мне создавать пул соединений через источник данных, а затем регистрировать пул под поддельным именем драйвера, которое вы можете использовать в конфигурации JPA в файле persistence.xml.

Вот как я могусделал это.Сначала я зарегистрировал пул соединений на основе исходного источника данных, а также зарегистрировал поддельный драйвер для этого заданного пула.

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");

Но не только для этого вы можете использовать этот URL в своем файле persistence.xmlфайл для настройки источника ваших соединений для 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();

Используя этот URL JDBC, вы теперь можете иметь доступ к соединениям в пуле ичерез него к исходному источнику данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...