Многопользовательская архитектура весной MvC с JPA

1

Я столкнулся с серьезной проблемой в архитектуре моего корпоративного приложения. Мое текущее приложение - это веб-приложение с использованием spring framework 3.2+ и jpa 2.0. Теперь мне нужно поддерживать многократную аренду в текущем приложении.

Мое требование состоит в том, что, когда пользователь вошел в систему, данные для пользователя должны быть поданы из соответствующей базы данных. Короче, мне нужна поддержка нескольких баз данных, которая может вызвать различную строку соединения. Итак, как я могу динамически подключаться к базе данных?

Моя еще одна проблема заключается в том, что арендатор (конкретный клиент приложений) может зарегистрировать себя "на лету", и при успешной регистрации мне нужно создать среду, содержащую создание и инициализацию базы данных и т.д. Для этого арендатора и для успешного создания пользователей среды арендаторов доступ к приложению. Итак, проблема в том, как динамически создавать среду, как динамически создавать EntityManagerFactory?

Любые предложения по достижению многократной аренды наиболее приветствуются...

  • 1
    Предполагая, что вы используете Hibernate в качестве своего провайдера, более новые версии имеют встроенную поддержку нескольких арендаторов. В противном случае вы можете использовать что-то вроде этого (беззастенчивый плагин), который мы использовали для поддержки многопользовательского режима (который работает примерно через 8 лет).
  • 0
    Да, я использую hibernate в качестве провайдера, но это может измениться в будущем.
Теги:
architecture
spring
jpa
multi-tenant

1 ответ

0

В веб-среде многопользовательская аренда может быть реализована с созданием псевдонимов, специфичных для арендаторов, которые должны быть определены в вашем файле /etc/hosts или Windows\System32\drivers\etc\hosts, чтобы сопоставлять узлы, связанные с арендатором, с тот же контейнер сервлетов.

Как только вы это сделаете, вы можете определить фильтр сервлета, который будет читать текущий используемый хост и сравнить его с другим сопоставлением, которое будет определено в файле свойств, например, и заполнить параметр сеанса HTTP, указывающий текущего арендатора.

Здесь у вас есть арендатор на сессии.

Вы должны настроить таргетинг на общую базу данных и конкретную таблицу "tenant_database". В этой таблице должны быть указаны имя базы данных, пароль, порт и т.д. Вся информация о источнике данных устанавливается для подключения к целевой базе данных арендаторов.

На этом этапе вы можете создать entityManagerFactory:

  Map<String, String> properties = new HashMap<String, String>();
  properties.put("javax.persistence.jdbc.user", "admin");
  properties.put("javax.persistence.jdbc.password", "admin");
  EntityManagerFactory emf = Persistence.createEntityManagerFactory(
      "jdbc:mysql://localhost:3306/myDB", properties);

Вам просто нужно подумать о том, чтобы получить его с нужного места сейчас.. :)

Надеюсь, поможет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню