在没有容器的情况下将数据源设置为JPA

时间:2013-12-27 21:25:11

标签: java eclipselink jndi jpa-2.1

我想用一段时间测试我的实体一个特殊的数据源

https://code.google.com/p/datasource-proxy/

包装原始数据源(在我的情况下是apache derby的)ClientDataSource

那么如何在没有容器的情况下将数据源注入我的JPA ......?

我尝试使用simple-jndi但不起作用。 (不是使用JPA2的eclipse链接实现)

在配置持久性单元时,有没有办法绕过数据源的JNDI?

(以编程方式?)

感谢。

2 个答案:

答案 0 :(得分:1)

我找到了EclipseLink JPA实现的方法

import org.eclipse.persistence.config.PersistenceUnitProperties;
//define your datasource before proxyDS - not shown here
//then add this property to entity manager factory prop map

emfProps.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, proxyDS);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompanyPU", emfProps);
EntityManager em = emf.createEntityManager();

我仍然希望为任何JPA提供程序找到更通用的方法

答案 1 :(得分:0)

如果要在不使用容器或JNDI查找的情况下按程序设置dataSource,则可以使用以下包含Apache Derby ClientDataSource的方法:

public DataSource createDataSource() {
   ClientDataSource dataSource = new ClientDataSource();
   dataSource.setServerName("localhost");
   dataSource.setPortNumber(1527);
   dataSource.setDatabaseName("mytestdb");
   dataSource.setUser("myusername");
   dataSource.setPassword("mypasswd");
   return dataSource;
}

然后,您可以将此代码放在应用程序中以获取JDBC连接:

Connection connection = dataSource.getConnection("myusername", "mypasswd");