在运行时创建参数化的持久化单元+ JTA数据源(依赖于上下文)



我试图写一个EJB3无状态会话Bean,它获得参数"customerCode"(字符串)。依赖于这个"customerCode",我想创建一个EntityManager (Persistence.createEntityManagerFactory…)与(动态?)创建的PersistenceUnit。

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

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

我能做什么?提前感谢!

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

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

最新更新