Динамическая динамическая динамика - JPA

Единицы сохранения в persistence.xml создаются при создании приложения. Как я хочу изменить URL-адрес базы данных во время выполнения, есть ли способ изменить блок персистентности во время выполнения? Я должен использовать другую базу данных, кроме предварительно привязанной после раздачи.

Я использую EclipseLink (JPA 2.1)

Ответ 1

Сохраняйте файл единицы сохранения (Persistence.xml) как есть. Вы можете переопределить свойства в нем следующим образом.

EntityManagerFactory managerFactory = null;
Map<String, String> persistenceMap = new HashMap<String, String>();

persistenceMap.put("javax.persistence.jdbc.url", "<url>");
persistenceMap.put("javax.persistence.jdbc.user", "<username>");
persistenceMap.put("javax.persistence.jdbc.password", "<password>");
persistenceMap.put("javax.persistence.jdbc.driver", "<driver>");

managerFactory = Persistence.createEntityManagerFactory("<current persistence unit>", persistenceMap);
manager = managerFactory.createEntityManager();

Ответ 2

Вы можете использовать Persistence.createEntityManagerFactory(Карта) для передачи свойств для выбора URL-адреса базы данных и других параметров.

Ответ 3

В долгоживущей архитектуре сеансов вы должны создать Plug-in-Framework.

Поэтому вам нужно создать другую группу Thread и Group-Repository.

Это может быть ваш класс-Loader-Tree

  • System-Class-Loader (обычно это URLClassLoader, содержит Entitys)
    • JPA-Класс-погрузчик
      • Загрузите < jpa.jar persistence.xml внутри, укажите конфигурацию базы данных из Application-Class-Loader
      • Превратите свой entityManager/session- factory.
      • Загрузите любой плагин, необходимый для работы с DataBase. Выполнение тестов модулей (; D) и тестирования интеграции с плагинами.