Бесшовная интеграция аспектов в облачные приложения на примере библиотеки Enterprise Library Integration Pack for Windows Azure и Aspect.NET

Использование библиотеки Enterprise Library Integration Pack for Windows Azure для модификации исходного кода целевого приложения. Методика бесшовной интеграции аспектов и целевого проекта с помощью Aspect.NET, которая не позволяет менять исходный код.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 15.01.2019
Размер файла 25,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Бесшовная интеграция аспектов в облачные приложения на примере библиотеки Enterprise Library Integration Pack for Windows Azure и Aspect.NET

Григорьев Д.А., к.ф.-м.н., доцент кафедры информатики СПбГУ, gridmer@mail.ru

Григорьева А.В., аспирант кафедры информатики СПбГУ, nastya001@mail.ru

Сафонов В.О., д.т.н., профессор кафедры информатики СПбГУ, vosafonov@gmail.com

Аннотация

библиотека windows код приложение

Библиотека Enterprise Library Integration Pack for Windows Azure - это решение компании Microsoft для выделения “сквозной функциональности” при разработке облачных приложений. Использование этой библиотеки подразумевает модификацию исходного кода целевого приложения. На практике возникают ситуации, когда изменение исходного кода нежелательно. Данная статья описывает методику бесшовной интеграции аспектов и целевого проекта с помощью Aspect.NET, которая позволяет не менять исходный код целевого приложения.

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

Аспектно-ориентированное программирование (АОП) предлагает решение данной проблемы - выделение “сквозной функциональности” в один модуль, аспект [3]. По своей сути, реализация “сквозной функциональности” состоит в том, чтобы выполнить некие действия в определенных точках целевой программы или же расширить существующие классы новыми методами и полями. Существенной проблемой при изменении поведения программы с помощью современных АОП-инструментов является отсутствие бесшовной интеграции аспектов и целевого исходного кода системы. Причиной этого является распространенное мнение, что АОП наиболее эффективно только в том случае, когда целевая система изначально разрабатывалась с его помощью, напр. все зависимости между интерфейсами и реализующими их классами разрешаются через АОП-инструмент, а система декомпозирована таким образом, что все действия аспектов идеально соответствуют своим точкам внедрения. К сожалению, напр. для унаследованного кода этот принцип не работает, тем более при наличии требования бесшовной интеграции.

В 2011 году компания Microsoft выпустила расширение Enterprise Library (EL) Integration Pack for Windows Azure [4], которое содержит функциональные блоки для управления производительностью (Autoscaling Application Block) и ограничения функциональности под нагрузкой (Transient Fault Handling Block). Программист может реализовать ту или иную “сквозную функциональность“, если в исходном коде своего проекта вызовет методы из набора классов соответствующего функционального блока. С точки зрения АОП очевидно, что местоположение этих вызовов в исходном коде целевого приложения является совокупностью точек внедрения для действий соответствующего аспекта.

Проект Aspect.NET, разрабатываемый коллективом авторов с 2004 г. в СПбГУ, представляет собой аспектно-ориентированную среду разработки программ для платформы Microsoft.NET. Аспекты определяются на метаязыке Aspect.NET ML [2], либо с помощью пользовательских атрибутов в отдельных проектах MS Visual Studio, а их слияние с целевым кодом происходит на уровне сборок статически, т.е. после этапа компиляции. Вначале компилируется сборка с аспектами из которой компоновщик аспектов (weaver) извлекает правила внедрения каждого действия аспекта, содержащиеся в его пользовательском атрибуте AspectAction(). Затем компоновщик анализирует MSIL-код откомпилированной сборки целевого проекта, находит соответствующие места внедрения (сканирование) и вставляет туда действия из аспектной сборки. Операции сканирования и внедрения действий аспектов разделены, что позволяет пользователю просматривать и фильтровать точки внедрения. Весь анализ и модификация .NET сборок производится с помощью сервисов отражения (reflection) и библиотеки MS Phoenix [11], которая декомпилирует сборку и представляет ее в виде набора высокоуровневых инструкций.

Постановка задачи

Перед авторами была поставлена задача реализовать бесшовную интеграцию функциональных блоков EL с помощью Aspect.NET. Это позволило бы объединить сильные стороны двух инструментов, а именно: большой набор готовых аспектов, приемлемая скорость результирующего кода и независимость целевого проекта от АОП-инструмента. Объектом исследования были выбраны Autoscaling Application Block и Transient Fault Handling Block, как наиболее полезные для разработки облачных приложений на платформе MS Azure.

