+7 (495) 956-79-28

Введение

Наша компания долгое время разрабатывала системы на платформе Lotus Notes. Это было удобно с точки зрения простоты создания форм, видов, не требовало отдельного кода для сервера. Хотелось бы найти что-то похожее на OpenSource. Предлагается следующий подход.


Какие задачи решает

Данный подход более приемлем для внутрикорпоративных приложений: типовая, быстрая разработка без изысканных визуальных эффектов. Спектр решаемых задач лежит в плоскости данных сложной структуры, например: документооборот, архив документов, изображений. Обмен данными сложной структуры и среднего объема (размер одного документа около нескольких килобайтов), количество пользователей среднее (например, до 100 человек), время отклика системы не требует миллисекундных значений, а порядка 1 - 3 мин. Сами технологии конечно не ограничивают нам область применения, всё зависит от уровня подготовки специалистов.


В чем преимущества такого подхода

Среда разработки Eclipse предоставляет интегрированное рабочее место разработчика всего приложения. Модель данных компилируется в Java-код, что ускоряет работу с данными. При разработке приложения не требуются промежуточные протоколы между сервером и клиентом, т.е. не нужно Java-класс "перегонять", например, в Json-формат и обратно, чтобы работать с Web-клиентом. Не требуются отдельные специалисты по написанию javascript-кода для Web-клиента и оформлению HTML-страниц, весь код от клиента до сервера пишется на Java. Порядка 40% получаемого кода генерируется автоматически через компиляцию модели данных в Java-код. Скорость разработки простых форм (1-5 однозначных поля) порядка  2-5 часов. Для более сложных форм (Входящий документ) потребуется больше времени 3 - 5 дней. Код приложения с некоторыми изменениями можно портировать для работы как "толстый клиент" (самостоятельное приложение), так и для работы на мобильных устройствах (Android). Компонентный подход (plugins, OSGi) в разработке позволяет собирать (компоновать) приложение из разных "строительных блоков" как конструктор.


Описание решения

За основу возьмём язык программирования Java, как наиболее распространённый в классе прикладных приложений и переносимый на разные операционные системы. Для описания модели данных применим Eclipse EMF: позволяет описать с помощью разных форматов структуру сложных объектов данных, которая потом компилируется в Java-класс. Для документов это очень подходит. Например: мы описываем Входящий документ как одно целое и получаем один Java-класс, который содержит все поля этого документа. Эти поля можно устанавливать, получать (для каждого поля формируется get и set метод), можно запросить признак "установлено ли какое поле в документе" (например isSet какое-то поле), можно установить признак "содержания" (containment) другого объекта в этом документе, которое влияет на способе хранения документа в системе. Сохраняем документ так же как одно целое в виде XML-формата, это не единственный способ, но самый простой (по аналогии с Notes: мы создаём форму и документ, созданный по этой форме, целиком сохраняется в базе). То есть EMF обеспечиваем нам простое описание сложных моделей данных, помимо этого это фреймворк предоставляет функции, описывающие эту структуру данных в единообразном формате. Например: в документе мы описали поле Subject, после компиляции появляется класс, в котором есть два метода getSubject, setSubject - прямые обращения к этому полю, но также в классе есть методы, обеспечивающие доступ к этому поле через рефлексию: eSet(поле, значение), eGet(поле). Тем самым мы можем взаимодействовать с полем лишь зная его имя (в общем случае путь к полю).

На этом этапе мы получаем инструмент описания данных и взаимодействия с ними без привязки к конкретному способу хранения данных и их представлению для пользователя.


