Незаметно пролетели почти три года с момента публикации первой статьи о платформе на Хабре. За это время многое изменилось: мы вышли на международный рынок, перешли к open source лицензии, обновили стек технологий и внесли множество улучшений во фреймворк и средства разработки. Поэтому вместо длинного списка изменений мы решили опубликовать ещё одну обзорную статью о платформе CUBA, которая, я надеюсь, будет интересна разработчикам кровавого энтерпрайза корпоративных информационных систем - как ещё не знакомым с платформой, так и тем, кто уже что-то слышал о ней.
Итак, под катом вы узнаете:
- Что представляет из себя платформа CUBA и какова её архитектура
- Какие решения эффективнее всего разрабатывать на CUBA
- Как платформа помогает сэкономить время разработки корпоративных систем
- Какое окружение необходимо для развертывания CUBA-приложений
- Как мигрировать устаревшую систему на CUBA
- Под какой лицензией распространяется платформа и инструменты разработки
- Как организована поддержка разработчиков
Какие задачи решает платформа?
В первую очередь, платформа CUBA нацелена на разработку корпоративных информационных систем. Типичные характеристики таких приложений: развитая модель данных, десятки и даже сотни относительно типовых экранов, поддержка большого количества сложных бизнес-процессов, множество отчетов, требования по разграничению прав доступа, и так далее.
Ключевые особенности платформы:
- высокий уровень абстракции относительно технологий, лежащих в её основе – Vaadin, Spring, EclipseLink и т.д.
- готовые, интегрированные компоненты, решающие многие типовые задачи корпоративных систем
- визуальные средства разработки и развитая генерация шаблонного кода
В совокупности, это позволяет минимизировать временные затраты на “системные” задачи – настройку инфраструктуры проекта, интеграцию технологий и компонентов, разработку базовой функциональности – и сконцентрироваться на реализации бизнес-требований. В то же время, CUBA не ограничивает доступ к низкоуровневому коду, гарантируя возможность адаптировать его под нужды проекта.
Как это устроено?
Приложения на базе CUBA имеют стандартную трёхслойную архитектуру. Связующим элементом системы являются метаданные – информация о модели данных приложения. Благодаря метаданным визуальные компоненты знают о том, с какими данными они работают. Так, например, таблица знает, что отображает атрибуты сущности “водитель” и автоматически заполняет имена и формат колонок. Таким же образом метаданные помогают визуальным компонентам работать с базой данных через ORM, задавая графы объектов, которые нужно загрузить или обновить. Тот же принцип применяется к подсистеме безопасности, генерации отчётов и прочим частям платформы.
Платформу отличает богатый декларативный web интерфейс: создавать экраны можно в визуальном редакторе или в XML, выбирая из десятков визуальных компонентов от всевозможных кнопок до Google Maps и динамических графиков. Логика инициализации и обработки событий задаётся затем в Java (или Groovy)-контроллерах. Учитывая привязку компонентов к данным, можно очень быстро создать сложный UI, который при этом будет легко поддерживать благодаря чёткому отделению кода от разметки. Если выбора доступных компонентов недостаточно, в платформе реализован механизм интеграции внешних компонентов и всегда есть опция - написать свой собственный компонент.
Важной частью пользовательского интерфейса CUBA является универсальный фильтр данных – компонент, позволяющий пользователям создавать свои условия поиска. Разработчику достаточно перетащить компонент на экран браузера (так мы называем типовые экраны отображения списка сущностей), и можно о нём забыть. Пользователи и администраторы системы сами определят, что и как искать.
Основанная на ролевой модели подсистема контроля прав доступа позволяет в рантайме управлять доступностью CRUD операций над сущностями или отдельными атрибутами, видимостью экранных компонентов, а также произвольными токенами, которые можно создавать и использовать программно. Контроль доступа на уровне строк позволяет разграничить доступ к определённым записям данных. К примеру, пользователи из регионального департамента смогут видеть только документы, созданные в этом департаменте. В довершение, все изменения в данных логируются, так что вы всегда увидите, кто, что и когда изменил – очень удобно при “разборе полётов”.
CUBA предоставляет большой набор возможностей для создания бизнес-приложений. Если встроенных средств платформы не хватает, то можно то можно дополнить приложение внешними компонентами, установив их из каталога дополнений. Помимо описанного выше, платформа включает следующий набр функций:
- управление пользователями и средства администрирования
- создание отчётов
- управление бизнес-процессами во встроенном визуальном дизайнере
- многоязыковой интерфейс и поддержка разных часовых поясов
- полнотекстовый поиск
- универсальный REST API
- интеграция с LDAP
- ...и многое другое
Если потребуется разработать пользовательский интерфейс с использованием JavaScript библиотек, таких как ReactJS, Angular или Vue.js, в дополнение к "стандартному" набору экранов, то CUBA предоставляет модуль REST API и генератор TypeScript SDK. Полученный в результате SDK будет содержать все необходимые классы модели данных и вызовы сервисов, которые могут быть использованы при разработке клиентского приложения.
На чём я могу развернуть своё приложение?
Что касается стадии внедрения и вариантов окружения, здесь у вас достаточно свободы выбора. Приложения, созданные на платформе CUBA, можно развернуть в различных конфигурациях, начиная от запуска всех компонентов приложения на одном сервере и до кластерных конфигураций, обеспечивающих высокую отказоустойчивость. Платформа «из коробки» поддерживает PostgreSQL, Oracle Database, Microsoft SQL Server, MySQL и HSQL (последняя обычно используется для прототипирования), между которыми можно переключаться по мере роста проекта. Также важно заметить, что CUBA-приложения могут быть развёрнуты на любом сервере Java EE Web Profile, включая Jetty, Tomcat, Glassfish, Websphere и т.д. И конечно, вы можете деплоить ваше приложение в Docker и/или запускать его в любом популярном PaaS облаке: Amazon, CloudFoundry, OpenShift или Jelastic.
Что нужно, чтобы начать писать приложения на CUBA?
Всё, что нужно для разработки приложений на CUBA – это Java SE. Это делает код вашего приложения максимально однородным, а значит более лёгким в сопровождении. Это также позволяет команде разработки быть более гибкой – вам не требуется отдельная группа Web-разработчиков или гуру Java EE.
Для разработки используется CUBA Studio - IDE, основанная на IntelliJ IDEA Community, а также можно установить Studio как плагин для IDEA. CUBA Studio предоставляет следующую функциональность:
- визуальное конструирование UI и модели данных
- автогенерация CRUD экранов, с возможностью выбора из типовых вариантов разметки
- поддержание актуальности БД с помощью автоматической генерации и запуска скриптов обновления
- создание стабов для обработчиков событий, сервисов и т.п.
Studio использует метамодель проекта, предоставляемую IDEA, таким образом, поддерживается вся функциональность этой среды разработки: автодополнение кода, иньекция компонентов и сервисов, навигация и т.д. Помимо этого, в режиме разработки Studio автоматически перегружает ваш код (кроме модели данных) без остановки приложения при внесении каких-либо изменений.
Если вам необходимо мигрировать устаревшее приложение на современный стек, CUBA также может стать хорошим вариантом. В Studio встроены средства миграции, которые автоматически генерируют модель данных и CRUD экраны на основе существующей БД, причем не меняя схему последней. Конечно, в любом случае необходимо будет портировать бизнес логику и специфические экраны, но это существенно экономит общие трудозатраты.
Насколько активно сообщество разработчиков? Что если платформа перестанет поддерживаться?
Вопросы, связанные с разработкой, обсуждаются на бесплатных англо- и русскоязычных форумах, вероятнее всего вы получите ответ на свой вопрос в течение дня. И, конечно, доступны коммерческие варианты поддержки и консультаций.
На картинке ниже отображены запуски уникальных проектов на Studio за август. Studio собирает анонимную статистику только с разрешения пользователя, так что список далеко не полный. При этом за 8 месяцев с начала года количество запусков Studio увеличилось примерно в 10 раз и продолжает быстро расти - во многом благодаря переходу к open source модели. Мы постоянно участвуем в Java конференциях, что также способствует росту сообщества: в этом году мы уже были на JavaZone в Осло, QCon в Нью-Йорке, AADI в Лондоне, в ближайшее время едем на JavaOne в Сан-Франциско и JokerConf в Питер. Технически платформа развивается не менее активно. Надо отметить, что на ней построены все решения нашей компании, что является дополнительным драйвером для поддержки и развития. Кстати, недавно платформа была включена в реестр отечественного ПО – для некоторых компаний это может быть актуально.
Open source = бесплатно?
Почти. Как обозначено в заголовке, сам фреймворк является опенсорсным и распространяется под Apache 2.0 лицензией, его исходный код доступен на GitHub. Это означает, что использование платформы не накладывает никаких лицензионных ограничений на разработанные на ней приложения. CUBA Studio, в свою очередь, доступна в бесплатной и коммерческой версии. Бесплатная версия CUBA Studio полностью функциональна, но ряд инструментов доступны только по подписке, это:
- визуальный редактор модели данных
- WYSIWG редактор экранов
- визуальный редактор тем оформления приложения
Кроме этого, никаких ограничений не накладывается. Вы можете вести проекты любого размера и любой сложности, используя бесплатную версию CUBA Studio. Стоимость персональной годовой подписки для одного разработчика – 189$, для юридических лиц – $389. Даже если ваша подписка закончилась, то вы можете продолжать работу над проектом в CUBA Studio.
Надеюсь, после прочтения этого обзора у вас сложилось представление о платформе CUBA. Если у вас возникло желание попробовать её “в деле”, можно просто скачать бесплатную версию Studio без регистраций и смс, пройти Quick Start и уже через несколько минут запустить своё первое CUBA приложение. Следить за новостями платформы можно в Twitter, русском и английском блогах!