Диплом: Разработка среды для модульного программного обеспечения с поддержкой удаленного управления

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
четко обозначенной функциональностью с высокой фокусировкой на
нее.
4. Использование стандартных шаблонов проектирования.
При разработке должны быть использованы инструменты
статического анализа кода. Данный вид анализа применяется без реального
выполнения анализируемых программ [23]. Среди основных инструментов
следует выделить программу Checkstyle.
Checkstyle это программа с открытым исходным кодом (лицензия
LGPL), которая осуществляет проверку Java кода на соответствие
распространенным стандартам. Например, данная программа проверяет:
1. Соответствие полей и методов соглашению о наименованиях (англ.
naming convention).
2. Лимит на количество параметров функции, длину строки.
3. Соответствие рекомендуемым практикам построения класса.
4. Дублирование кода и т.д. [31].
3.2. Среда выполнения приложений Alpha
Среда Alpha является средой выполнения приложений, которая была
реализована в полном соответствии с требованиями, описанными в
предыдущем разделе работы. В данной части работы описывается
техническая сторона реализации и приводятся сведения по использованию
СВП Alpha.
СВП Alpha полностью модульна и состоит из одиннадцати модулей.
Все модули СВП Alpha и межмодульные связи представлены на рисунке
11.
Рисунок 11. Модули СВП Alpha и связи между ними (UML).
Условно, все модули можно разделить на четыре слоя. В первом слое
находятся модули библиотеки логгирования SLF4J. Данные модули
вынесены в самый нижний слой, так как почти все остальные модули
используют библиотеку логгирования. Во втором слое находятся модули
библиотек, которые используются ядром СВП и приложениями СВП.
Третий слой содержит модуль ядра СВП Alpha. Четвертый слой
составляют модули приложений СВП – Alpha RMI Client и Alpha RMI
Server.
Рассмотрим каждый из используемых модулей.
Модуль slf4j.api. Модуль содержит API библиотеки SLF4J (англ.
Simple Logging Facade for Java). Данная библиотека является одной из
самых известных библиотек для логгирования в Java и ее задача
заключается в том, чтобы предоставить одновременно простой и мощный
фасад для различных систем логгирования, таких, как Java Logging,
Logback, Log4j [53]. На физическом уровне модуль представлен файлом
com.techsenger.mix.slf4j-api-1.7.25.jar, который включает в себя
модификацию библиотеки SLF4J для поддержки JPMS слоев,
разработанную компанией Techsenger.
Модуль slf4j.simple. Данный модуль содержит упрощенную систему
логгирования SLF4J, которая используется в тех случаях, когда более
мощные библиотеки, такие, как Log4j и Logback не используются. На
физическом уровне модуль представлен файлом com.techsenger.mix.slf4j-
simple-1.7.25.jar, который включает в себя модификацию для поддержки
JPMS слоев, разработанную компанией Techsenger.
Модуль jcommander. Этот модуль содержит JCommander, который
является очень маленькой Java платформой, упрощающей парсирование
параметров командной строки [41]. Данная платформа использует
аннотации, которые проставляются к полям класса, в которые необходимо
перенести значение параметров, передаваемых из командной строки. На
физическом уровне модуль представлен файлом jcommander-1.71.jar.
Модуль jline. Данный модуль содержит библиотеку JLine, которая
используется для считывания данных консоли [42]. Необходимо отметить,
что стандартная библиотека Java имеет в своем составе классы для работы
с консолью. Однако, данные классы очень ограничены в своих
возможностях. Библиотека JLine расширяет эти возможности за счет
использования библиотек, написанных на Си/С++, которые могут
осуществлять прямой доступ к консоли. Так как данные библиотеки
находятся в .jar файле, то не возникает необходимости в их
дополнительной установке. На физическом уровне модуль представлен
файлом jline-2.14.5.jar.
Модуль com.techsenger.kit.core. Модуль является частью библиотеки
Kit, разработанной российской компанией Techsenger и содержит классы –
инструменты для решения самых распространенных задач. Например, он
содержит классы для работы с коллекциями, файлами, строками и т.п. На
физическом уровне модуль представлен файлом com.techsenger.kit.core-
0.2.0.jar.
Модуль com.techsenger.kit.jpms. Данный модуль является частью
библиотеки Kit и содержит классы для работы c модульной системой для
платформы Java (JPMS). Например, интерфейс ModuleActivator, который
является аналогом интерфейса BundleActivator технологии OSGi,
находится в данном модуле. На физическом уровне модуль представлен
файлом com.techsenger.kit.jpms-0.2.0.jar.
Модуль com.techsenger.kit.rmi. Данный модуль является частью
библиотеки Kit и содержит классы для работы с технологией вызовов
удаленных методов – RMI (англ. Remote Method Invocation). Данная
технология позволяет объектам, находящимся в одной виртуальной
машине Java, вызывать методы объектов, находящихся в другой
виртуальной машине [57]. Модуль содержит классы сервера RMI,
абстрактные классы и интерфейсы для сервисов сервера и т.п. На
физическом уровне модуль представлен файлом com.techsenger.kit.rmi-
0.2.0.jar.
Модуль me.pavel.alpha.core. Этот модуль содержит ядро СВП Alpha.
Пакеты модуля, с описанием их элементов, представлены на рисунке 12.
Как видно, модуль включает в себя четыре пакета. Пакеты
me.pavel.alpha.core, me.pavel.alpha.core.serializable и me.pavel.alpha.core.
exceptions являются открытыми и доступны вне модуля. Пакет
me.pavel.alpha.core.internal является закрытым и недоступен вне модуля.
По рисунку видно, что главным классом является класс Environment. Этот
класс содержит статические поля и методы и выполняет основную логику
СВП. На физическом уровне модуль представлен файлом
me.pavel.alpha.core-0.3.0.jar.
Рисунок 12. Пакеты модуля me.pavel.alpha.core с их элементами и
основными связями между ними (UML).
Модуль me.pavel.alpha.rct. Данный модуль является ключевым
модулем приложения Alpha RMI Client и содержит три пакета, описание
которых представлено на рисунке 13. Пакет me.pavel.alpha.rct.api является
открытым и доступен вне модуля. Пакеты me.pavel.alpha.rct.internal и
me.pavel.alpha.rct.internal.commands является закрытыми и недоступны вне
модуля. Ключевым классом является класс RmiClient который содержит
базовую логику приложения. Классы пакета
me.pavel.alpha.rct.internal.commands содержат логику команд – для каждой
команды существует отдельный класс. Данный модуль содержит Activator,
который запускает и останавливает RmiClient. На физическом уровне
модуль представлен файлом me.pavel.alpha.rct-0.3.0.jar.
Рисунок 13. Пакеты модуля me.pavel.alpha.rct с их элементами и
основными связями между ними (UML).
Модуль me.pavel.alpha.rsd. Данный модуль содержит совместно
используемые (англ. shared) элементы, которые необходимы как
приложению Alpha RMI Client, так и приложению Alpha RMI Server.
Модуль содержит только один пакет, который представлен на рисунке 14.
Очевидно, что данный пакет является открытым и доступен вне модуля.
На физическом уровне модуль представлен файлом me.pavel.alpha.rsd-
0.3.0.jar.
Рисунок 14. Пакет модуля me.pavel.alpha.rsd с его элементами и
основными связями между ними (UML).
Рисунок 15. Пакеты модуля me.pavel.alpha.rsr с их элементами и
основными связями между ними (UML).
Модуль me.pavel.alpha.rsr. Модуль является ключевым модулем
приложения Alpha RMI Server. Пакеты описываемого модуля, с описанием
их элементов, представлены на рисунке 15. По рисунку видно, что модуль
содержит три пакета. Пакет me.pavel.alpha.rsr.api является открытым и
доступен вне модуля. Пакеты me.pavel.alpha.rsr.internal и
me.pavel.alpha.rsr.internal.services является закрытыми и недоступны вне
модуля. Ключевым классом является класс Activator который содержит
базовую логику приложения. Activator запускает и останавливает RMI
сервер и осуществляет регистрацию RMI сервисов данного модуля. На
физическом уровне модуль представлен файлом me.pavel.alpha.rsr-0.3.0.jar.
Как указывалось в первой главе работы для выполнения программы,
написанной на языке Java, необходимо использовать виртуальную машину
Java JVM. Запуск JVM осуществляется через интерфейс командной
строки вызовом команды "java" с передачей ей необходимых параметров.
Если необходимо передавать большое количество параметров, то
разрабатываются специальные скрипты, которые позволяет не вводить эти
параметры вручную при каждом запуске JVM.
Для операционной системы Linux был разработан файл alpha.sh,
который является bash-скриптом (bash это одна из самых популярных
современных командных оболочек Linux [27]). Основа данного скрипта
приведена в листинге 4. В листинге важно отметить следующее. Во-
первых, для работы ядра СВП необходимо пять модулей. Во-вторых, СВП
передается путь, который указывает на нахождение программы в файловой
системе. В-третьих, через параметр me.pavel.alpha.core.applications
передается список приложений, которые необходимо запустить после
запуска СВП.
#!/bin/bash
ROOT_PATH="$(dirname "$0")/.."
modules=(
com.techsenger.mix.slf4j-api-1.7.25.jar
com.techsenger.mix.slf4j-simple-1.7.25.jar
com.techsenger.kit.core-0.2.0.jar
com.techsenger.kit.jpms-0.2.0.jar
me.pavel.alpha.core-0.3.0.jar
)
MODULE_PATH=""
for m in "${modules[@]}"
do
MODULE_PATH=${MODULE_PATH}:"$ROOT_PATH/jar/${m}"
done
java \
...
-Dme.pavel.alpha.core.root-path="$ROOT_PATH" \
-Dme.pavel.alpha.core.applications="me.pavel.alpha.server-
0.3.0, me.pavel.alpha.client-0.3.0" \
--add-modules ALL-DEFAULT --module-path $MODULE_PATH \
-m me.pavel.alpha.core/me.pavel.alpha.core.internal.Launcher
Листинг 4. Основа скрипта alpha.sh.
Для идентификации приложения СВП необходимо указать название
приложения и его версию. На основе этих параметров ядро СВП
определяет имя файла, который содержит XML-дескриптор приложения.
Например, если название приложения me.pavel.alpha.server и версия 0.3.0,
то файл дескриптора приложения будет me.pavel.alpha.server-0.3.0.apl в
папке conf.
Рассмотрим дескрипторы приложений Alpha RMI Client и Alpha RMI
Server, которые приведены в листинге 4 и 5 соответственно. Из данных
листингов видно, что дескриптор содержит два основных блока. Блок
<modules> предназначен для того, чтобы указать все модули, которые
необходимы приложению. Блок <logging> позволяет для каждого
приложения устанавливать свои настройки логгирования. Также следует
отметить, что дескриптор позволяет устанавливать использование
активатора СВП. Если атрибут activator-enabled тега <module> имеет
значение true, то СВП будет использовать данный активатор для запуска и
остановки модуля. В противном случае, СВП будет игнорировать
активатор.
<?xml version="1.0" encoding="UTF-8" ?>
<application>
<modules>
<module file="jcommander-1.71.jar"/>
<module file="jline-2.14.5.jar"/>
<module file="com.techsenger.kit.rmi-0.2.0.jar"/>
<module file="me.pavel.alpha.rsd-0.3.0.jar"/>
<module file="me.pavel.alpha.rct-0.3.0.jar" activator-
enabled="true"/>
</modules>
<logging level="debug" destination="file"/>
</application>
Листинг 5. Дескриптор приложения Alpha RMI Client.
<?xml version="1.0" encoding="UTF-8" ?>
<application>
<modules>
<module file="com.techsenger.kit.rmi-0.2.0.jar"/>
<module file="me.pavel.alpha.rsd-0.3.0.jar"/>
<module file="me.pavel.alpha.rsr-0.3.0.jar" activator-
enabled="true"/>
</modules>
<logging level="debug" destination="file"/>
</application>
Листинг 6. Дескриптор приложения Alpha RMI Server.
Сделав технический обзор СВП и приложений, перейдем к
рассмотрению работы с ними с точки зрения пользователя. Отметим, что в
дальнейшем подразумевается, что приложения Alpha RMI Client и Alpha
RMI Server работают в одной виртуальной машине и запуск этих
приложений осуществляется сразу после запуска СВП.
Для запуска СВП Alpha и приложений нужно запустить bash-скрипт
alpha.sh, который находится в папке bin. В результате, на экране появится
приглашение командной строки alpha>, после которой можно вводить
команды.
Приложения поддерживают четырнадцать команд. Название каждой
команды состоит из двух слов, разделенных символов двоеточия. Первое
слово команды является существительным и означает объект, над которым
будет выполняться действие. Второе слово команды является глаголом и
означает действие. Некоторые команды для своей работы требуют опции, о

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран