Создание параметризованного модуля сохраняемости + JTA DataSource во время выполнения (зависит от контекста)
Я пытаюсь написать EJB3-компонент без сохранения состояния, который получает параметр "customerCode" (строка). В зависимости от этого "customerCode" я хочу создать EntityManager (Persistence.createEntityManagerFactory...) с (динамически?) Созданным PersistenceUnit.
Я не могу определить PU в файле persistence.xml, потому что его имя (и базовый источник данных) должны быть в состоянии быть добавлены / удалены во время выполнения (например, развертывание нового источника данных / модуля персистентности, который принадлежит конкретному коду клиента).
Я мог бы определить PU в файле persistence.xml, потому что я заранее знаю все коды customerCodes, но если XML-файл источника данных отсутствует, я не могу правильно развернуть свой EAR, поскольку контейнер (JBOSS) ищет соответствующий источник данных.
Что я могу сделать? заранее спасибо!
1 ответ
Да, вы можете сделать это. Черновое сокращение ниже.
private static Map<String, EntityManagerFactory> emfMap
= new HashMap<String, EntityManagerFactory>();
private static List<String>customerCodes;
Вам необходимо заполнить этот список customerCodes перед вызовом populateEmfMap
public static void populateEmfMap()
{
for (String customerCode : customerCodes)
{
emfMap.put(customerCode,Persistence.createEntityManagerFactory(customerCode));
}
}
Вы можете просто получить его из Hasmap по ключу.