2

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

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

EntityManagerFactory emf = this.getEntityManagerFactory();

// 肯定是用persistence.xml设置工厂的

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

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

问候,让

4

2 回答 2

0

我真的不明白该怎么办。对于初学者来说页面如此模糊。尽管如此,我还是单独创建了一个 SessionCustomizer 类。这是我的自定义()方法,使用 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>

我应该放什么,特别是对于“non-jta-data-source”标签?有没有办法将连接信息放入该 xml 而不是代码中?

帮助。

于 2010-04-14T10:32:53.297 回答
0

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

改编 Toplink Essentials 中的 Working with a non JTA DataSource 中的示例。

于 2010-04-13T22:06:57.597 回答