Начало работы с фреймворком
Contents
Начало работы с фреймворком#
Требования к аппаратному обеспечению рабочего места разработчика#
Характеристика сервера |
Рекомендуемые параметры |
---|---|
ОС |
Windows 10 и выше |
CPU |
8 ядер 3.5 GHz или более |
Оперативная память |
16 – 32 Gb или более |
Память |
SSD 20 Gb свободного места |
Монитор |
разрешение 1920×1080 |
Использование виртуальной машины может заметно снизить производительность при сборке и отладки проекта
Создание новой БД для проекта#
Для создания базы данных используется команда CREATE DATABASE
, после которой указывается название базы данных.
Для выполнения запросов будем использовать графический клиент pgAdmin, хотя также можно использовать консольный клиент psql.
Создадим для проекта нового пользователя бд и базу данных, например:
Логин: sampleproject
Пароль: sampleproject
БД: sampleproject
Чтобы создать нового пользователя и новую БД:
Откройте pgAdmin.
Подключитесь под суперпользователем к СУБД.
В левой части программы выберите базу данных
postgres
Выделите ее и правой кнопкой мыши запустите инструмент Query Tool
Создание пользователя#
В центральной части программы откроется поле для ввода кода SQL.
В окно запроса введите следующий код:
CREATE ROLE sampleproject WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD 'sampleproject'; GRANT pg_signal_backend TO "sampleproject";
Для создания пользователя выполним операцию
Execute/refresh
.
Создание БД#
В окно запроса введите следующий код:
CREATE DATABASE "sampleproject" WITH OWNER = "sampleproject" ENCODING = 'UTF8' CONNECTION LIMIT = -1;
Для создания выполните операцию
Execute/refresh
.
Подключение расширений#
К созданной БД необходимо подключить расширения, которые использует система Global
.
Для этого:
Обновите список баз
В левой части программы выберите базу данных
sampleproject
Выделите ее и правой кнопкой мыши запустите инструмент Query Tool
В окно запроса введите следующий код:
CREATE EXTENSION if not exists plpgsql; CREATE EXTENSION if not exists fuzzystrmatch; CREATE EXTENSION if not exists pg_trgm; CREATE EXTENSION if not exists pg_stat_statements; CREATE EXTENSION if not exists "uuid-ossp"; CREATE EXTENSION if not exists dict_xsyn; CREATE EXTENSION if not exists ltree;
Для подключения расширений выполните операцию
Execute/refresh
.
Настройка рабочего места#
Установка#
Установите IntelliJ IDEA Community Edition
Установите в IDE IntelliJ IDEA SCALA Plugin
Установите Global3FrameworkStarterKit
Распакуйте архив с дистрибутивом сервера приложений
globalserver.zip
в директориюC:\Global3se
Скорипуйте проект в директорию
C:\Projects\projectName
Настройка переменных окружения Windows#
Добавьте переменные окружения Windows:
G3_HOME = C:\Global3se
Путь к каталогу, в который разархивирован дистрибутив Global 3SEG3_PUBLISH = C:\Global3se\application
Путь к каталогу, в который будет производиться сборка проекта
Настройка проекта#
Настройку проекта можно сделать в ручном и автоматическом режиме с помощью gsf-cli - утилиты командной строки Global System Framework
Развертывание вручную#
Откройте в IDE
Intellij Idea
проект
Для примера будем использовать путь:C:\Projects\SampleProject\application
Откройте файл
C:\Projects\SampleProject\application\project\orm\config\persistence.xml
Поменяйте параметры соединения с БД Postgres проекта для
persistence-unit
pgdev
: \<property name="eclipselink.jdbc.url" value="jdbc:postgresql://pgProject:5432/sampleProject"/> <property name="eclipselink.jdbc.driver" value="org.postgresql.Driver"/> <property name="eclipselink.jdbc.user" value="sampleproject"/> <property name="eclipselink.jdbc.password" value="sampleproject"/>
Где:
eclipselink.jdbc.url
– строка соединения
eclipselink.jdbc.driver
– драйвер jdbc
eclipselink.jdbc.user
– пользователь бд
eclipselink.jdbc.password
– пароль
Конфигурация Global Server#
Перед запуском Global Server необходимо добавить информацию о проекте в конфигурационный файл. Для этого:
Откройте файл
C:\Global3se\application\config\global3.config.xml
в текстовом редактореВ раздел
databases
добавьте новую базу данных<?xml version="1.0"?> <database alias="SampleProject" driver="org.postgresql.Driver" schema="PUBLIC" url="jdbc:postgresql://pg12:5432/sampleProject" connectionType="proxyShared" authenticationType="btk"> <users> <!--user определяет схему--> <user name="sampleProject" password="sampleProject"/> </users> <metaManager mode="Xml" defaultNamespace="ru.bitec.app.btk" sbtName="SampleProject_sbt"/> <eclipseLink persistenceUnitName="pgdev" autoCommit="false"/> </database>
В раздел
sbts
добавьте конфигурацию sbt<sbt name="SampleProject_sbt" source="C:\Projects\SampleProject\application" sourceMode="Dev" sbtMode="External" gitPullOnSbtStart="false" binaryFolder="c:\Global3se\application\appbin" > </sbt>
В разделе
development
включить режим конфигуратора<development> <!--enabled - режим отладки. Делает видимым панель отладки в главном меню приложения--> <debugMode enabled="true"/> <!--enabled - Доступность флага "Конфигуратор" в диалоге подключения--> <configurator enabled="true"/> </development>
gsf-cli - утилита командной строки Global System Framework#
gsf-cli - утилита командной строки Global System Framework предназначена для автоматизации работы разработчика
Инструкция по развертыванию проекта в автоматическом режиме Командная утилита G3Server
Прикладной проект#
Прикладной проект собирает конечное решение из набора прикладных модулей. Собранное решение разворачивается не сервере приложения для работы с пользователями.
Структура проекта#
Проект(Application)
build.sbt
Настройка сборки проектаproject
Дополнительные настройки проектамодуль
src.main.java
src.main.scala
ru.bitec.app.[модуль]
Файлы модуля компилируемые языком scala
src.main.resources
META-INF\module-info.xml
Мета данные о модулеru.bitec.app.[модуль]
Файлы модуля не требующие компиляции
build.sbt
Файл сборки модуля
модуль_N
модуль_N+1
Внимание
ru.bitec.app.[moduleName]
– это отдельные каталоги!
Точка в именах директорий запрещена! IDE Intellij Idea в обозревателе проекта группирует каталоги через точку для удобства просмотра
Модуль#
Каждый модуль представлен как отдельная директория со строго заданной системой подкаталогов.
Для включения модуля в сборку необходимо объявить его и включить в агрегацию в корневом build.sbt проекта application.
Модуль представляет собой некоторую неделимую совокупность функциональности системы, которая может быть включена в то или инной прикладной проект.
Каждый объект, зарегистрированный в системе, принадлежит какому-либо модулю.
Основными составляющими модуля являются классы, выборки и серверные методы, группированные в пакеты.
Структура каталогов модуля#
[moduleName]
Директория модуля разбита на строгую иерархию:
[moduleName]/src/main/java/ru/bitec/app/[moduleName]
Содержит java сущности модуля: pojo классов, перечисления и т.д. Чаще всего сущности создаются автоматически генератором кода.[moduleName]/src/main/resources/META-INF
Содержит метаинформацию модуля: Описание, версию, зависимости, перечень приложений.[moduleName]/src/main/resources/orm
Содержит индексные файлы ORM.[moduleName]/src/main/resources/ru/bitec/app/[moduleName]
Содержит файлы моделей Odm, Orm, Dvm, Avm[moduleName]/src/main/scala/ru/bitec/app/[moduleName]
Содержит файлы прикладной бизнес-логики и контроллера view, пакетов: Dvi, Dpi, Api, Avi, Pkg[moduleName]/src/test/scala/ru/bitec/app/[moduleName]
Содержит юнит-тесты прикладных методов
Зависимости#
Модуль может использовать или требовать наличия некоторого набора других модулей. Это требование выражается в том, что объекты, или функциональность, заложенная в модуль, не будут работать в случае отсутствия в системе другого, требуемого модуля.
Зависимости позволяют увеличить повторное использование кода, за счет выделение частно используемого функционала в низкоуровневые модули.
Базовые модули:
gtk
Обеспечивает интеграцию с сервером приложенияbtk
Основная функциональность фреймворка, доступная всем более высокоуровневым модулям.
Эти модули не требуют для своей работы наличия других модулей, являясь платформой системы.
Зависимость модулей описывается в файле настроек сборки build.sbt для модуля.
Подключение внешних библиотек#
Допускается подключение к прикладным модулям внешних библиотек (*.jar
).
В файле build.sbt прикладного проекта необходимо прописать зависимость
модуля от этих библиотек.
lazy val bts = project.
dependsOn(btk).
settings(CommonSetting.setting: _*).
settings(
libraryDependencies ++= Seq(
"org.apache.httpcomponents" % "httpmime" % "4.5.2",
"org.apache.httpcomponents" % "httpcore" % "4.4.5",
"org.apache.httpcomponents" % "httpclient" % "4.5.2" )
)
Если подключаемая библиотека опубликована в нестандартном репозитории, необходимо объявить путь к этому репозиторию.
lazy val btk = project.
dependsOn(gtk).
settings(commonSettings: _*).
settings(
resolvers += "nuiton-maven" at
"https://nexus.nuiton.org/nexus/content/groups/releases/",
libraryDependencies += "nl.knaw.dans.common" % "dans-dbf-lib" % "1.0.0-beta-10"
)
Если объявить зависимость с двумя символами «%», в качестве разделителя:
"nl.knaw.dans.common" %% "dans-dbf-lib" % "1.0.0-beta-10"
к имени библиотеки будет добавляться суффикс с версией scala.
Все библиотеки зависимостей из списка «libraryDependencies» копируются в
каталог .commonlib
.
За формирование каталога .commonlib
отвечают
sbt-задания publishLibDependencies
и publishDevDependencies
, выполняемые
в зависимости от режима сборки проекта автоматически или вручную.
Внимание
При выполнении sbt задачи publishDevDependencies
в Intellij Idea
может выдаваться ошибка вида:
[error] download error: Caught javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
(sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target) while downloading
https://ivy.global-system.ru/
Ошибка проверки возникает из-за того, что в хранилище доверенных корневых сертификатов Java нет CA-сертификата промежуточного сервера для let’s encrypt.
Исправить ошибку можно следующим образом:
Добавить сертификат в стандартное хранилище доверенных CA-сертификатов
Для Java приложений сгенерировать новый CA-сертификат R3 для Let’s Encrypt можно с помощью утилиты keytool.
Java Keytool — это инструмент командной строки, который может генерировать пары открытый ключ / закрытый ключ и сохранять их в хранилище ключей. Исполняемый файл утилиты распространяется вместе с Java SDK (или JRE)
пример использования:keytool -importcert -file mycertfile.pem -keystore cacerts -alias "Alias"
Стандартный пароль хранилища: changeit
Заменяем хранилище
C:\Program Files\Java\jdk[версия]\jre\lib\security\cacerts
файлом из архиваGlobal3FrameworkStarterKit.zip
Первая сборка проекта#
Когда проект открывается впервые IDE Intellij Idea проиндексирует его состав и выполнит обновление sbt проекта. После этого необходимо выполнить агрегацию библиотек проекта и собрать проект.
Дождитесь окончания инициализации проекта и индексации исходного кода
Обновите sbt проект
Выполните агрегацию библиотек проекта
Для этого запустите на панели sbt задачуpublishDevDependencies
При этом sbt задача просканирует проект на наличие зависимостей и сформирует в корне проекта каталог.commonlib
со всеми необходимыми библиотеками.Внимание
При выполнении sbt задачи
publishDevDependencies
в Intellij Idea может выдаваться ошибка вида:[error] download error: Caught javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target) while downloading https://ivy.global-system.ru/
Ошибка проверки возникает из-за того, что в хранилище доверенных корневых сертификатов Java нет CA-сертификата промежуточного сервера для let’s encrypt.
Для исправления ошибки замините хранилищеC:\Program Files\Java\jdk\[версия]\jre\lib\security\cacerts
файлом из архиваGlobal3FrameworkStarterKit.zip
Выполнить сборку проекта: Build | Build Project
Развертывание первоначальных данных#
Для генерации начальных данных в БД проекта необходимо провести успешную сборку проекта и запустить утилиту создания таблиц.
Если требуется сборка проекта, выполните команду
Build project
Пункт меню Intellij Idea:Build > Build Project
После сборки проекта запустите генерацию таблиц
В обозревателе проекта Intellij Idea вызовите контекстное меню на корневой директории проектаapplication
пунктExternal Tolls > Generate tables
При этом происходит создание таблиц схемы, установка начальных данных и создается пользователь admin с полными правами(пароль admin)
После этого конфигурация готова для разработки.
Запуск приложения#
Для запуска и отладки приложения вам необходимо ознакомиться с основными принципами запуска и отладки в idea
Для отладки проекта:
Выберите в выпадающем списке конфигураций запуска
Global 3 SE
Данная конфигурация создается автоматически дополнительным плагином. Конфигурация появляется при следующем запуске idea. В случаи если плагин не установлен, конфигурацию для запуска необходимо создать вручную.Выполните Debug
Global 3 SE
Подключитесь к запущенному серверу
Для этого откройет браузер по адресуhttp://localhost:8080/
При этом в консоли будет выводиться лог работы сервера.
При запуске не должно быть сообщений с типом [ERROR]
или стеков ошибок.
Регистрация#
При первом запуске система Global Postgres потребует зарегистрировать БД Для регистрации базы данных.
Сформируйте файл запроса лицензии
Для формирования файла запроса лицензии необходимо нажать на кнопку «Сформировать и скачать файл запроса лицензии».Запросите лицензионный файл
Сформированный файл запроса лицензии вместе с заявкой на регистрацию отправьте по электронной почте контактному лицу ООО «Бизнес-Технологии». В заявке рекомендуется указать имена модулей, которые будут созданы.Зарегистрируйте лицензию
Для этого в диалоге требования регистрации нажмите на кнопкуУстановить лицензионный файл
, и выберете полученный файл в открывшемся диалоге.
Отладка приложений#
Для отладки прикладного кода:
Откройте файл с кодом для отладки
Установите точку остановки на требуемой строке
Откройте приложение в браузере и выполните отлаживаемое действие
Выполнение программы будет остановлено на отмеченной строке.
Отладка бизнес-логики#
Для отладки и тестирования кода Dpi/Api-классов можно воспользоваться
Unit-тестами. Для этого, в каталоге с тестами соответствующего модуля
создайте класс, унаследованный от ru.bitec.app.gtk.eclipse.api.ApiTest
.
Смотрите пример: ru.bitec.app.cur.Cur_CurrencyTest
Перекомпиляция кода без перезапуска сервера#
При отладке приложений, в большинстве случаев, нет необходимости перезапуска веб-сервера при внесении изменений в код любого модуля проекта Application. Для применения изменений необходимо:
Выключите кэш
Выполните пункт менюФайл \ Использовать кэш
в отлаживаемом приложенииСкомпилируйте изменённый модуль
Compile module
в контекстном меню модуля илиBuild project
на панели инструментов. В отдельных случаях можно компилировать отдельный класс.Обновите приложение
В главном меню отлаживаемого приложения выполнитьФайл \ SBT \ Обновить и переоткрыть текущую форму
Повторите отлаживаемое действие.
Отладка выборки#
Для отладки пользовательских интерфейсов предусмотрен специальный
инструмент Selection debug window
. Вызвать его можно в любом месте
системы с помощью сочетания клавиш ctrl+alt+shift+W
.