在运行时创建参数化持久性单元+ JTA数据源(取决于上下文)

时间:2011-09-22 09:16:23

标签: persistence ejb-3.0 datasource persistence-unit

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

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

我可以在persistence.xml中定义PU,因为我事先知道所有的customerCodes,但是如果缺少数据源XML文件,我就无法正确部署我的EAR,因为容器(JBOSS)寻找匹配数据源。

我该怎么办? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

是的,你可以这样做。下面是粗剪。

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中获取它。