Рубрики
Без рубрики

Написание многопользовательского веб-приложения на Java и Spring

Написание многопользовательского веб-приложения на Java и Spring

Автор оригинала: blueriversys.

Привет всем.

Цель этого поста-обсудить, как разработать и развернуть в Tomcat пример многопользовательского веб-приложения Java.

Прежде чем мы начнем, вот несколько ссылок, в которых обсуждаются принципы и связанные с ними проблемы:

https://en.wikipedia.org/wiki/Multitenancy
https://azure.microsoft.com/en-us/documentation/articles/dotnet-develop-multitenant-applications

Вот список программного обеспечения, которое вам понадобится для этого проекта:

  1. Java 1.8
  2. Весна 4
  3. Кот 8
  4. PostgreSQL 9.4
  5. Maven 2
  6. Eclipse IDE 4.5
  7. EclipseLink 2.6.3

Во-первых, давайте рассмотрим основные шаги, необходимые для завершения проекта:

  1. Установите и настройте серверную среду, в которой будет развернуто приложение Java
  2. Выберите архитектуру разделения данных на уровне базы данных
  3. Напишите заявление
  4. Развертывание в Tomcat

Теперь давайте рассмотрим детали каждого из вышеперечисленных шагов:

  1. Установка и настройка сервера Поскольку пункт № 1 выше занимает много времени и может быть новым для ряда разработчиков, я на самом деле написал сопутствующую статью, посвященную именно этому: Настройка Tomcat + PostgreSQL для многопользовательских веб-приложений в Linux.

  2. Выберите архитектуру разделения данных Разделение данных может быть достигнуто несколькими способами для приложений с несколькими арендаторами. Один из них заключается в создании различных “схем” базы данных, где набор данных каждого арендатора хранится в другой схеме одной и той же базы данных. Именно такой подход я выбрал для простого приложения, которое мы обсудим.

Используя этот метод, база данных организована так, как показано на следующем снимке экрана:

Используя этот метод, база данных организована так, как показано на следующем снимке экрана:

Это позволяет приложению предварять имя таблицы идентификационным именем клиента в качестве схемы. Например, для таблицы ПРОДУКТОВ клиента 1 приложение ссылается на нее как на клиента 1.ПРОДУКТ.

  1. Напишите заявление Я использовал Java + Spring + JPA + PostgreSQL для разработки этого приложения.

Пожалуйста, имейте в виду, что это приложение в некотором роде придумано, потому что моей целью было поэкспериментировать с некоторыми концепциями и освежить знания о других. Например, я хотел выяснить, насколько хорошо – и сколько кодирования потребуется для JPA для обработки отношений “один ко многим” для записей базы данных; на самом деле для этого требуется немного дополнительного кода, но для любого новичка в этом определенно есть кривая обучения.

И особенно мне хотелось узнать, сколько изменений потребуется для переноса одностенантного веб-приложения в мультитенантное. Дизайн, который я выбрал, прост, но работает очень хорошо: одна база данных с несколькими схемами (по одной на каждого арендатора), как показано на рисунке выше.

Вот скриншот структуры базы данных, на котором показаны 2 арендатора:

Вот скриншот структуры базы данных, на котором показаны 2 арендатора:

Итак, вот список различных методов и технологий, которые я использовал в этом приложении:

АЯКС: ничего особенного. В этом приложении я использовал его для вызова веб-службы и обновления только части страницы; кто может терпеть полное обновление страницы каждый раз? Spring: Я использовал несколько модулей Spring: Spring MVC, Spring Security, только весенняя конфигурация Java с помощью аннотаций Java. Картинки: Я хотел освежить знания о загрузке изображений из нескольких частей и обработке ответов в JavaScript. JPA: Я выбрал EclipseLink, но очень легко мог бы выбрать Hibernate, который является еще одним поставщиком JPA. Веб-службы Restful: Spring позволяет легко создавать веб-службы RESTful. Вам просто нужно правильно настроить свой “контроллер” с помощью аннотаций Java. JSON: JSON используется в большинстве – если не во всех – ответах веб-служб. Многопользовательская аренда: Взгляните на класс Impl утилиты репозитория, который является одноэлементным, и вы увидите, что я использую строку имени арендатора в качестве имени схемы, также известную как квалификатор таблиц. База данных: Я использовал PostgreSQL, но вы можете легко перенести ее в другую базу данных, внеся несколько изменений в persistence.xml и файл DB.properties, из которого считывается имя драйвера.

Опять же, я должен подчеркнуть, что это всего лишь надуманное демонстрационное веб-приложение, которое я написал в свободное время; следовательно, многое можно улучшить. Например, конечно, должна быть создана таблица ПОЛЬЗОВАТЕЛЕЙ; мы будем работать над этим дальше. Тем не менее, существует принцип множественной аренды: данные надежно передаются от одного арендатора к другому.

  1. Разверните приложение в Tomcat После того, как все это будет завершено и протестировано локально как один экземпляр, приложение, наконец, можно скопировать в несколько каталогов в Tomcat и переименовать в ROOT.war. В нашем портфолио клиентов будет один каталог для каждого из арендаторов, которые у нас есть.

Вот скриншот того, что арендатор1 видит на странице меню приложения:

Вот скриншот того, что арендатор1 видит на странице меню приложения:

И вот что tenant2 видит на странице меню:

И вот что tenant2 видит на странице меню:

Вы еще даже не начали, а уже получили 2 крупных клиента?!!! Ух ты!

Наличие поддомена, названного в честь названия его компании, дает клиенту/арендатору чувство собственности; он также сможет изменить некоторые аспекты пользовательских данных арендатора на странице Информации о арендаторе.

Является ли эта стратегия поддомена и сегрегация данных тем, что вы имели в виду, когда думали о многодомной аренде? Пожалуйста, поделитесь своими комментариями ниже.

И, наконец, и это очень важно!, вот ссылка на исходный код и файл WAR:

И, наконец, и это очень важно!, вот ссылка на исходный код и файл WAR:

Оригинал: “https://www.codementor.io/@blueriver02703/writing-a-multi-tenant-web-app-with-java-and-spring-clbklfz8v”