Java 如何将动态JNDI数据源与JPA一起使用?
我们有一个应用程序,它使用多个数据库存储不同国家的相同数据 例如,Java 如何将动态JNDI数据源与JPA一起使用?,java,hibernate,jpa,Java,Hibernate,Jpa,我们有一个应用程序,它使用多个数据库存储不同国家的相同数据 例如,订阅对象可能与德国或西班牙关联。如果是德语订阅,则需要将其存储在与西班牙语订阅不同的数据库中。这些数据库的结构相同,但内容不同 我们在jboss 5上运行,每个都有一个不同的datasource config(*ds.xml)文件,在启动时动态生成。它们存储在JNDI中,所以我们有数据源、数据源等 它应该是这样工作的:如果请求中说“FetchSubscription 17 for Germany”,那么我计算数据源应该是DataS
订阅
对象可能与德国或西班牙关联。如果是德语订阅,则需要将其存储在与西班牙语订阅不同的数据库中。这些数据库的结构相同,但内容不同
我们在jboss 5上运行,每个都有一个不同的datasource config(*ds.xml)文件,在启动时动态生成。它们存储在JNDI中,所以我们有数据源、数据源等
它应该是这样工作的:如果请求中说“FetchSubscription 17 for Germany”,那么我计算数据源应该是DataSourceDE,并使用JPA/hibernate从正确的数据库中获取该对象。西班牙语数据库中也将有一个订阅17,我不希望在本例中使用它
我可以自动生成persistence.xml来为数据源创建额外的持久性单元,但是Subscription
类使用以下注释:
@PersistenceContext(unitName="core")
这是行不通的-如何在java对象上动态设置持久性上下文?您可以在运行时更改EntityManager的持久性上下文,如下所示:
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(persistenceUnitName);
EntityManager em = emf.createEntityManager();
您试图实现的目标称为多租户。这里有一个非常适合你的问题的教程,可以让它发挥作用 其主要思想是使用一个无状态会话bean,它引用了两个持久性单元。根据必须执行的操作,这个bean进行查找以调用相应的
EntityManager
。此外,这里:
谢谢,这是一个很好的参考资料。希望我能够使它适应我的需要(我们没有使用EJB3)。