image Незаметно пролетели почти три года с момента публикации первой статьи о платформе на Хабре. За это время многое изменилось: мы вышли на международный рынок, перешли к open source лицензии, обновили стек технологий и внесли множество улучшений во фреймворк и средства разработки. Поэтому вместо длинного списка изменений мы решили опубликовать ещё одну обзорную статью о платформе CUBA, которая, я надеюсь, будет интересна разработчикам кровавого энтерпрайза корпоративных информационных систем — как ещё не знакомым с платформой, так и тем, кто уже что-то слышал о ней.

Итак, под катом вы узнаете:
  • Что представляет из себя платформа CUBA и какова её архитектура
  • Какие решения эффективнее всего разрабатывать на CUBA
  • Как платформа помогает сэкономить время разработки корпоративных систем
  • Какое окружение необходимо для развертывания CUBA-приложений
  • Как мигрировать устаревшую систему на CUBA
  • Под какой лицензией распространяется платформа
  • Как организована поддержка разработчиков

Какие задачи решает платформа?


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

Ключевые особенности платформы:

  • высокий уровень абстракции относительно технологий, лежащих в её основе – Vaadin, Spring, EclipseLink и т.д.
  • готовые, интегрированные компоненты, решающие многие типовые задачи корпоративных систем
  • визуальные средства разработки и развитая генерация шаблонного кода

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

Как это устроено?


Приложения на базе CUBA имеют стандартную трёхслойную архитектуру. Связующим элементом системы являются метаданные – информация о модели данных приложения. Благодаря метаданным визуальные компоненты знают о том, с какими данными они работают. Так, например, таблица знает, что отображает атрибуты сущности “водитель” и автоматически заполняет имена и формат колонок. Таким же образом метаданные помогают визуальным компонентам работать с базой данных через ORM, задавая графы объектов, которые нужно загрузить или обновить. Тот же принцип применяется к подсистеме безопасности, генерации отчётов и прочим частям платформы.

Платформу отличает богатый декларативный web интерфейс: создавать экраны можно в визуальном редакторе или в XML, выбирая из десятков визуальных компонентов от всевозможных кнопок до Google Maps и динамических графиков. Логика инициализации и обработки событий задаётся затем в Java (или Groovy)-контроллерах. Учитывая привязку компонентов к данным, можно очень быстро создать сложный UI, который при этом будет легко поддерживать благодаря чёткому отделению кода от разметки. Если выбора доступных компонентов недостаточно, в платформе реализован механизм интеграции внешних компонентов, написанных на Vaadin, GWT или JavaScript.

image
Экран одного из приложений на платформе

Важной частью пользовательского интерфейса CUBA является универсальный фильтр данных – компонент, позволяющий пользователям создавать свои условия поиска. Разработчику достаточно перетащить компонент на экран браузера (так мы называем типовые экраны отображения списка сущностей), и можно о нём забыть. Пользователи и администраторы системы сами определят, что и как искать. Основанная на ролевой модели подсистема контроля прав доступа позволяет в рантайме управлять доступностью CRUD операций над сущностями или отдельными атрибутами, видимостью экранных компонентов, а также произвольными токенами, которые можно создавать и использовать программно. Контроль доступа на уровне строк позволяет разграничить доступ к определённым записям данных. К примеру, пользователи из регионального департамента смогут видеть только документы, созданные в этом департаменте. В довершение, все изменения в данных логируются, так что вы всегда увидите, кто, что и когда изменил – очень удобно при “разборе полётов”.

image
Универсальный фильтр данных

В дополнение к вышесказанному, в CUBA есть и другие готовые фичи из коробки, включая:

  • управление пользователями и средства администрирования
  • создание отчётов
  • управление бизнес-процессами во встроенном визуальном дизайнере
  • многоязыковой интерфейс и поддержка разных часовых поясов
  • полнотекстовый поиск
  • универсальный REST API

На чём я могу развернуть своё приложение?


