创建参数化持久性单元 +运行时的 JTA 数据源(上下文相关)

发布于 2024-12-05 15:40:57 字数 395 浏览 0 评论 0原文

我正在尝试编写一个 EJB3 无状态会话 Bean,它获取参数“customerCode”(字符串)。 根据这个“customerCode”,我想用(动态?)创建的 PersistenceUnit 创建一个 EntityManager (Persistence.createEntityManagerFactory...)。

我无法在 persistence.xml 中定义 PU,因为它的名称(和底层数据源)必须能够在运行时添加/删除(例如,部署属于特定客户代码的新数据源/持久性单元)。

我可以在 persistence.xml 中定义 PU,因为我提前知道所有 customerCode,但是如果数据源 XML 文件丢失,我就无法正确部署 EAR,因为容器 (JBOSS) 会查找匹配的数据源。

我能做些什么? 提前致谢!

i'm trying to write an EJB3 Stateless Session Bean which gets the parameter "customerCode" (String).
Dependent on this "customerCode" i want to create an EntityManager (Persistence.createEntityManagerFactory...) with a (dynamically?) created PersistenceUnit.

I can not define the PU in the persistence.xml, because it's name (and underlying datasource) must be able to be added/removed at runtime (e.g. deploying a new datasource/persistence unit that belongs to a specific customer code).

I could define the PUs in the persistence.xml, because i know all the customerCodes in advance, but if the datasource XML file is missing, i can not deploy my EAR correctly, because the container (JBOSS) looks for a matching datasource.

what can i do?
thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半边脸i 2024-12-12 15:40:57

是的,你可以做到这一点。下面是粗剪。

private static Map<String, EntityManagerFactory> emfMap 
                     = new HashMap<String, EntityManagerFactory>();
private static List<String>customerCodes;

显然,在调用 populateEmfMap 之前,您需要填充这个 customerCodes 列表。

public static void populateEmfMap()
     {
       for (String customerCode : customerCodes)
       {
          emfMap.put(customerCode,Persistence.createEntityManagerFactory(customerCode));
       }

    }

您可以通过键从 Hasmap 获取它。

Yes you can do this.A rough cut is below.

private static Map<String, EntityManagerFactory> emfMap 
                     = new HashMap<String, EntityManagerFactory>();
private static List<String>customerCodes;

You need to populate this list of customerCodes obviously before calling populateEmfMap

public static void populateEmfMap()
     {
       for (String customerCode : customerCodes)
       {
          emfMap.put(customerCode,Persistence.createEntityManagerFactory(customerCode));
       }

    }

You can just get it from the Hasmap by key.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文