AndroMDA - pierwsze spotkanie

W poprzednim moim wpisie wspomniałem że będę próbował przetestować eclipsowe narzędzia wspierające tworzenie aplikacji w oparciu o MDA. Naprawdę próbowałem, jednak przyznam szczerze, że środowiska do projektowania, oparte na Eclipse zwyczajnie mi nie leżą, a pozatym sprawiają wrażenie surowych i mocno niedopracowanych.

Po chwilowym zniechęceniu pojawił się promyk nadziei , ponieważ trafiłem na darmowe narzędzie, które bardzo pozytywnie mnie zaskoczyło - mianowicie ArgoUML .

W pierwszej chwili pomyślałem, że dałoby się używać ArgoUML jako narzędzia do projektowania, a frameworku EMF do wykonywania transformat MDA. W teorii pomysł wydawał się ciekawy, ale na drodze do jego realizacji wyrosła niespodziewana przeszkoda - niezgodność formatów.

W ArgoUML, naturalny format wyjściowy to XMI, natomiast we frameworku EMF na wejściu potrzebny jest format ECORE (swoją drogą temat "przenośności" formatu xmi poruszę innym razem) . Co prawda istnieje projekt który potrafi dokonać konwersji jednego w drugi... jednak wydaje mi się to dosyć dużą komplikacją, która sprawia że cała gra niewarta jest świeczki.

Kiedy znowu wydawało się, że sprawa jest beznadziejna, trafiłem na link do projektu AndroMDA.

Jest to framework, który realizuje koncepcje przetwarzania modelu aplikacji opisywaną przez MDA. Celem projektu AndroMDA jest dostarczenie mechanizmów pozwalających na realizację konwersji pomiędzy modelami PIM a PSM, dzięki którym projektant aplikacji zostaje odciążony od konieczności wykonywania żmudnych i w dużej mierze automatycznych przekształceń.

Ze względu na to, że działa w oparciu o xmi i wspiera modele wygenerowane przez ArgoUML, w tunelu beznadziei pojawiło się malutkie światełko :)...

Instalacja pluginów AndroMDA



Po chwilowych problemach z zależnościami mavena i właściwym ustawieniu repozytoriów, oraz podparciu się informacjami opublikowanymi na

http://debugtrue.blogspot.com/2007/06/installing-andromda-plugin-for-maven-2.html

udało mi się przygotować pom.xml, który prawidłowo zainstalował w moim lokalnym repozytorium pluginy mavenowe.



<project>
<modelversion>4.0.0</modelversion>
<groupid>samples.test</groupid>
<artifactid>test</artifactid>
<version>1.0</version>
<packaging>jar</packaging>
<name>test</name>

<build>
<defaultgoal>compile</defaultgoal>
<plugins>
<plugin>
<groupid>org.andromda.maven.plugins</groupid>
<artifactid>andromda-maven-plugin</artifactid>
<version>3.4-SNAPSHOT</version>
</plugin>
<plugin>
<groupid>org.andromda.maven.plugins</groupid>
<artifactid>andromdapp-maven-plugin</artifactid>
<version>3.4-SNAPSHOT</version>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>andromda</id>
<name>AndroMDA Repository</name>
<url>http://team.andromda.org/maven2</url>
</repository>
</repositories>

<pluginrepositories>
<pluginrepository>
<id>andromda</id>
<name>AndroMDA Repository</name>
<url>http://team.andromda.org/maven2</url>
</pluginrepository>
</pluginrepositories>
</project>



Wykonanie komendy

mvn

w katalogu z wyżej opisanym pomem powoduje instalację pluginów mavenowych.

Generowanie aplikacji



Po instalacji pluginów można przystąpić do generowania przykładowej aplikacji, która posłuży jako baza do wykonywania przekształceń.

W tym celu, w katalogu w którym znajduje się plik pom.xml opisany w poprzednim akapicie należy wydać polecenie:


mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.4-SNAPSHOT:generate


uruchomiony zostanie wizzard, który wymaga od nas podania informacji na temat aplikacji którą chcemy wygenerować z naszego modelu.


