4
УДК 004.4'2
А.В. Григорьева, В.А. Васильев, В.О. Сафонов
ПРИМЕНЕНИЕ ЭЛЕМЕНТОВ АСПЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА ASPECT.NET ПРИ РАЗРАБОТКЕ ГЕОЛОКАЦИОННОЙ СИСТЕМЫ УПРАВЛЕНИЯ РЕСУРСАМИ ДЛЯ ОБЛАЧНОЙ ПЛАТФОРМЫ
MICROSOFT WINDOWS AZuRE
В связи с растущими темпами производства и развитием глобальных коммуникационных сетей задача учета ресурсов и управления ими становится все более важной. Возросла также необходимость в получении и обработке данных о состоянии и географическом положении ресурсов в реальном времени. В данной статье рассматривается применение элементов аспектно-ориентированного подхода ASPECT.NET при разработке открытой геолокационной системы управления ресурсами, которая позволит получать данные о местоположении ресурсов в реальном времени, а также оперативно реагировать на изменения с помощью сложной бизнес-логики правил и отчетов, тем самым эффективно решая задачу управления ресурсами.
Данный проект является исследовательским и находится на ранней стадии, которая характеризуется высокой изменчивостью пользовательских требований к системе [1].
Архитектурно разрабатываемая геолокационная система управления ресурсами представляет собой сложное объектно-ориентированное приложение, разворачиваемое c помощью облачной платформы Microsoft Windows Azure [2]. Важная отличительная особенность разрабатываемой системы - возможность гибкой настройки конфигурации на конкретного пользователя, что позволит создавать специальные правила для управления конкретными ресурсами и получать разнообразные отчеты в реальном времени. Для этого система логически разделена на два слабо связанных между собой модуля: модуль взаимодействия с ресурсами и устройствами, позволяющий прозрачно для системы добавлять и отключать различные устройства и получать данные от них, и модуль управления, ответственный за создание и редактирование новых ресурсов, создание правил, отчетов, настройку конфигурации,
управление устройствами и пользователями.
Модуль управления представляет собой трехслойную структуру, состоящую из следующих компонентов:
• слой пользовательского интерфейса и визуализации, который содержит динамические вебстраницы и компоненты для пользовательского интерфейса, а также набор кросс-платформенных веб-служб для поддержки доступа к основным функциям системы из произвольного клиентского приложения;
• слой бизнес-логики, который содержит реализацию основных функций системы, таких, как управление пользователями системы (создание, редактирование пользователей и пользовательских групп, назначение администраторов); управление ресурсами (создание, редактирование ресурсов и групп ресурсов); управление правилами (создание правил и настройка их периодичности); управление отчетами (создание, редактирование и трансформация отчетов); мониторинг и отслеживание ресурсов;
• слой доступа к данным, который содержит в себе классы для реализации доступа к различным источникам данных (SQL-источники данных, NoSQL-источники данных, кэши) и данные о сущностях системы (ресурсы, устройства, пользователи, аккаунты и т. д.).
Модуль взаимодействия с ресурсами и устройствами представляет собой отдельный независимый компонент для работы с устройствами. Любой ресурс в системе представляет определенное устройство в реальном мире (например, это может быть датчик температуры, скорости, GPS-датчик, и т. д.), которое передает данные о своем состоянии в систему. Важная отличительная особенность системы - возможность работы с различными типами устройств без необходимости сложной настройки соедине-
ния. Для достижения этой цели реализована концепция «драйверов» для различных устройств. Архитектурно модуль состоит из трех важных частей:
• кластера серверов, «слушающих» различные порты и принимающих данные от устройств;
• драйверов, получающих данные от конкретных устройств по определенному протоколу и передающих их на сервер;
• подсистемы связывания и передачи данных от устройств в модуль управления для дальнейшей обработки, реализующей слабое связывание между двумя модулями посредством использования единых источников данных
Таким образом, схематично процесс добавления нового устройства в систему выглядит следующим образом: пользователь создает ресурс - логическое представление устройства, определяет для него группу, настраивает для него правила (например, отображать ресурс на карте или отсылать письмо при поступлении данных от устройства) и отчеты. Затем пользователь определяет адрес и порт сервера, который будет принимать сообщения от устройства, и выбирает нужный драйвер. После этого при поступлении данных от устройства система будет автоматически применять правила и настройки, тем самым выдавая информацию в реальном времени. Взаимодействие с устройствами происходит в основном посредством XML-сообщений, что упрощает процесс обмена данными и позволяет легко добавлять в систему новые устройства. При необходимости добавить устройство нового типа, можно просто реализовать драйвер, который будет трансформировать данные от устройства в XML-формат и отправлять их на сервер.
Объектно-ориентированная методология позволяет добиться хорошего уровня декомпозиции распределенной облачной системы. Но, в свою очередь, применение объектно-ориентированной методологии программирования привнесло в создание облачных приложений традиционные проблемы «сквозной функциональности» (cross-cutting concerns), когда один компонент отвечает за реализацию
public class AzureTrace: Aspect {
//Строка для установки соединения с хранилищем Azure const string DiagnosticsConnectionString = "...";
нескольких функций [3]. Например, в веб-службе часто перемешиваются бизнес-логика, требования безопасности, кэширование, протоколирование и пр. Аспектно-ориентированное программирование (АОП) предлагает решать проблему «сквозной функциональности» вынесением каждой задачи в свой модуль - аспект. Нужное поведение целевой программы достигается за счет вставки действий аспекта в заданные точки на этапе компиляции или в процессе выполнения.
Компания Microsoft позиционирует Enterprise Library (EL) [4] как набор наиболее удачных архитектурных решений, применимых в большинстве программных систем. По сравнению с динамическим применением аспектов в EL, когда во время выполнения программы среда .NET создает прокси-объекты в заданных местах, Aspect.NET [5] вплетает действия на уровне MSIL-инструкций после этапа компиляции целевой сборки, что влечет повышение производительности целевого приложения. Достоинствами библиотеки EL является встроенная поддержка со стороны среды выполнения .NET, а также возможность настройки аспектов без компиляции через конфигурационные XML-файлы. Однако при работе с облачными вычислениями перекомпиляция для внедрения аспектов не вызывает трудностей, т. к. развертывание целевой системы осуществляется лишь один раз. Более того, такая «пост-обработка» дает возможность выбирать конкретные места применения действий аспектов. Наконец, Aspect.NET не требует вносить изменения в исходный код целевого приложения, т. е. целевой проект будет полностью изолирован от аспектов.
В работе предложены решения в виде аспектов Aspect.NET для следующих задач в рамках предметной области:
1. Протоколирование. Этот аспект перехватывает в целевом коде все вызовы метода System. TraceInformation() и перенаправляет их данные в хранилище диагностической информации Azure, что позволяет просматривать и обрабатывать ее с помощью специальных инструментальных средств.
4
//Настраиваем и запускаем диагностику Azure внутри метода WebRole.OnStart() [AspectAction(«%before %call *RoleEntryPoint.OnStart()»)] static public void RegisterAzureDiagnostics() { try {
CloudStorageAccount storage =
CloudStorageAccount.Parse(DiagnosticsConnectionString); DiagnosticMonitorConfiguration diagnosticConfig =
DiagnosticMonitor.GetDefaultInitialConfiguration();
//.. .Настраиваем diagnosticConfig DiagnosticMonitor.Start(storage, diagnosticConfig);
}
catch (Exception e) {
//.Сообщаем об исключении с указанием вызвавшего его целевого метода
}
}
//Перед каждым вызовом TraceInformation() убеждаемся, что соотв. Azure-подписчик //зарегистрирован
[AspectAction(«%before %call *System.Diagnostics.Trace.TraceInformation»)] public static void AspectTrace() {
//Если его еще нет в списке подписчиков, то добавляем в этот список. if (!ContainsWADListener()) {
System.Diagnostics.Trace.Listeners.Add(
new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener()); System.Diagnostics.Trace.AutoFlush = true;
}
}
2. Прозрачная интеграция сторонних инструментов. Для платформы .NET разработано множество библиотек, каркасов и инструментов, таких, как PostSharp [6], MS Code Contracts [7], MS EL и пр., предоставляющих полезные технические сервисы и службы. Однако их интеграция в целевое приложение приводит к изменениям в исходном коде, что нежелательно при быстром прототипи-ровании, когда необходимо удалить или заменить
данную подсистему. Например, в целях эксперимента было решено использовать для протоколирования при нажатии кнопки на странице веб-роли ResourcesView метод Mюшsoft.Practices. EnterpriseLibrary.Logging.LoggerO. С помощью Aspect.NET можно создать аспект, к которому подключаются все соответствующие сторонние сборки EL, а затем с помощью его действий вставить нужный код в целевое приложение:
[ReplaceBaseClassy/Подменяет целевой класс ResourcesView данным наследником public class ELLogger : ResourcesView {
protected void LogButton_Click(object sender, EventArgs e) {
Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write(«Message from the Logging
Application Block»);
base.LogButton_Click(sender, e);
}
3. Обработка исключений. Если при обращении к некоторому веб-сервису возникает исключительная ситуация, аспект посылает ему еще не-
сколько запросов по таймауту. В случае неудачи данные запрашиваются у запасного веб-сервиса. Вся служебная информация, в т. ч. стек, отсыла-
ется в службу протоколирования Azure. Рассмотрим пример взаимодействия клиентского приложения, которое для получения данных (например, списка доступных ресурсов) использует облачную веб-службу, а затем визуально отображает
их. Вызов данной службы происходит в обработчике щелчка мыши Ьийоп1^оке_СНск по кнопке формы на локальной машине, а в виде результата она возвращает текст. Сам принцип применим и для взаимодействия служб в облаке.
public class ExceptionCatcher : Aspect {
//Задаем правила, куда вставлять это действие [AspectAction(«%instead %call *buttonInvoke_Click(...) && args(..)»)] public static void RepairAction(object sender, EventArgs e) { int count=0; Exception servEx=null; while(count++<3) { try {
//Пытаемся вызвать сервис несколько раз Target.buttonInvoke_Click(sender,e); } catch {Exception e) { servEx=e;
}
}
if (servEx!=null) { try {
GetAvailableResources2();//Пытаемся вызвать запасной сервис } catch {Exception e) {/*...*/}
}
public static void GetAvailableResources2 () {
AvailableResourcesClient2 client = new AvailableResourcesClient2();
string result = client.GetData();
MessageBox.Show(result);
}
}
4. Кэширование. Предложен аспект, действия которого подменяют целевой метод, загружающий данные из MS SQL Azure, и сохраняют их в распределенном кэше Microsoft.ApplicationServer. Caching.DataCacheFactory. В целевое приложение можно встроить управляющий кэшем веб-компонент, который также содержится в сборке этого аспекта.
5. Управление конфигурацией MS Azure. С помощью счетчиков производительности платформы аспект постоянно отслеживает текущую
загрузку и по необходимости подключает или отключает новые вычислительные узлы, тем самым экономя денежные затраты клиента.
Применение АОП и системы Aspect.NET при разработке облачной геолокационной системы управления ресурсами позволяет повысить легкость ее сопровождения, увеличить скорость разработки и снизить затраты за счет повторного использования универсальных аспектов.
СПИСОК ЛИТЕРАТУРЫ
1. Ларман, К. Применение UML и шаблонов проектирования [Текст] / К. Ларман. -М.: Изд-во «Вильямс». -47 с.
2. Сайт проекта MS Windows Azure [Электронный ресурс] / Режим доступа: http://www. windowsazure.com
3. Safonov, V.O. Using aspect-oriented programming for trustworthy software development [Text] / V.O. Safonov // Wiley Interscience. -John Wiley & Sons, 2008. -338 p.
4. Сайт проекта MS Enterprise Library // Режим доступа: http://wag.codeplex.com
4
5. Григорьев, Д.А. Реализация и практическое применение аспектно-ориентированной среды программирования для Microsoft .NET [Текст] / Д.А. Григорьев // Научно-технические ведомости СПбГПУ. Сер. Информатика. Телекоммуникации. Управление. -2009. -№ 3. -С. 225-232.
6. Сайт проекта PostSharp [Электронный ре-
сурс] / Режим доступа: http://www.sharpcrafters. com
7. Сайт проекта Code Contracts [Электронный ресурс] / Режим доступа: http://msdn.microsoft. com/en-us/devlabs/dd491992
8. Сайт проекта Aspect.NET [Электронный ресурс] / Режим доступа: http://aspectdotnet.org
УДК 681.3.068
Н.В. Воинов, Л.П. Котлярова, И.Е. Поддубный
МЕТОДИКА РАЗРАБОТКИ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ДЛЯ ПЛАТФОРМЫ WINDOWS PHONE 7
Современный рынок мобильных устройств требует подготовки специалистов, способных быстро осваивать и создавать новые приложения под новые платформы. Среди них мобильная платформа Windows Phone 7 [1] в настоящее время считается наиболее перспективной. Именно поэтому она использована в новом курсе для обучения специалистов по направлению «Программная инженерия» на факультете технической кибернетики СПбГПУ.
В курсе разработана новая методика создания приложений (рис. 1), включающая следующее:
1) подготовку окружения, в т. ч. установку средств разработки приложений - Visual Studio 2010, Service Pack 1 и Windows Phone SDK [3];
2) создание проекта лабораторной или курсовой работы;
3) анализ интерфейса и макета внешнего вида приложения;
4) анализ архитектуры проекта, который предполагает проектирование схемы классов будущего приложения;
5) разработку кода разметки интерфейса на языке разметки xaml;
6) разработку программной логики на языках C#, Java и Visual Basic) с использованием технологий .NET Framework 4, Silverlight и XNA;
7) отладку на симуляторе и реальном устройстве;
8) дальнейшее совершенствование проекта.
Методика демонстрирует студентам основные принципы разработки приложений и учит использованию важных возможностей платформы.
Основная задача при разработке нового приложения заключается в создании пользовательского интерфейса на языке разметки xaml (eXtensible Application Markup Language) и логики на языках программирования. xaml - это расширяемый язык разметки приложений, разработанный компанией Microsoft. Он основан на XML, содержит интуитивно понятные онтологические структуры, прост в освоении. Тесное взаимодействие объектов xaml и программной логики позволяет без труда работать с элементами управления в коде приложения.
Разработанная методика включает три группы лабораторных работ и курсовую работу, в рамках которой студенты создают собственные приложения. Каждая из групп лабораторных работ объясняет и демонстрирует на практике следующие возможности:
1) варианты разметки (Grid, StackPanel, Canvas), основные элементы управления, контекст ввода, навигацию между страницами и передачу данных, элементы Pivot и Panorama, меню приложения;
2) задачи запуска и выбора, элемент управления WebBrowser, элемент управления Map и определение местоположения, работа с акселерометром, работа с HTTP, работа с изолированным