Что касается стадии внедрения и вариантов окружения, здесь у вас достаточно свободы выбора. Приложения, созданные на платформе CUBA, можно развернуть в различных конфигурациях, начиная от запуска всех компонентов приложения на одном сервере и до конфигураций, обеспечивающих высокую отказоустойчивость, с разделёнными web, средним и БД слоями. Платформа «из коробки» поддерживает PostgreSQL, Oracle Database, Microsoft SQL Server, MySQL и HSQL (последняя обычно используется для прототипирования), между которыми можно переключаться по мере роста проекта. Также важно заметить, что CUBA-приложения могут быть развёрнуты на любом сервере Java EE Web Profile, включая Jetty, Tomcat, Glassfish, Websphere и т.д. И конечно, вы можете деплоить ваше приложение в Docker и/или запускать его в любом популярном PaaS облаке вроде CloudFoundry, OpenShift или Jelastic. Кстати, для Jelastic реализована интеграция, позволяющая деплоить приложение в один клик прямо из Studio.

Что нужно, чтобы начать писать приложения на CUBA?


Всё, что нужно для разработки приложений на CUBA – это Java SE, XML и JPQL. Это делает код вашего приложения максимально однородным, а значит более лёгким в сопровождении. Это также позволяет команде разработки быть более гибкой – вам не требуется отдельная группа Web-разработчиков или гуру Java EE.

Бизнес-логику приложения вы можете писать в любой привычной IDE, как IntelliJ IDEA или Eclipse, которую дополняет CUBA Studio – специализированная IDE для автоматизации целого ряда задач, связанных с платформой, таких как:

  • настройка инфраструктуры проекта: скриптов сборки, проектных файлов и т.п.
  • визуальное конструирование UI и модели данных
  • автогенерация CRUD экранов, с возможностью выбора из типовых вариантов разметки
  • поддержание актуальности БД с помощью автоматической генерации и запуска скриптов обновления
  • создание стабов для обработчиков событий, сервисов и т.п.

image

Все изменения между Studio и IDE синхронизируются, так что вы сами можете выбирать, в чём работать. В дополнение, в Studio реализован hot deploy – все изменения, кроме модели данных, включая внешние изменения в Java IDE, автоматически компилируются и деплоятся на сервер без перезапуска (о нашей реализации hot deploy мы писали ранее). В итоге, Studio берёт на себя большую часть рутинной работы – хотя при желании можно работать и исключительно в Java IDE. Например, для IntelliJ IDEA существует отличный плагин.

Если вам необходимо мигрировать устаревшее приложение на современный стек, CUBA также может стать хорошим вариантом. В Studio встроены средства миграции, которые автоматически генерируют модель данных и CRUD экраны на основе существующей БД, причем не меняя схему последней. Конечно, в любом случае необходимо будет портировать бизнес логику и специфические экраны, но это существенно экономит общие трудозатраты.

Насколько активно сообщество разработчиков? Что если платформа перестанет поддерживаться?


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

На картинке ниже отображены запуски уникальных проектов на Studio за август. Studio собирает анонимную статистику только с разрешения пользователя, так что список далеко не полный. При этом за 8 месяцев с начала года количество запусков Studio увеличилось примерно в 10 раз и продолжает быстро расти — во многом благодаря недавнему переходу к open source модели. Мы постоянно участвуем в Java конференциях, что также способствует росту сообщества: в этом году мы уже были на JavaZone в Осло, QCon в Нью-Йорке, AADI в Лондоне, в ближайшее время едем на JavaOne в Сан-Франциско и JokerConf в Питер. Технически платформа развивается не менее активно. Надо отметить, что на ней построены все решения нашей компании, что является дополнительным драйвером для поддержки и развития. Кстати, недавно платформа была включена в реестр отечественного ПО – для некоторых компаний это может быть актуально.

image

Open source = бесплатно?


Почти. Как обозначено в заголовке, сам фреймворк является опенсорсным и распространяется под Apache 2.0 лицензией, его исходный код доступен на GitHub. Это означает, что использование платформы не накладывает никаких лицензионных ограничений на разработанные на ней приложения. CUBA Studio, в свою очередь, доступна в бесплатной и коммерческой версии. Бесплатная версия CUBA Studio полностью функциональна, но имеет ограничения по размеру модели данных приложения. Она идеально подходит для начала проекта и изучения возможностей платформы. Дальнейшую разработку можно продолжить абсолютно бесплатно непосредственно в Java IDE, либо купив подписку на коммерческую лицензию, которая также предоставляет доступ к Premium-дополнениям: генератору отчётов, диаграммам и картам, полнотекстовому поиску и BPM. Стоимость годовой подписки для одного разработчика – 18 000 руб., за пределами стран СНГ чуть дороже – $389.

