# Структура приложения

Технологическая платформа приложения, основой которой является «JaBricks», предназначена для формирования многомодульного приложения согласно спецификации OSGi. Платформа «JaBricks» содержит библиотеки с интерфейсными компонентами, утилиты межмодульного взаимодействия и использования различных типов баз данных, а также шаблоны для создания независимых программных модулей/бандлов в едином интерфейсе. Функциональные свойства приложения определяются набором включенных в конфигурацию программных модулей, и могут быть изменены и расширены без дополнительной компиляции.

Структура приложения, представленная на скриншоте проводника, включает следующие директории и файлы :

• bundles-cache | автоматически формируемая OSGi-фреймворком директория;
• configuration | конфигурации приложения;
| ⋆ resources | директория ресурсов;
| ⋆ bundles.ini | файл со списком инсталлируемых модулей;
| ⋆ menu-main.xml | файл с описанием структуры главного меню приложения;
| ⋆ style.txt | стиль представления компонентов интерфейса.
• data.init | директория с файлами инициализации БД (может отсутствовать);
• db | база данных Derby (может отсутствовать);
• doc | директория с документацией приложения;
• gui | директория хранения интерфейсных настроек компонентов модулей;
• images | директория хранения файлов изображений;
• logs | директория логирования сообщений бандлов (может отсутствовать);
• modules | директория модулей/бандлов;
• tmp | директория временных файлов (может отсутствовать);
• jabricks.ini | файл инициализации приложения;
• jabricks-1.0.3.5.exe | главный исполняемый модуль приложения для Windows;
• jabricks-1.0.3.jar | главный исполняемый модуль приложения с использованием JVM;
• run.bat | пакетный файл старта приложения из консоли.

### Главный модуль

Главные исполняемые модули jabricks-1.0.3.jar и jabricks-1.0.3.5.exe созданы с использованием фреймворка org.apache.felix.framework. Исполняемый модуль jabricks-1.0.3.5.exe создан для ОС Windows на основе jabricks-1.0.3.jar и позволяет только логировать сообщения в файл. Исполняемый модуль jabricks.jar-1.0.3 может функционировать как в среде Windows, так и в Linux. Кроме этого он позволяет выводить сообщения логирования дополнительно в консоль.

run.bat
Файл run.bat, включенный в пакет приложения, предназначен для старта главного модуля jabricks-1.0.3.jar из консоли в среде Windows, в которую выводятся сообщения логирования. В большей степени это касается разработчиков приложения.

Файл инициализации jabricks.ini
В файле инициализации приложения определены следующие параметры :
∘ язык локализации приложения;
∘ формат представления даты;
∘ количество записей на странице для таблиц с панелью навигации;
∘ логирование сообщений (консоль, файл);
∘ параметры подключения к серверу БД.

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

Язык локализации приложения
Главное приложение и интерфейсные модули локализованы для трех языков : русский (ru_RU), английский (en_US) и немецкий (de_De). В файле инициализации список языков локализации определен параметром locale. Текущее значение языка локализации определяется параметром lang. Интерфейсные модули хранят ресурсные файлы у себя в модуле. Внешние ресурсные файлы хранятся в конфигурации приложения "/configuration/resources/" и включают как изображения (/images), так и локализованные тексты (/properties). Текстовые ресурсы используются для локализации Меню приложения. Ниже представлены строки файла инициализации, касающиеся языков локализации.

    lang=ru
    locale=ru_RU,en_US,de_De

Формат представления даты
Стиль представления даты в модулях приложения определяется в файле инициализации параметром date.format, включающего символы «dd» (день, 00-31), «MM» (месяц, 01-12) и «yyyy» (год, 4-х значное число). В качестве разделителей может использовать как символ точка, так минус. Пример определения формата в файле инициализации :

    date.format=dd.MM.yyyy

Количество записей на странице

Для интерфейсных модулей, использующих таблицу с навигатором для постраничного просмотра данных, количество записей на странице определяется параметром page.records файла инициализации.

    page.records=40

Логирование сообщений
Для вывода сообщений модулей в консоль и/или в файл необходимо подключить Модуль логирования. В файле инициализации логический параметр log.file определяет вывод сообщений в файл; параметр log.console – в консоль. Параметр log.level определяет типы сообщений. Программисты могут использовать свой тип сообщений для разработки и отладки. В следующем примере определен вывод в консоль следующих типов сообщений : OSGi, Info, SQL.

    # util-logger
    log.file=false
    log.console=true
    log.level=OSGi,Info,SQL

Подключение к серверу БД
В зависимости от используемого типа SQL-сервера базы данных следует подключить соответствующий JDBC-драйвер и модуль взаимодействия. В файле инициализации определяются параметры подключения к серверу. Пример подключения к серверу Apache Derby можно увидеть здесь. Полное описание, JDBC-драйверы и модули взаимодействия представлены здесь

## Директория bundles-cache

OSGi-фреймворк org.apache.felix.framework, включенный в главный модуль, автоматически формирует директорию bundles-cache.

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

Функциональные свойства приложения определяются его конфигурацией, включающую набор модулей/бандлов, ресурсные файлы, файл меню приложения. Используемые в приложении модули размещаются в директории «modules». Согласно спецификации OSGi допускается использование однотипных по функционалу бандлов разных версий.

Размещение модуля в директории «modules» является необходимым, но недостаточным условием включения модуля в приложение. Бандл необходимо дополнительно зарегистрировать в конфигурации приложения. Список модулей, включаемых в приложение, регистрируется в файле «configuration/bundles.ini». Формат записи – ключ=значение; bundles является ключом, а список бандлов, разделенных запятыми — значением. В качестве разделителя строк можно использовать символ переноса '\'. Бандл может включать атрибуты (@start, @dynamic), определяющие необходимость его старта после инсталляции или динамическую загрузку при обращении (вызове). Подробнее об этом можно прочитать здесь.

На заметку. Все модули приложения включают цифровую подпись.

Структура Меню приложения описывается в XML-файле menu-main.xml. Структура описания меню и формат тегов подробно рассмотрены здесь.

Ресурсы приложения располагаются в директории «configuration/resources/» и включают изображения (поддиректория /images) и текстовые файлы (поддиректория /properties). Текстовые ресурсы используются для локализации пунктов меню приложения.

## Директория data.init

В директории data.init располагаются файлы инициализации справочной информации и примеров. Эти данные необходимы на начальном этапе установки приложения. Внешние файлы со справочной информацией, а также файлы с примерами, используются модулем инициализации для записи в БД. Директория data.init входит в пакет приложения, но не является обязательной. После инсталляции справочной информации директорию можно удалить.

### Директория db

База данных Apache Derby, представленная в директории db, может быть использована для демонстрации и отладки модулей приложения. Подключение приложения к базе данных Derby представлено здесь. Для работы с SQL-сервером необходимо в приложении подключить соответствующий модуль взаимодействия.

СУБД Apache Derby, в отличие от других SQL серверов, функционирует под управлением JVM. При использовании Derby имеется возможность выполнить либо сетевое (многопользовательское) подключение к серверу, либо монопольное подключение. Во втором случае сервер Derby работает в режиме "EmbeddedDriver" и запускается под управлением виртуальной машины JVM вместе с приложением.

### Директория doc

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

### Директория gui

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

### Директория images

В директории images хранятся файлы изображений, используемыми модулями приложения. Так, например, поддиректория images/flags используется Классификатором ОКСМ для хранения флагов стран.

### Директория logs

При установке в файле инициализации флага логирования, сообщения модулей будут сохраняться в текстовые файлы (.txt) в директории logs.