Реализация

Рассмотрим упражнение “Hands-on Lab 1: Using the Logging Application Block with Windows Azure Storage” [5], где путем добавления ссылок на сборки EL производится подключение функционального блока логгирования к исходному проекту, а затем вызов его метода для передачи сообщения в облачное хранилище диагностической информации WAD. Это дает возможность настраивать параметры сбора и хранения отладочных сообщений через графический интерфейс Logging Application Block, либо через его конфигурационные файлы.

Итак, наша задача заключается в том, чтобы перенести все зависимости от EL и вызовы методов протоколирования в отдельный проект с аспектом. Применив затем с помощью Aspect.NET данный аспект к исходному проекту, мы получим его бесшовную интеграцию с Logging Application Block.

По мнению авторов [7], перехват вызовов методов, которые реагируют на внешние события, может быть осуществлен через наследование классов. Если в аспектном проекте создать класс, который наследует от целевого класса, а затем подменить им свой базовый класс в сборке исходного проекта, то требуемый перехват можно осуществить в переопределенном виртуальном методе. Специальный пользовательский атрибут [ReplaceBaseClass] предписывает компоновщику Aspect.NET заменить целевой класс своим аспектным наследником:

1. Заменить в исходной сборке все вызовы методов базового целевого класса (в том числе и конструкторы) на вызовы методов его наследника в аспектной сборке.

2. Принудительно объявить виртуальными те методы целевого класса, которые переопределены в замещающем его наследнике. Если они закрыты (private), то сделать их защищенными (protected).

3. Если вызов этих методов в исходной сборке производится с помощью MSIL-инструкции call или ldftn, заменить их на callvirt и ldvirtftn соответственно.

4. Объединить с помощью инструмента ILRepack (из проекта Mono.Cecil [10]) сборки с аспектом и исходную.

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

Преимуществами такого алгоритма является простота подмены классов для пользователя, а также использование только штатного синтаксиса языка .NET. Теперь с помощью аспекта можно: уточнять поведение любого метода целевого класса, реализовывать в нем дополнительные интерфейсы, накладывать различные пользовательские атрибуты и т.п. Вычислительная сложность такого алгоритма O(N), где N - количество MSIL-инструкций в исходной сборке. Однако, в компоновщике аспектов Aspect.NET эти операции объединены с операциями вставки аспектов (также сложностью O(N)), поэтому общая асимптотическая сложность компоновки аспектов не увеличилась.

Следующий пример бесшовной интеграции основан на примере “Hands-on Lab 11: Transient Fault Handling”. Здесь задача заключается в том, чтобы добавить в целевой код работы с базой данных стратегию обработки исключительных ситуаций. Сама стратегия отделена от кода, работающего с базой данных, и конфигурируется средствами EL. Например, для любого запроса к базе данных можно составить стратегию вида: попытаться совершить 4 последовательных запроса, если каждый из предыдущих совершается неудачно. При этом между вторым и третьим запросом должна быть пауза в 5 сек.

Запрос к базе данных производится с помощью вызова метода SqlCommand.ExecuteReader(), который может выбросить исключение при сбое соединения с базой данных. Чтобы применить к нему стратегию обработки исключительных ситуаций, необходимо выполнить данный блок в рамках метода ExecuteAction() класса Microsoft.Practices.TransientFaultHandling.RetryPolicy<T>, где T - класс, реализующий стратегию. Получить объект этого класса можно через специальный менеджер TransientFaultHandling.RetryManager, который должен быть инициализирован библиотекой EL и передан нам в конструкторе целевого класса. Для этого требуется создать объект нашего замещающего наследника с помощью средств EL. Средства АОП-программирования, в том числе и Aspect.NET, предоставляют механизмы замены вызова целевого метода на действие аспекта. Для подмены создания класса замещающего наследника мы этим и воспользовались, однако, в вышеупомянутом случае ситуация осложняется тем, что “целевым” является весь блок using. Для таких ситуаций и предназначен наш механизм замены целевого класса замещающим наследником.

Заключение