Следующее впечатляющее воспоминание из Notes - это простое рисование форм. В OpenSource-мире существует наверняка множество способов представления данных. Идя на поводу современных тенденций нам нужно решение для Web-клиента. И хотелось бы, чтобы работа над интерфейсом была не сильно трудоемкой, не нужно было бы придумывать где и как отображать форму, вид диалогов или подсказок. Для этого применим Eclipse RAP - это простая в использовании библиотека готовых элементов дизайна, начиная от поля и заканчивая общей формой приложения. Здесь нет каких-то изысканных элементов дизайна, всё очень примитивно и поэтому просто ([демо версия|https://rap.eclipsesource.com/demo/release/controls/]). RAP позволяем нам создать приложение типовой формы без изысков.

На этом этапе мы имеем модель и способ её отображения для Web-клиента.


Следующий важный шаг - это управление данными. Из жизни в Notes мы помним, что для создания приложения достаточно было формы, вида и агента на сервере Notes для изменения данных. В текущих реалиях нам самим надо как-то сделать простенький сервер, который обрабатывал бы наши данные. И вот простой подход - OSGi-сервисы. По сути это описание протокола взаимодействия между клиентом и сервером, но для нас достаточно. Конечно сами сервисы нам нужно реализовать, но их не так уж и много и для многих уже есть открытая реализация.  Что нам нужно в первую очередь - это сервис сохранения данных. Да и, пожалуй, всё. На второй этап можно придумать сервис полнотекстового поиска,  ну и так далее на что фантазии хватит. Благодаря использованию OSGi может существовать несколько реализаций одного и того же сервиса, каждый клиент может подобрать/разработать подходящую для него реализацию.

На этом этапе у нас есть модель, способ её отображения, сервисы по управлению данными.


Основные технологии

OSGi (Open Services Gateway Initiative) — спецификация динамической
модульной системы и сервисной платформы для Java-приложений,
разрабатываемая консорциумом OSGi Alliance. Спецификации дают модель для
построения приложения из компонентов, связанных вместе посредством
сервисов. Суть заключается в возможности переинсталлировать
динамически компоненты и составные части приложения без необходимости
останавливать и перезапускать его.
Источник https://ru.wikipedia.org/wiki/OSGi


Eclipse Modeling Framework (EMF) — свободный фреймворк, основанный на
Eclipse, для генерации кода, инструментов и прочих приложений на основе
структурированной модели данных (метамодели).EMF предоставляет
инструментарий и поддержку во время исполнения для того, чтобы из
модели, описанной в XMI, получить:
соответствующий набор Java-классов
набор адаптеров, позволяющих просматривать и редактировать модель
простейший редактор модели
Модель также может быть описана:
аннотированным Java-кодом
UML
XML-схемой
моделью формата Rational Rose
Источник https://ru.wikipedia.org/wiki/Eclipse_Modeling_Framework


Rich AJAX Platform (RAP) — это проект разрабатывающийся в рамках проекта
Eclipse Technology Project и являющийся свободным программным
обеспечением, позволяя разработчикам создавать приложения Rich Internet
Application с использованием технологии AJAX и использованием модели
разработки Eclipse для создания плагинов с использованием Java API. Rich
AJAX Platform является аналогом фреймворка Rich Client Platform для
веб-разработки. Его API очень похож на API Rich Client Platform и
поэтому разработчики, имеющие опыт работы с RCP, могут использовать свои
знания для разработки веб-приложений. RAP стимулирует обмен и повторное
использование исходного кода между RCP и RAP-приложениями, позволяя
упростить разработку приложений работающих на клиентской машине и
имеющих веб-интерфейс.
Источник https://ru.wikipedia.org/wiki/Rich_AJAX_Platform


Установка и настройка среды разработки

1. Установить Java (JRE или JDK) версии не ниже 1.8

2. Установить Eclipse Modeling Tools с сайта eclipse.org

3. Запустить Eclipse Modeling Tools перейти в Help->Install New Software... Нажмите кнопку Добавить, введите RAP Update Site URL и адрес http://download.eclipse.org/rt/rap/tools/

3.1. Установите выбранное обновление (необходимо для запуска приложения)

4. Запустить Eclipse Modeling Tools перейдите в Window->Preferences в открывшемся диалоге в строке фильтра введите DS, внизу должна появится строка "DS Annotations", справа выберите все галочки и нажмите Применить (необходимо для автоматического создания файла конфигурации сервиса при разработке приложения)

5. Запустить Eclipse Modeling Tools перейдите в File->Import, в открывшемся диалоге выберите "Existing Projects into Workspace", выберите директорию, в которую распаковали исходный код приложения и нажмите кнопку Finish

6. Запустить Eclipse Modeling Tools, откройте проект ru.inttrust.cmj.rap.target , откройте файл cmj_rap.target , нажмите Set as Target Platform , дождитесь завершения обновления

7. Запустить Eclipse Modeling Tools, найдите проект ru.inttrust.cmj.rap , нажмите правой кнопкой мыши на названии проекта и выберите Run As->RAP Application. Для запуска приложения из командной строки можно воспользоваться следующей подсказкой: запустить приложение в Eclipse, перейти в Debug-Perspective (меню Window->Perspective->Open Perspective->Debug), в окне Debug нажать правой кнопкой мыши на названии процесса и выбрать Properties, в открывшемся диалоге будет строка "Command Line", которую и использовать для запуска приложения


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


Если приложение не стартует из-за ошибок в логе, то перейдите в Run->Run Configurations... , в открывшемся диалоге найдите RAP Application->ru.inttrust.cmj.rap , справа выберите закладку Bundles , нажмите Add Required Bundles, нажмите Validate Bundles , если всё в порядке нажмите Run.


Если при старте приложения появляется "HTTP ERROR 404 ProxyServlet: /e4", то нажмите кнопку "Refresh the current page" (браузер стартует быстрее, чем приложение)


cmj-emf-window_1.png


cmj-emf-window_2.png


cmj-emf-window_3.png


cmj-emf-window_4.png


cmj-emf-window_5.png