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

Мультитенантные Приложения С Hipster

Современные веб-приложения сложны; существует множество способов их создания и, казалось бы, e… С тегом java, хипстер.

Современные веб-приложения сложны; существует множество способов их создания и, казалось бы, бесконечный набор технологических решений. Запуск проекта с пустым каталогом может быть непростым, и может потребоваться много усилий, чтобы выйти за рамки канонического приложения “Привет, мир!”. JHipster, популярный генератор приложений, предлагает лучшие в своем роде технологические решения с передовым отраслевым дизайном, позволяющие разработчикам разрабатывать логику своих приложений и пользовательский интерфейс, не увязая в работе, если они действительно этого не хотят.

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

Имея это в виду и учитывая, что мультитенантность является для нас довольно распространенным требованием, мы воспользовались возможностью узнать больше о чертежах JHipster и разработали свои собственные для создания мультитенантных приложений.

Представляем проект Хипстерского многоквартирного дома

Наш план структурирует ваше приложение JHipster для поддержки многопользовательской аренды. Как только вы запустите его, ваше приложение generator JHipster сможет предоставлять и управлять арендаторами и пользователями, при этом все данные, связанные с арендаторами, будут автоматически разделены. План очень прост в реализации и расширении, обеспечивая основные ценности многопользовательской аренды, в соответствии с известным стандартом кодирования.

Из коробки вы получите следующее:

  • Набор экранов управления арендаторами, доступных администраторам
  • Экраны управления пользователями, позволяющие администратору назначать пользователей арендатору
  • Возможность информировать любого арендатора объекта. Объект, осведомленный о клиенте, затем автоматически фильтруется клиентом вошедшего в систему пользователя

Под Капотом

Существует три распространенных подхода к многоквартирному жилью:

  • Отдельные базы данных
  • Отдельные схемы
  • Разделите данные по одной схеме базы данных

После некоторого исследования мы обнаружили, что наиболее подходящим вариантом было реализовать пользовательский дискриминатор с использованием Spring, Hibernate и AspectJ. Ниже приводится разбивка ключевых операций, выполняемых схемой элементов для предоставления мультитенантной функциональности вашему приложению JHipster.

  • Автоматически создает объект-арендатор. Имя этой сущности предоставляется пользователем при запуске схемы элементов. В приведенных ниже примерах в качестве объекта-арендатора используется “Компания”.
@Entity
@Table(name = "company")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT\_READ\_WRITE)
public class Company implements Serializable { 

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id;

…..}
  • Расширяет объект пользователя отношением “многие к одному” для клиента вместе с определением фильтра
@Entity
@Table(name = "jhi\_user")
@FilterDef(name = "COMPANY\_FILTER", parameters = {@ParamDef(name = "companyId", type = "long")})
@Filter(name = "COMPANY\_FILTER", condition = "company\_id = :companyId")
public class User extends AbstractAuditingEntity implements Serializable { 

….. 
@ManyToOne
 private Company company;
 …..
}
  • Предоставляет угловые или реагирующие представления, маршруты и службы для управления арендаторами и пользователями
  • Расширяет представления управления пользователями, позволяя назначать пользователя клиенту
  • Реализует разделение данных с помощью AOP для включения фильтров гибернации для любого объекта, осведомленного о клиентах, например “Пользователь”
@Before("execution(\* com.mycompany.myapp.service.UserService.\*(..))")
public void beforeExecution() throws Throwable { 
…. 
User user = userRepository.findOneByLogin(login.get()).get();
if (user.getCompany() != null) { 
Filter filter = entityManager.unwrap(Session.class).enableFilter("COMPANY\_FILTER");
filter.setParameter(fieldName, user.getCompany().getId()); 
}
}

приступая к работе

Чтобы использовать схему элементов, выполните следующие действия.

  • Установите схему элементов

$установка npm – генератор g-jhipster – мультитенантность

  • Создайте свое мультитенантное приложение Hipster, выполнив приведенную ниже команду в пустом каталоге

$$хипстер – чертежи многоквартирного дома

  • Наряду со всеми существующими вопросами о хипстерах вам будет предложено указать псевдоним для арендаторов.

Какой псевдоним указан арендаторам в вашем заявлении?

  • Как только схема элементов создаст ваше приложение, она будет содержать объект-арендатор. Все объекты, которые вы создадите с этого момента, могут быть осведомлены о клиентах. Создайте новую сущность, используя стандартную команду Hipster.

$Исследование сущности jhipster

  • После генерации вас спросят, хотите ли вы проинформировать своего арендатора сущности.

Вы хотите проинформировать арендатора опроса? (Г/н)

Проблемы

Разработка этого хипстерского проекта представляла некоторые проблемы. В широком смысле их можно классифицировать как:

Конфигурации приложений

Одним из больших преимуществ Hipster является то, что он предоставляет широкий спектр возможностей при создании вашего приложения. Предоставление поддержки для каждой комбинации параметров конфигурации может усложнить задачу при разработке схемы элементов. Например, объекты могут не иметь разбиения на страницы, разбиения на страницы или разбиения на страницы с бесконечной прокруткой, что усложняет то, как Схема элементов может безопасно изменять шаблоны интерфейса JHipster по умолчанию.

Совместимость версий

Развитие JHipster развивается быстрыми темпами. С новыми версиями, выпускаемыми каждые пару недель, поддержание совместимости чертежей по-прежнему остается сложной задачей. Для решения этой проблемы наша стратегия заключается в том, чтобы свести к минимуму количество файлов JHipster, которые изменяются в соответствии с Планом. Это уменьшает вероятность того, что новый или измененный код JHipster будет перезаписан чертежом.

Частичные Обновления

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

Лучшие практики

Команда разработчиков JHipster придерживается определенной политики кодирования, чтобы обеспечить наилучшие методы для всего кода, который они предоставляют. Мы ценим это и прилагаем все усилия для обеспечения того, чтобы проект с несколькими арендаторами соответствовал высоким стандартам команды JHipster. Большой проблемой на протяжении всей разработки чертежей является обеспечение того, чтобы сгенерированный код оставался верным этой цели.

Необходимые Участники

Все это требует работы, и часто мы с трудом находим время, чтобы идти в ногу с темпами развития JHipster. Если вы Java, Angular, реагируете или Vue.js разработчик и вы хотели бы помочь, пожалуйста, свяжитесь с нами!

Ознакомьтесь с кодом чертежа на GitHub , или, если вы просто хотите посмотреть, что дает вам Чертеж, ознакомьтесь с нашим примером Угловой и Реагировать приложения.

Сообщение Мультитенантные приложения с Хипстером появилось первым на Соналика .

Оригинал: “https://dev.to/sonalake/multi-tenant-applications-with-jhipster-1fbn”