Бесшовная интеграция аспектов в целевые приложения дает возможность эффективно решать проблемы сопровождения проектов, когда необходимо добавлять новую функциональность без изменения исходного кода. Представленная методика позволяет применить сторонние библиотеки для устранения сквозной функциональности, избегая при этом зависимости от них в исходном коде целевого проекта. В ходе дальнейшей разработки можно безболезненно отказаться от использования выбранной библиотеки, либо заменить ее на другую. Таким образом, существенно снижаются риски того, что неудачно выбранное АОП-решение или библиотека повлекут за собой существенную переделку целевого проекта. Реализация данной методики на базе Aspect.NET позволяет программистам использовать привычную среду разработки MS Visual Studio 2012, а также простой процесс создания аспектов, предоставляющих доступ к сервисам сторонних библиотек. Все упомянутые аспекты доступны на сайте проекта Aspect.NET [9].

Литература

1) Эспозито, Д. Аспектно-ориентированное программирование, перехват и Unity 2.0 // MSDN Magazine, 12.2010 // Режим доступа [проверено 22.04.2013]: http://msdn.microsoft.com/ru-ru/magazine/gg490353.aspx

2) Григорьев, Д.А. Реализация и практическое применение аспектно-ориентированной среды программирования для Microsoft .NET // Научно-технические ведомости // СПб. Изд-во СПбГПУ. 2009. № 3., - 225 с.

3) Сафонов, В.О. Аспектно-ориентированное программирование // Учебное пособие // СПб.: Изд-во СПбГУ. 2011, - 28 с.

4) Сайт проекта Enterprise Library 5.0 Integration Pack for Windows Azure // Режим доступа [проверено 22.04.2013]: http://entlib.codeplex.com/wikipage?title=EntLib5Azure

5) Сайт проекта Hands-On Labs for Enterprise Library 5.0 Integration Pack for Windows Azure // Режим доступа [проверено 22.04.2013]: http://www.microsoft.com/en-us/download/details.aspx?id=28785

6) Григорьева А. В. Аспектно-ориентированный рефакторинг облачных приложений MS Azure с помощью системы Aspect.NET // Компьютерные инструменты в образовании // СПб. Изд-во АНО “КИО”. 2012. № 1., - 21 с.

7) Григорьев Д.А., Григорьева А. В., Сафонов В.О. Бесшовная интеграция аспектов в облачные приложения на примере библиотеки Enterprise Library Integration Pack for Windows Azure и Aspect.NET // Компьютерные инструменты в образовании // СПб. Изд-во АНО “КИО”. 2012. № 4., - 3 с.

8) Сайт проекта Mono.Cecil // Режим доступа [проверено 22.04.2013]: http://www.mono-project.com/Cecil

9) Сайт проекта Aspect.NET // Режим доступа [проверено 22.04.2013]: http://aspectdotnet.org/

10) Сайт проекта Mono.Cecil // Режим доступа [проверено 22.04.2013]: http://www.mono-project.com/Cecil

11) Сайт проекта MS Phoenix // Режим доступа [проверено 22.04.2013]: http://research.microsoft.com/en-us/collaboration/focus/cs/phoenix.aspx

Размещено на Allbest.ru

...