INFO [AndroMDA] discovered andromdapp type --> 'j2ee'
INFO [AndroMDA] discovered andromdapp type --> 'richclient'

Please choose the type of application to generate [j2ee, richclient]
j2ee

Please enter the parent directory of your new application directory (i.e. C:/workspaces):
/dane/projekty/sandbox/mda-projekt-eksperymentalny

Please enter your first and last name (i.e. Chad Brandon):
mw

Which kind of modeling tool will you use?
(uml1.4 or uml2 for .xml.zip/.xml/.xmi/.zargo files,
emf-uml22 for .uml files, rsm7 for .emx files) [uml1.4, uml2, emf-uml22, rsm7]:
uml1.4

Please enter the name (maven project description) of your J2EE project (i.e. Animal Quiz):
Projekt eksperymentalny

Please enter an id (maven artifactId) for your J2EE project (i.e. animalquiz):
mdaprojekt

Please enter a version for your project (i.e. 1.0-SNAPSHOT):
1.0-SNAPSHOT

Please enter the root package name (maven groupId) for your J2EE project (i.e. org.andromda.samples.animalquiz):
mw

Would you like an EAR or standalone WAR? [ear, war]:
war

Please enter the type of transactional/persistence cartridge to use (enter 'none' if you don't want to use one) [spring, none]:
spring

Please enter the programming language to be used in service and dao implementations [java, groovy]:
java

Please enter the database backend for the persistence layer [h2, hypersonic, mysql, oracle, db2, informix, mssql, pointbase, postgres, sybase, sabdb, progress, derby]:
hypersonic

Will your project need workflow engine capabilities? (it uses jBPM and Hibernate3)? [yes, no]:
no

Will your project have a web user interface? [yes, no]:
yes

Would you like your web user interface to use JSF or Struts? [jsf, struts]:
jsf

Would you like a standalone or portlet JSF application (Note: Liferay is the only currently supported portlet container)? [standalone, portlet]:
standalone

Would you like to be able to expose your services as web services? [yes, no]:
no

Would you like to use the embedded Jetty web server (Maven plugin)? [yes, no]:
no


Po zakończeniu pracy wizzarda, na dysku tworzony jest projekt mavenowy, który w teorii pozwala nam na wygenerowanie kompletnej aplikacji.

Tu jednak pojawiają się schody i tradycyjnie praktyka bardzo rozchodzi się z teorią. Pojawiają się problemy, które opisane zostały już przez Jacka Laskowskiego.

Chociaż od tamtej chwili minęło już trochę czasu, a AndroMDA doczekała się nowej wersji, to jednak w sprawie starych zależności w repo nie zmieniło się nic i wygeneroany projekt zwyczajnie się nie buduje...

Sam mechanizm przekształceń modelu PIM->PSM stanowiący realizację koncepcji MDA działa bardzo dobrze i daje duże możliwości w zakresie konfigurowania i dopasowywania do indywidualnych potrzeb projektu.

W moim przekonaniu autorzy frameworku przesadzili, chcieli osiągnąć zbyt dużo. Założyli że na podstawie modelu zawsze są w stanie torzyć kompletne, skompilowane aplikację które bez jakiejkolwiek ingerencji w kod da się z sukcesem zdeployować na różnych środowiskach.
Ponieważ pomysł ten nie za bardzo mi się podoba, framework AndroMDA chciałbym wykorzystać w inny sposób, mianowicie włączyć go jako moduł Mavenowy, do zupełnie oddzielnego projektu (Spring Web Flow).
Jego rola ograniczyłaby się do generowania plików źródłowych modelu. Takie zastosowanie zostało przewidziane przez autorów frameworka - świadczy o tym informacja zawarta w artykule A Bird's Eye view of AndroMDA udostępnianym na stronach oficjalnej dokumentacji projektu (zawiera on wiele ciekawych informacji dotyczących głównych założeń frameworka, oraz sposobu jego działania - wiele mi wyjaśnił i bardzo go polecam).

Mam nadzieję, że wkrótce uda mi się wypróbować AndroMDA w praktyce i znaleźć chwilę czasu by o tym napisać :).

Brak komentarzy: