Как добавить пул соединений c3p0 или DBCP?

Не могли бы вы объяснить мне, как добавить автономный пул соединений c3pO или DBCP в мой проект JPA на основе верхней ссылки?

У меня есть файл persistence.xml, и каждый раз, когда я хочу запросить базу данных, я делаю это:

EntityManagerFactory emf = this.getEntityManagerFactory();

// Обязательно используем файл persistence.xml для настройки фабрики

EntityManager em = emf.createEntityManager(); ...

Где мне построить мост между моим внешним менеджером пула соединений и Toplink? Любые идеи или ссылки приветствуются.

С уважением, Жан


person Jean N.T.    schedule 13.04.2010    source источник


Ответы (2)


Я не использую Toplink, поэтому я не проверял это, но мое понимание различных ресурсов, найденных в сети, заключается в том, что вам нужно будет предоставить реализацию SessionCustomizer. В этой реализации используйте JNDIConnector для предоставления объекта DataSource (c3p0 реализует DataSource API) с использованием setDataSource(javax.sql.DataSource).

Адаптируйте пример из Работа с источником данных, отличным от JTA. в Основах Toplink.

person Pascal Thivent    schedule 13.04.2010
comment
Я действительно не понимаю, что делать. Такая размытая страница для новичка. Тем не менее, я создал класс SessionCustomizer отдельно. Вот мой метод custom(): public void customise(сеанс сеанса) выдает Exception{DataSource ds = DataSources.unpooledDataSource(myServerURL, login, pwd); Объединенный источник данных = DataSources.pooledDataSource (ds); JNDIConnector conn = (JNDIConnector)session.getLogin().getConnector(); conn.setDataSource (объединенный); conn.setLookupType(JNDIConnector.STRING_LOOKUP); } - person Jean N.T.; 14.04.2010
comment
@Jean Ну, проблема в том, что я не использую Toplink, что невероятно сложно найти ресурсы или даже указатель на документацию и, что наиболее важно, я даже не уверен, что именно вы используете ( это Toplink Essentials?). Можете ли вы сначала подтвердить это? - person Pascal Thivent; 15.04.2010

Я действительно не понимаю, что делать. Такая размытая страница для новичка. Тем не менее, я создал класс SessionCustomizer отдельно. Вот мой метод custom(), использующий c3p0:

public void customize(Session session) throws Exception{ 
DataSource ds = DataSources.unpooledDataSource("myServerURL", "login", "pwd"); 
DataSource pooled = DataSources.pooledDataSource(ds); 
JNDIConnector conn = (JNDIConnector)session.getLogin().getConnector(); 
conn.setDataSource(pooled); 
conn.setLookupType(JNDIConnector.STRING_LOOKUP); 
}

Я даже не думаю, что это правильно. Я помещаю информацию о своем подключении в код, действительно странно.

Во-вторых, в примере persistence.xml по ссылке они поставили:

<non-jta-data-source>java:comp/env/jdbc/DefaultDS</non-jta-data-source>
   <class>sample.MyEntity</class>
   <properties>
     <property name="toplink.session.customizer" value="es.claro.commons.ds.DataSourceSessionCustomizer"/>
   </properties>

Что я должен указать в своем, особенно для тега «не-jta-data-source»? Есть ли способ поместить информацию о соединении в этот xml, а не в код?

Помощь.

person Jean N.T.    schedule 14.04.2010