如何添加c3p0或DBCP连接池?

时间:2010-04-13 15:22:51

标签: jpa toplink-essentials apache-commons-dbcp c3p0

您能否向我解释如何在我的基于toplink的JPA项目中添加独立的c3pO或DBCP连接池?

我有一个persistence.xml文件,每次我想查询数据库时,我都是这样做的:

EntityManagerFactory emf = this.getEntityManagerFactory();

//当然使用persistence.xml来设置工厂

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

我在哪里建立外部连接池管理器和Toplink之间的桥梁?欢迎任何想法或链接。

此致 让

2 个答案:

答案 0 :(得分:0)

我没有使用Toplink所以我没有对此进行测试,但是我对通过网络找到的各种资源的理解是,您需要提供SessionCustomizer的实现。在此实现中,使用JNDIConnector类使用c3p0方法提供 DataSource对象(setDataSource(javax.sql.DataSource)实现DataSource API)。

调整Working with a non JTA DataSource in Toplink Essentials的样本。

答案 1 :(得分:0)

我真的不明白该怎么做。这是一个初学者的模糊页面。不过,我已经创建了一个SessionCustomizer类。这是我的customize()方法,使用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而不是代码中放置连接信息?

帮助。