Создание параметризованного модуля сохраняемости + JTA DataSource во время выполнения (зависит от контекста) - PullRequest
0 голосов
/ 22 сентября 2011

Я пытаюсь написать EJB3 Session Bean, который получает параметр customerCode (String). В зависимости от этого "customerCode" я хочу создать EntityManager (Persistence.createEntityManagerFactory ...) с (динамически?) Созданным PersistenceUnit.

Я не могу определить PU в файле persistence.xml, потому что его имя (и базовый источник данных) должны быть в состоянии быть добавлены / удалены во время выполнения (например, развертывание нового источника данных / модуля персистентности, который принадлежит конкретному коду клиента) .

Я мог бы определить PU в файле persistence.xml, потому что я заранее знаю все коды customerCodes, но если XML-файл источника данных отсутствует, я не могу правильно развернуть EAR, поскольку контейнер (JBOSS) ищет соответствующий DataSource.

что я могу сделать? заранее спасибо!

1 Ответ

2 голосов
/ 23 сентября 2011

Да, вы можете сделать это. Черновая обработка ниже.

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 по ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...