Подобные документы

  • Создание программы для хранения и обработки данных о съеме/сдаче жилья. Написание программы на языке C++ с использованием библиотеки Qt; использование исходного кода для создания приложения под Windows, Linux, Mac OS X без дополнительных изменений кода.

    курсовая работа [60,4 K], добавлен 07.03.2013

  • Облачные технологии в бизнес-процессах. Модели использования бизнес-приложений в качестве интернет-сервисов. Практика применения облачных технологий. Приложения, созданные на основе Windows Azure. Создание систем и офисных приложений по запросу.

    реферат [25,3 K], добавлен 16.06.2013

  • Разработка информационной системы "Больница" на основе Java EE-технологий. Проект и реализация трехслойного enterprise-приложения, работающего с базой данных больницы, его структура. Предметная область; визуализация архитектуры с помощью UML-диаграмм.

    курсовая работа [2,0 M], добавлен 22.10.2012

  • Понятие, типы и работа брандмауэра. Встроенные в Windows firewall. Windows XP SP2, доступ к настройкам файрвола Windows XP Service Pack 2. Windows Vista, разрешенный трафик. Windows 7, настройки активных профилей. Персоальные Firewall, уровни тестов.

    реферат [3,8 M], добавлен 19.11.2010

  • Изучение и реализация системы, использующей возможности Microsoft Azure для распределенного обучения нейронной сети. Рассмотрение функционирования распределенных вычислений. Выбор задачи для исследования; тестирование данного программного ресурса.

    дипломная работа [2,0 M], добавлен 20.07.2015

  • Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.

    курсовая работа [563,2 K], добавлен 21.06.2011

  • Теоретические аспекты использования Infrastructure Library информационных технологий. Планирование процессов, ролей и видов деятельности. Определение связей и необходимых видов взаимодействий в организации. Проблемы внедрения Infrastructure Library.

    курсовая работа [69,9 K], добавлен 22.05.2017

  • Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.

    курсовая работа [1,3 M], добавлен 12.12.2011

  • Управление службами SQL Server 2000. Настройка данного приложения. Использование SQL Server Enterprise Manager для запуска и остановки служб. Применение инструментов Windows. Учетные записи служб SQL Server 2000, консоль, интерфейс и утилиты Osql.

    презентация [200,9 K], добавлен 10.11.2013

  • Построение схемы модели процесса и разработка анимации; определение характеристики модели с использованием AnyLogic. Сеть Петри для процесса работы порта. Описание программного продукта. Объекты библиотеки Enterprise Library. Результаты работы модели.

    курсовая работа [334,1 K], добавлен 25.04.2015

  • Общая характеристика системы программирования Delphi, а также принципы создания ее компонентов. Описание значений файлов приложения, созданного с помощью Delphi. Структура и свойства библиотеки визуальных компонентов (Visual Component Library или VCL).

    отчет по практике [1,1 M], добавлен 07.12.2010

  • Архитектура Windows NT 5. Приоритеты выполнения программного кода. Описание формата MIDI-данных. Установка драйвера в системе. Выбор средств разработки программного обеспечения. Обработка запросов драйверной модели WDM. Использование библиотеки DirectKS.

    курсовая работа [498,8 K], добавлен 24.06.2009

  • Разработка Windows-приложений с использованием библиотеки MFC. Базовый набор классов, написанных на языке С++ и предназначенных для упрощения процесса программирования под Windows. Фундаментальные идеи объектно-ориентированного программирования.

    курсовая работа [348,1 K], добавлен 02.07.2011

  • Основы организации приложения в Windows. Посылка и передача сообщений для окон. Создание и отображение главного окна приложения. Деактивация приложения, его фазы. Сообщения клавиатуры и функции для работы с ней. Определение состояния отдельных клавиш.

    лекция [65,7 K], добавлен 24.06.2009

  • История создания и общая характеристика операционных систем Windows Server 2003 и Red Hat Linux Enterprise 4. Особенности установки, файловых систем и сетевых инфраструктур данных операционных систем. Использование протокола Kerberos в Windows и Linux.

    дипломная работа [142,7 K], добавлен 23.06.2012

  • Тенденции ускорения цикла разработки: кодирование – тестирование – сборка – развертывание в разработке веб-приложений и программного обеспечения. Применение методологии "Continuous Integration" для автоматизированного выполнения сборки и развертывания.

    статья [183,2 K], добавлен 10.12.2016

  • Проектирование службы Windows и приложения для управления этой службой, которое позволит контролировать данные приложения - запускать и завершать определенные процессы по желанию пользователя через определенные промежутки времени. Инструкция по установке.

    курсовая работа [2,8 M], добавлен 05.01.2013

  • Описание платформы NET Framework. База данных Microsoft Access. Разработка Windows приложения. Модель программирования Windows Forms. Функциональное назначение программы. Входные и выходные данные. Требования к техническому и программному обеспечению.

    курсовая работа [2,2 M], добавлен 15.03.2015

  • Администрирование дисков в WINDOWS 2000. Новые концепции в Windows 2000. Использование возможностей Disk Management. Двойная загрузка. Приложения в системе с двойной загрузкой. Усложненная процедура установки.

    реферат [15,7 K], добавлен 14.06.2007

  • Общее определение JavaScript-библиотеки, виды библиотек. Создание клиентского приложения с использованием одного из существующий JS-фреймворков. Значение, виды и выбор фреймворка. Выбор приложения и его тематики. Написание программного кода, итоги работы.

    курсовая работа [545,8 K], добавлен 21.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.