2

是否可以在运行时动态创建一个 jpa 持久性单元,而无需在persistance.xml 中定义它?

我有一个用例,我为不同的客户使用应用程序的一个实例,为每个客户设置一个新数据库,我需要设置一个新客户而不需要重新部署应用程序,这就是为什么我需要设置一个运行时而不是persistence.xml中的持久性单元

我使用 seam2、jsf1.2、hibernate3

对此有任何提示吗?

4

2 回答 2

1

不是 JPA 规范的一部分。一些 JPA 实现允许一种方式,例如我们在 DataNucleus JPA 中允许的方式,请参阅本文档的结尾http://www.datanucleus.org/products/accessplatform_3_0/jpa/persistence_unit.html 咨询您的 JPA 提供商的文档以查看是否它确实

于 2012-02-21T10:30:03.980 回答
1

似乎您persistence unit在部署之前就知道要使用哪个。如果是这种情况,那么您并不是真的在运行时创建了 PU 之后。我认为您有两个选择。

  1. 您可以使用占位符${PUNAME},然后在属性文件中根据您的客户进行设置。如果您使用的是 maven,您可以使用 maven 配置文件在开发和打包期间填充这些属性。
  2. 使用某种基于区域设置的系统persistence unit对每个客户都有不同的要求,例如persistenceunit_cient1.xmlpersistenceunit_cient2.xml让系统根据 Client Locale 选择一个。是的,您将不得不调整区域设置。

好的..只是澄清我所理解的。您有一个正在运行的应用程序,一些客户可以来注册,一旦注册,他们将拥有自己的数据库。我在这里让我的想象力有点疯狂:)但似乎是这样。您可以做的是使用连接 url、密码等和重新加载会话工厂等内容更改\更新属性文件。

这个问题可以帮助您在运行时更新属性文件 java update properties file run time

这个问题herehere提供了如何在运行时重新加载会话工厂的信息。

于 2012-02-21T22:54:30.233 回答