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

Posted

技术标签:

【中文标题】在没有容器的情况下将数据源设置为 JPA【英文标题】:Set datasource to JPA without a container 【发布时间】:2013-12-27 21:25:11 【问题描述】:

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

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

包装了原始数据源(在我的例子中是 apache derby 的)ClientDataSource

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

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

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

(以编程方式?)

谢谢。

【问题讨论】:

【参考方案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 提供者找到更通用的方法

【讨论】:

【参考方案2】:

如果您想通过程序设置数据源而不使用容器或JNDI查找,那么您可以使用包含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");

【讨论】:

我知道该怎么做谢谢......问题是我如何将此数据源附加到完成 jndi 查找的持久性上下文。

以上是关于在没有容器的情况下将数据源设置为 JPA的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?

有没有办法在不构建的情况下将 docker-compose 容器无缝传输到另一台主机? [复制]

在没有任何聚合函数的情况下将列数据转换为行

如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar

如何在没有动画的情况下将 UISearchController 设置为活动?

在没有 noexec 选项的情况下将卷挂载到 docker 容器中