1.tworzenie systemu z wykorzystaniem współpracujących maszyn

Transkrypt

1.tworzenie systemu z wykorzystaniem współpracujących maszyn
INŻYNIERIA OPROGRAMOWANIA W PROCESACH INTEGRACJI SYSTEMÓW INFORMATYCZNYCH
Pod redakcją J. Górskiego, C. Orłowskiego, 2010
PWNT Gdańsk
1.TWORZENIE SYSTEMU Z WYKORZYSTANIEM
WSPÓŁPRACUJĄCYCH MASZYN STANOWYCH
Anna DEREZIŃSKA∗, Marian SZCZYKULSKI∗
1. Wprowadzenie
W procesie konstruowania systemów informatycznych istotną rolę odgrywa modelowanie, które
służy do abstrakcyjnego opisu systemu i ma na celu ułatwienie inżynierowi pracy nad jego
tworzeniem. Rozwój technologiczny powoduje zainteresowanie coraz to bardziej
skomplikowanymi systemami oraz implikuje wzrost liczby problemów do rozwiązania.
Przykładem takich systemów jest realizacja mobilnych usług przeznaczonych dla całych
społeczności użytkowników w sieci Internet. Wykonanie tych usług zależy od zmieniających się
w czasie i przestrzeni relacji pomiędzy członkami społeczności oraz różnych informacji
określających ich kontekst.
W jednym z podejść do procesu budowy systemu określonym jako inżynieria oparta na
modelu, w skrócie MDE (ang. Model Driven Engineering) [4], kluczową rolę odgrywa tworzenie
modeli oraz proces ich przekształcania. Poszczególne modele dotyczą wydzielonych fragmentów
systemu. W miarę postępu prac nad tworzonym systemem ulegają one kolejnym transformacjom
w celu ich uszczegółowienia, łączenia i stworzenia ostatecznego modelu w postaci konkretnej
implementacji systemu. Dzięki takiemu podejściu integracja systemu złożonego z różnych
współpracujących podsystemów może być przedstawiana i częściowo weryfikowana już we
wczesnych etapach projektowania systemu.
Niniejszy rozdział prezentuje wytwarzanie aplikacji oparte na maszynach stanowych UML
specyfikujących zachowanie klas. Przykład studialny dotyczy serwera obecności dla modelu
predefiniowanych statusów obecności w usługach społecznościowych [3].
Do generacji kodu z modeli UML użyto narzędzia FXU (ang. Framework for eXecutable
UML) [1,10]. Generator FXU wykorzystuje diagramy klas oraz stanów w celu utworzenia
wykonywalnej aplikacji zaimplementowanej w języku programowania C#. Generacja kodu jest
∗
Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych, Instytut Informatyki, e-mail:
[email protected]; [email protected].
Prawa Autorskie: Materiał był opublikowany przez PWNT w książce lub elektronicznym wydaniu książki pod
tytułem: „Inżynieria Oprogramowania w Procesach Integracji Systemów Informatycznych”. Możliwe jest zrobienie
jednej kopii bądź wydruku tylko i wyłącznie do użytku własnego. Wielokrotne kopiowanie w celach komercyjnych,
bądź modyfikowanie treści materiału jest zabronione. http://konsulting.gda.pl/pwnt.html
2
A. Derezińska, M. Szczykulski
realizowana zgodnie z szablonami generacji. FXU zapewnia pełną transformację maszyn
stanowych na kod języka C#.
2. Model serwera obecności
Serwer obecności jest centralną częścią mobilnego serwisu społecznościowego. Poniżej
przedstawiono podstawowe pojęcia związane z realizacją serwisu, a następnie informacje o
modelowaniu serwera obecności.
2.1. Podstawowe pojęcia
Społeczność jest to zbiór mobilnych użytkowników sieci o zróżnicowanych zmiennych
relacjach. W serwisach obsługujących społeczność występują usługi kontekstowe. Kontekst
dotyczy własności członków społeczności, jak również terminali, czy też aplikacji. Składowe
kontekstu mogą być bardzo różnorodne i istotna jest ich odpowiednia selekcja i filtrowanie.
Opis użytkowników sieci może być wyrażony zgodnie ze schematem formatowania FOAF
(ang. Friend of a Friend). Specyfikacja FOAF opiera się na składni XML i strukturze RDF (ang.
Resource Description Framework) – standardzie służącym do reprezentacji informacji w sieci.
Usługa obecności w ramach serwisu społecznościowego określa czy dany użytkownik jest
aktualnie obecny w sieci, jaki jest jego status, możliwości komunikacyjne jego terminala,
lokalizacja itp. Podstawowym zadaniem omawianej usługi jest filtrowanie informacji o
obecności, zależne od różnych relacji pomiędzy użytkownikami.
Jednym ze standardów wspierającym obsługę obecności jest protokół inicjowania sesji SIP
(ang. Session Initiation Protocol). SIP został zaproponowany przez IETF jako otwarty standard
dla zestawiania sesji pomiędzy jednym lub wieloma klientami. IETF (ang. Internet Engineering
Task Force) jest stowarzyszeniem zajmującym się standardami technicznymi i organizacyjnymi
służącymi współdziałaniu w Internecie. W dokumencie [11] przedstawiono wykorzystanie
protokołu SIP do subskrypcji i przesyłania powiadomień związanych z obecnością.
IMS (ang. Internet Protocol Multimedia Subsytem – multimedialny podsystem IP) jest
środowiskiem, które powstało w celu udostępniania użytkownikom multimedialnych usług
opartych na protokole Internetowym. W pracy [3] przedstawiono implementację serwera
obecności realizującego wybrane funkcje usługi społecznościowej z wykorzystaniem protokołu
SIP w środowisku IMS. Do przetestowania tego zadnia użyto emulatora środowiska IMS. W
niniejszym rozdziale omawiamy rozwiązanie alternatywne, w którym najpierw zbudowano
model serwera obecności, a następnie przetransformowano go do postaci kodu.
2.2. Wymagania systemu
Głównym zadaniem systemu jest stworzenie użytkownikowi możliwości publikacji statusu na
serwerze, jego zmiany oraz odczytywania statusu znajomych. Status jest rozumiany jako
informacja o dostępności danego użytkownika oraz jego kontekst. Kontekst to możliwości
komunikacyjne, lokalizacja, nastrój, aktualnie wykonywane czynności i wiele innych.
Użytkownicy są ze sobą dodatkowo powiązani zależnościami, które z kolei mogą dzielić się na
kategorie np. rodzina, przyjaciele, znajomi itp. Wynikowy status subskrybowanego użytkownika
jest pochodną jego aktualnego statusu oraz relacji w jakiej jest z tym użytkownikiem.
Tworzony model UML obejmuje tylko serwer obecności, który znajduje się w centrum
całego systemu i którego zadaniem jest realizacja logiki biznesowej. Działanie serwera obejmuje
trzy podstawowe zagadnienia:
• subskrypcja statusu innego użytkownika (ang. SUBSCRIBE),
• publikacja nowego statusu wraz z określonymi dla niego regułami ( ang. PUBLISH),
• wysyłanie powiadomienia o statusie innego użytkownika (ang. NOTIFY).
1. Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych
3
Użytkownik rejestruje się bezpośrednio na serwerze SIP, gdzie jest przechowywana
informacja o jego statusie. Jeżeli inny użytkownik (obserwator) zażąda subskrypcji jego statusu,
komunikuje się z serwerem obecności wysyłając żądanie SUBSCRIBE. Serwer obecności
komunikuje się z serwerem SIP pobiera jego status i analizuje reguły znajdujące się na serwerze
XCAP (ang. XML Configuration Access Protocol), określające status wynikowy na podstawie
rzeczywistego statusu oraz relacji pomiędzy użytkownikami.
Rys. 1.
Przypadki użycia systemu serwera obecności
Wyróżniono cztery główne przypadki użycia serwera obecności (Rys. 1):
• Publikowanie informacji o obecności (ang. Status Publication) – polega na udostępnieniu
różnych informacji o obecności poszczególnym osobom z listy kontaktów, według
warunków utworzonego wcześniej predefiniowanego statusu.
• Subskrypcja do informacji o obecności (ang. Status Subscription) – jest to żądanie
otrzymania informacji o stanie obecności obserwowanego obiektu.
• Usuwanie subskrypcji (ang. Delete Subscription) – polega na wyrejestrowaniu się
użytkownika z usługi i oznacza, że nie chce on być już informowany o zmianach
statusów innych użytkowników ze swojej listy kontaktów.
• Utworzenie predefiniowanego statusu (ang. Status Creation) – polega na utworzeniu
predefiniowanego statusu dostępności sterującego udostępnianą informacją o obecności.
2.3. Architektura systemu
System został podzielony na trzy główne warstwy: komunikacji z klientem, kontrolera oraz
komunikacji z innymi systemami. Ogólna architektura systemu składa się z czterech pakietów i
jest przedstawiona na Rys. 2.
Rys. 2.
Główne pakiety systemu serwera obecności
Pakiet clientConnector obsługuje żądania klientów. Żądania te są przechwytywanie, wstępnie
przetwarzanie i rozsyłanie do dalszej obsługi przez odpowiednie elementy znajdujące się w
pakiecie presenceAgentController. Pakiet ten zawiera elementy realizujące wymagania
4
A. Derezińska, M. Szczykulski
funkcjonalne serwera obecności. Komunikuje się on z innymi systemami poprzez następujące
adaptery zawarte w pakiecie systemAdapters:
• Adapter do serwera SIP, który przechowuje statusy użytkowników.
• Adapter do serwera XCAP, który udostępnia reguły umożliwiające uzyskiwanie statusu
obiektu mając daną relację pomiędzy obiektem, a obserwatorem. Podczas publikacji
nowego statusu serwer ten zapisuje nową regułę dla tego statusu.
• Adapter do serwera FOAF, który udostępnia relacje pomiędzy obiektami określone w
ontologii FOAF [3]. Są one niezbędne do odczytania statusu obiektu.
Czwarty pakiet utils zawiera elementy pomocnicze dla całego systemu.
2.4. Modelowanie działania serwera obecności
Działanie serwera obecności i jego współpraca z innymi podsystemami zostały zamodelowane
przy pomocy diagramów klas i stanów UML. Model systemu składa się z około dwudziestu klas
i interfejsów oraz siedemnastu maszyn stanowych. Maszyny stanowe określają zachowanie
poszczególnych klas. Główny pakiet systemu serwera obecności zawiera trzy klasy realizujące
podstawowe zadania serwera:
• klasa Publisher publikuje status użytkownika na serwerze SIP.
• klasa Subscriber dokonuje subskrypcji statusu użytkownika.
• klasa Notifier powiadamia o statusie innego użytkownika, którego zażądano subskrypcji.
Dla przykładu przedstawimy modele opisujące zachowanie dwóch klas z pakietu serwera
obecności, kluczowych ze względu na realizowaną funkcjonalność.
Obiekty klasy Publisher obsługują żądania PUBLISH klienta, czyli żądania publikujące
informację o jego obecności. Dla każdego żądania jest przeznaczony jeden obiekt tej klasy.
Diagram stanu tej klasy składa się z czterech stanów najwyższego poziomu (Rys. 3). W stanie
Preparation następuje przygotowanie danych do publikacji. Najpierw dane te są zbierane, potem
następuje walidacja danych, na podstawie których tworzony jest dokument mający zostać
opublikowany na serwerze SIP. Jeżeli utworzony dokument jest poprawny następuje przejście do
stanu złożonego Publication. W tym stanie serwer obecności komunikuje się z innymi
serwerami: XCAP, na którym umieszczone są reguły przetwarzania statusów oraz SIP, na
którym są publikowane aktualne statusy użytkowników. Jeżeli nastąpi błąd w połączeniu z
którymś z serwerów, wykonywana jest kolejna próba połączenia się z nimi do momentu aż nie
zostanie przekroczony licznik powtórzeń. Jeżeli komunikacja zakończyła się powodzeniem
zostaje wysłana odpowiedź do klienta, po czym obiekt przestaje istnieć. Wyróżnione stany
odpowiadają za obsługę sytuacji wyjątkowych związanych z możliwymi do wystąpienia
błędami. Źródłem błędów mogą być błędne dane lub błąd podczas komunikacji z serwerami SIP
i XCAP. W obu sytuacjach wysyłana jest odpowiedź do klienta z odpowiednim kodem błędu.
Obsługa żądań SUBSCRIBE klienta, czyli subskrypcja statusu innego użytkownika, jest
realizowana przez obiekty klasy Subscriber. Komunikacja ze zdalnymi serwerami odbywa się
poprzez warstwę adapterów. Subskrybowany status wysyłany jest do użytkownika za pomocą
notyfikacji wysyłanej przez obiekty klasy Notifier.
Diagram stanów (Rys. 4) definiuje działanie związane z subskrypcją statusu użytkownika. Po
inicjalizacji obiektu następuje walidacja parametrów wejściowych. Jeżeli parametry te są
poprawne automat przechodzi do stanu AdapterCommunication, w którym następuje połączenie
oraz pobranie danych z serwera SIP, czyli informacji o statusie użytkownika oraz serwera
FOAF, czyli informacji o relacji pomiędzy użytkownikiem subskrybującym status i
użytkownikiem, którego status jest subskrybowany. Komunikacja z tymi dwoma adapterami jest
niezależna i może nastąpić równolegle. Po otrzymaniu informacji od obu serwerów wyznaczany
jest ostateczny status. Wykonywane jest to zgodnie z regułami znajdującymi się na serwerze
XCAP. Następnie otrzymany status jest odfiltrowywany przez tzw. filtr obserwatora. Kolejnym
krokiem jest wysyłanie odpowiedzi. Równolegle wysyłany jest komunikat potwierdzenia
1. Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych
5
poprawnej subskrypcji oraz notyfikacja zawierająca subskrybowany status użytkownika. W
stanie CheckingStatus sprawdzane jest, czy nie wystąpił błąd podczas wysyłania odpowiedzi. W
osobnym stanie zaprojektowano realizację obsługi błędów.
Rys. 3.
Diagram stanów klasy Publisher
3. Technologia wytwarzania systemu
Inżynieria oparta na modelach (ang. MDE) potrzebuje narzędzi wspomagających ten proces. W
niniejszym rozdziale koncentrujemy się na możliwościach transformacji modeli
zaprojektowanych za pomocą języka UML, a zwłaszcza maszyn stanowych, w implementację z
użyciem języka programowania C#.
3.1. Generacja kodu C# z diagramów stanu w narzędziach CASE
Generacja kodu z diagramów klas jest możliwa w wielu narzędziach typu CASE dla różnych
języków programowania, w tym również w niektórych przypadkach dla języka C#. Niemiej
jednak generacja kodu z diagramów stanów jest możliwa tylko w przypadku wybranych
narzędzi. O ile generacja kodu z diagramów klas jest zadaniem stosunkowo prostym, to w części
specyfikacji dotyczącej diagramów stanów zawarte jest wiele niejasnych i nieprecyzyjnych
sformułowań. Występują tu tzw. warianty semantyczne (ang. semantic variation point), w
których specyfikacja UML pozostawia swobodę interpretacji [9].
Jeżeli wziąć pod uwagę język programowania to jednym z nielicznych przykładów
umożliwiających generację kodu z diagramów stanów i klas dla języka C# jest Enterprise
Architect [8]. Implementuje on jednak tylko podstawowe zagadnienia związane z diagramami
stanów UML i nie odwzorowuje ich pełnej semantyki. Nie jest generowany kod związany z
6
A. Derezińska, M. Szczykulski
realizacją pseudostanów, czy też wyzwalaczy przejść. Kod odwzorowujący realizację maszyn
stanowych jest umieszczony bezpośrednio w klasie, której ona dotyczy.
Jednym z najbardziej zaawansowanych narzędzi dostępnych na rynku, umożliwiających
kompletną generację kodu z diagramów stanów jest IBM Rational Rhapsody (dawniej firmy
Telelogic) [7]. Jest to komercyjne narzędzie do modelowania UML oraz SysML. Charakteryzuje
się wsparciem dla UML 2.1 oraz XMI 2.1. Umożliwia generację kodu zarówno z diagramów
klas jak i z diagramów stanów do języków C/C++, Java oraz Ada.
Realizację wszystkich elementów diagramów stanu UML 2.x w języku C#
zaimplementowano w systemie FXU (ang. Framework for eXecutable UML) [10]. FXU
wykorzystuje do generacji kodu diagramy klas i diagramy stanów UML. Cała logika maszyn
stanowych została umieszczona w specjalnej bibliotece (środowisku uruchomieniowym), a
generowany jest tylko odpowiedni kod związany z inicjalizacją automatu.
Rys. 4.
Diagram stanów klasy Subscriber
3.2. Architektura i działanie FXU
System FXU składa się z następujących składników:
• FXU Generator – generator kodu
• FXU Runtime Environment – środowisko uruchomieniowe maszyn stanowych
• FXU Application Wizard – narzędzie wspomagające budowę projektu
• FXU Tracer – narzędzie wspomagające śledzenie wykonania maszyn stanowych
Podstawową częścią systemu jest silnik generatora kodu, którego zadaniem jest statyczna
weryfikacja modeli i ich transformacja do postaci kodu [2,10]. Silnik obudowany został w
graficzny interfejs użytkownika. Środowisko uruchomieniowe FXU stanowi implementację
maszyn stanowych UML wykonaną w języku programowania C#. Poszczególne elementy
diagramów stanów zostały zaimplementowane, jako osobne klasy. Realizują one odpowiednie
1. Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych
7
zachowania tych elementów, ale również obsługują sytuacje nieprawidłowe, wykrywając błędy
na poziomie analizy dynamicznej. Automat w takiej sytuacji może zakończyć swoje działanie,
może też nastąpić wyjście z aktualnego regionu lub zachowanie może być nieokreślone. W
każdej z wymienionych sytuacji odpowiednia informacja o wykrytym błędzie zapisywana jest w
pliku logów.
W celu stworzenia wykonywalnej aplikacji z użyciem FXU należy najpierw stworzyć model
UML w jednym z narzędzi CASE. W przypadku omawianego serwera obecności wykorzystano
IBM Rational Software Architect 7.5 [6]. Kolejnym etapem jest eksport modelu do formatu EMF
2.4.1 (ang. Eclipse Modeling Framework) [5] zgodnego ze standardem XMI 2.1.
Tworzenie systemu z wykorzystaniem FXU składa się z następujących etapów:
1. Wczytanie i walidacja modelu UML
2. Generacja kodu C#
3. Generacja projektu dla środowiska Microsoft Visual Studio 2008
4. Budowa aplikacji
5. Wykonanie aplikacji
6. Śledzenie wykonania aplikacji w kontekście elementów z modelu klas i stanów
W pierwszym etapie model jest wczytywany do generatora FXU. Następuje również
statyczna walidacja modelu pod kontem zgodności ze standardami UML 2.1.2 oraz standardem
języka C# 3.0.
Drugi etap to generacja kodu. Elementy konfigurowalne generatora to m.in. katalog
wyjściowy, domyślne typy danych, parametry logowania zdarzeń, algorytmy dla wariantów
semantycznych specyfikacji UML.
Trzecim (opcjonalnym) etapem jest generacja projektu dla środowiska programistycznego
Microsoft Visual Studio 2008. Dodatkowo, można korzystając z modułu Application Wizard
utworzyć klasę zawierającą funkcję main, w której następuje inicjalizacja oraz uruchomienie
wygenerowanych wcześniej maszyn stanowych.
W środowisku uruchomieniowym możliwa jest modyfikacja kodu, w tym uzupełnienie kodu
operacji, integracja z innymi elementami systemu, które nie podlegały modelowaniu, jak np.
składnikami interfejsu użytkownika. Na tym etapie dołączane są biblioteki środowiska
uruchomieniowego FXU.
Podczas wykonania gotowej aplikacji następuje dodatkowa weryfikacja dynamiczna
wybranych własności maszyn stanowych. Ślad wykonania jest zapamiętywany w plikach logów
zgodnie z przyjętymi wymaganiami. Narzędzie FXU Tracer umożliwia śledzenie wykonania
maszyn stanowych na podstawie logowanej informacji. Ułatwia to interpretację działania
aplikacji w odniesieniu do poszczególnych elementów modelu i jest alternatywą dla zwykłego
przeglądania plików logów, które mogą być złożone i mało czytelne.
3.3. Implementacja serwera obecności z użyciem FXU
Model systemu serwera obecności przekształcono w kod przy użyciu generatora FXU i
stworzono wykonywalną aplikację. Dzięki temu przetestowano poprawności wykonania
wygenerowanych maszyn stanowych. Testowaniu poddano głównie sposób obsługi żądań
PUBLISH, SUBSCRIBE, NOTIFY. Przyjęto odpowiednie założenia dotyczące struktury żądań,
implementacji serwera, obsługi wiadomości itp. W zależności od rodzaju żądania, było ono
przekazywane do jednego z obiektów klas realizujących logikę biznesową znajdujących się w
pakiecie PresenceAgentController.
W celu szczegółowej analizy wykonania aplikacji użyto narzędzia FXU Tracer, który daje
możliwość symulacji przebiegu maszyn stanowych i jej wizualizacji. Prześledzono sekwencje
obsługi żądań na poszczególnych etapach w przypadku poprawnych, jak i niepoprawnych
sytuacji. Wykonanie powyższych testów wskazuje na to, że FXU może zostać użyty do realizacji
i integracji skomplikowanej logiki biznesowej, a wiele problemów może zostać rozwiązanych
8
A. Derezińska, M. Szczykulski
już na etapie projektowania, dzięki czemu nie będzie konieczna późniejsza implementacja
niektórych elementów, gdyż zostaną one wygenerowane i wykonane w środowisku
uruchomieniowym FXU.
4. Podsumowanie
W rozdziale przedstawiono przykład tworzenia aplikacji poprzez złożenie szeregu maszyn
stanowych specyfikujących działanie klas wchodzących w skład aplikacji. Do realizacji tego
zadania wykorzystano aktualną wersję systemu FXU. Rozwiązanie to miało następujące zalety:
• Część problemów rozstrzygana na etapie projektowania systemu, zwłaszcza dotycząca
współdziałania poszczególnych elementów systemu.
• Mniejszy nakład pracy w fazie implementacji ze względu na generację szkieletu aplikacji
w postaci klas i sygnatur operacji oraz generację kodu związanego z przepływem
sterowania w aplikacji i logiką biznesową.
• Generowanie kodu pozbawionego błędów kompilacji (ale nie dotyczy to kodu ręcznie
wpisywanego przez projektanta na diagramie UML).
• Automatyzacja procesu budowania projektu i głównej funkcji systemu.
• Możliwość śledzenia wykonania maszyn stanowych realizowanych w aplikacji.
Podstawowe wady związane z omawianym podejściem, to:
• Wygenerowany kod może być mniej wydajny niż kod napisany ręcznie.
• Narzędzie FXU integruje się ze środowiskiem w którym tworzone są modele oraz
środowiskiem programistycznym .NET (Microsoft VS) tylko na poziomie plików.
• Kod wpisany w modelu UML dla wewnętrznych akcji stanów (sekcje entry, do, exit) oraz
jako implementacja ciała operacji jest weryfikowany dopiero podczas tworzenia projektu.
Ocena ilościowa efektywności omawianego podejścia oraz jakości otrzymanego kodu
wymaga dalszych eksperymentów, w tym zbudowania aplikacji analogicznej do utworzonej z
użyciem FXU, przy zachowaniu porównywalnych warunków realizacji obu procesów.
Bibliografia
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
Derezińska A., Pilitowski R.: Event Processing in Code Generation and Execution
Framework of UML State Machines. - Madeyski L. at al. (red.) Software Engineering in
progres, ss. 80-92. Nakom, Poznań, (Polska) 2007.
Derezińska A., Pilitowski, R.; Realization of UML class and state machine models in the
C# Code Generation and Execution Framework. Informatica, vol. 33, no 4, 431-440. 2009.
Dziekan A. M.: Usługi kontekstowe w środowisku IMS Model i implementacja serwisów
społecznościowych, (Praca mag. CD-ROM) Instytut Telekomunikacji, Politechnika
Warszawska, Warszawa (Polska) 2008.
France R., Rumpe B.: Model-driven Development of Complex Software: A Research
Roadmap, Future of Software Engineering at ICSE'07, IEEE Soc., 2007, ss. 37-54.
http: Eclipse Foundation, http://www.eclipse.org/, (2010).
http:
IBM
Rational
Software
Architect,
http://www01.ibm.com/software/awdtools/swarchitect/ (2010).
http: IBM Rational Rhapsody, http://www-01.ibm.com/software/awdtools/rhapsody/,
(2010).
http: Sparx Systems. Enterprise Architect, http://www.sparxsystems.com.au/
products/ea/index.html, (2010).
http: Unified Modeling Language Superstructure v. 2.2, OMG Document formal/2009-0202, 2009, http://www.uml.org, (2010).
1. Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych
9
[10] Pilitowski R., Derezińska A.: Code Generation and Execution Framework for UML 2.0
Classes and State Machines. - Sobh T. (red.): Innovations and Advanced Techniques in
Computer and Information Sciences and Engineering, ss. 421-427. Springer, 2007.
[11] Rosenberg J.: RFC 3856 – A Presence Event Package for the Session Initiation Protocol
(SIP). 2004, http://tools.ietf.org/html/rfc3856
10
A. Derezińska, M. Szczykulski
{Odrębna strona streszczeń i adresów}
Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych
A.Derezińska*, M.Szczykulski**
*Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych, Instytut Informatyki,
[email protected]
** Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych, Instytut
Informatyki, [email protected]
Rozdział 5. Tworzenie systemu z wykorzystaniem współpracujących maszyn stanowych.
Budowa systemów realizujących złożoną logikę biznesową może być wspomagana przez
rozwiązania inżynierii opartej na modelach. W prezentowanym podejściu działanie
poszczególnych klas systemu zostało opisane przy użyciu maszyn stanowych UML. Wynikowy
model integrujący różne części systemu został przetransformowany do kodu i uruchomiony
razem z biblioteką implementującą wszystkie elementy specyfikacji maszyn stanowych. Do
generacji kodu i realizacji maszyn stanowych wykorzystano narzędzie FXU (ang. Framework
for eXecutable UML), które przekształca modele klas i stanów do kodu C#. Modelowany system
dotyczył realizacji mobilnych usług kontekstowych dla społeczności użytkowników sieci
Internet. Główną częścią systemu był serwer obecności. Realizował on trzy podstawowe
zadania: publikację statusu użytkownika, informowanie o jego zmianach oraz subskrypcję
informacji o statusie innego użytkownika.
The title in English
A.Derezińska*, M.Szczykulski**
*Warsaw University of Technology, Faculty of Electronics and Information Technology,
Institute of Computer Science, [email protected]
** Warsaw University of Technology, Faculty of Electronics and Information Technology,
Institute of Computer Science, [email protected]
Chapter 5. System creation based on cooperating state machines. The chapter presents
a system development supported by model driven engineering. Complex logic of a system can be
specified using state machines associated with particular classes. Integration of different system
parts can be specified at earlier stages of the system development. A model including class and
state machine models is transformed into a source code. An executable application is built with
usage of a library implementing all single elements of the UML behavioral state machine. This
task was accomplished using the FXU environment (Framework for eXecutable UML), which
transforms UML class and state diagrams into C# code. The approach was illustrated with a case
study devoted to a social network of mobile users. The model and created application realized
a presence server for the statuses services in the network. The server completes three main tasks:
subscription of a status of another user, publication of a new status with given rules and
notification another user about a status.