Надеюсь, после прочтения этого обзора у вас сложилось представление о платформе CUBA. Если у вас возникло желание попробовать её “в деле”, можно просто скачать Studio без регистраций и смс, пройти Quick Start и уже через несколько минут запустить своё первое CUBA приложение. Следить за новостями платформы можно в Twitter, Facebook, русском и английском блогах – в последнем сейчас больше публикаций, но мы планируем это скоро исправить!
Поделиться с друзьями
-->

Комментарии (9)


  1. m1ld
    20.09.2016 16:26

    У меня больше вопросов как у разработчика:
    Почему Vaadin? Какая его версия? Почему не предложить на выбор несколько UI фреймворков? Используете ли его язык разметки? Что там ныне у Vaadin с websocket (вплоть до финиша 7.5 они так и не решили проблемы со стабильностью)? Да и набор стандартных плагинов Vaadin 7 оставляет желать лучшего по сравнению с шестой версией.

    Используете ли стандартные библиотеки для интеграции spring и vaadin? Или же давным давно написали свои и используете их?

    Исходя из того, что Lucene и Activiti обладают слабыми возможностями масштабируемости – как обстоят дела у вашей платформы с этим же вопросом?

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


    1. jreznot
      20.09.2016 18:23
      +1

      Мы используем свежие версии Vaadin 7.6 (в скором времени 7.7), но интерфейсы компонентов и декларативная разметка для экранов у нас своя. Мы не хотим распыляться на несколько UI фреймворков, поскольку мы сами тоже пишем компоненты для UI, кроме того, для custom веб-сайтов мы предлагаем модуль интеграции со Spring MVC и свой generic REST-API.

      C WebSocket в 7.6 всё довольно хорошо, сложных проблем ещё ни разу не возникало.

      Стандартные библиотеки для интеграции Spring и Vaadin не используем, у нас свой слой интеграции, и Vaadin используется только и исключительно как UI toolkit.

      Ну а уж на вопрос про покрытие тестами вы можете ответить сами, юнит тесты лежат прямо в проекте cuba на github. Тестовое покрытие наших премиальных компонентов мы, пожалуй, можем раскрыть только нашим клиентам.


      1. m1ld
        22.09.2016 09:43

        На самую важную часть вопроса вы так и не ответили, как же все-таки обстоят дела с масштабированием?


        1. jreznot
          22.09.2016 22:11

          А откуда вы вообще взяли, что Lucene и Activiti имеют какие-то проблемы с масштабируемостью? Lucene — де-факто стандарт в своей области, как и Activiti, активно используемый в Alfresco.


          1. m1ld
            23.09.2016 12:36

            Откуда я взял? Да из собственного опыта работы с данными инструментами.

            Я не говорил, что lucene работает плохо как движок полнотекстового поиска, а лишь сказал, что обладает слабыми возможностями для масштабирования. Обычно используют solr и elasticsearch для этих целей.

            Используемый в Alfresco – это ни сколько не ответ на вопрос, как же его там используют на самом деле. Последнее, что я видел в версии 5.11 – это предложение самим пользователям реализовывать блокировки на уровне БД, чтобы одни и те же процессы не запускались на разных vm. Ну и на момент моей работы с версией 5.11 acitiviti даже не реализовали полностью спеку BPMN2.


            1. tinhol
              24.09.2016 11:00
              +1

              Даже не вдаваясь в подробности ( что внутри solr и elastic тот же lucene, и что на рынке bpmn движков звенящая пустота — jbpm да activiti) хочу задать вопрос.

              А что Вы подразумеваете под масштабированием? Вы же наверное догадываетесь, что CUBA — это в основном корпоративные приложения, порталов- миллионников и соц-сетей на ней не делают. Не буду говорить, что проблем с масштабированием совсем нет, они есть, но лежат в другом месте, если можно так выразиться.


  1. AStek
    21.09.2016 19:53

    Напоминает чем-то Drupal 0_o
    Не скажу что это плохо, просто странно видеть такое в java-мире)


    1. glaschenko
      21.09.2016 20:46
      +1

      Если только ооочень издалека )) Drupal — CMS, строить на нем учетную систему с сотней-другой экранов и справочников например вы врядли станете. Скорее уж с 1С сравнение ближе. Или с Delphi.


    1. glaschenko
      21.09.2016 20:48

      С чем согласен, так это с тем, что в Java мире маловато хороших RAD инструментов. Этот пробел мы и пытаемся заполнить.