Mój dobry kolega, z którym nie jeden egzamin przyszło mi zdawać podczas studiów - Grzegorz Kukawski zdecydował się na pewną odmianę w sposobie dzielenia się wiedzą i postanowił włożyć trochę wysiłku w stworzenie całkowicie darmowego kursu UML.
Jakby wyczuł moment, bo jeszcze wczoraj (!) rozmawiałem z innym kolegą na temat ukończenia egzaminu Sun Certified Enterprise Architect, który obecnie nazywa się Oracle Certified Master, Java EE 5 Enterprise Architect, którego jeszcze nie mam, a chęć na niego mi nie mija. Już miałem do niego podejście, mam pierwszy etap zdany, ale pozostają te eseje i tu leży sedno sprawy - do kolejnych etapów potrzebuję znajomości UML przynajmniej na poziomie podstawowym, której raczej nie posiadam - coś tam potrafię, ale być może ze względu na niewielkie użycie, a z pewnością zerowe w projektach, nigdy nie miałem możliwości sprawdzenia mojej wiedzy UML w boju. I to chciałbym zmienić! I inni widać również. To może jedynie spotkać się z moim aplauzem.
Kiedy napisał do mnie Grzesiek, stało się jasne, że nie dane mi jest nie skorzystać z okazji "upieczenia dwóch dań na jednym ogniu" - sprawdzę, co tam przygotowano, a dodatkowo pozwoli mi to uzbroić się w konieczną wiedzę z zakresu modelowania z użyciem UML i będzie SCEA5...ekhm...OCEA5. Po prostu bajka! Już widzę morze pieniędzy z tych kontraktów, które będę realizował z Tobą i Tobą, i pewnie z Tobą również :)
Nie czejając długo zapisałem się na kurs i po chwili pojawiła się wiadomość powitalna w mojej skrzynce pocztowej:
Jacku
Z pewnością nie bez powodu zainteresował Cię mój Darmowy Kurs UML.
Chcesz wiedzieć więcej na temat modelowania za pomocą UML i z pewnością interesuje Cię wiedza praktyczna z tego zakresu. Na pewno marzysz również o zwiększeniu Twojej pozycji na rynku pracy. To bardzo dobrze, pomogę Ci w tym.
Jest jednak jedno ale. Widza na temat notacji to jedno, a umiejętność modelowania systemów informatycznych to drugie. Można by to porównać do języka obcego. To, że nauczysz się np. angielskiego nie znaczy jeszcze, że umiesz w rozmowie wzbudzać sympatię anglików. Do tego potrzebujesz poznać ich kulturę, przyzwyczajenia i mentalność. Język angielski jest Ci do tego niezbędny, ale aby go wykorzystać w określonym celu, potrzeba ćwiczyć.
Wiem o tym doskonale i dlatego wierzę, że to czym się zajmuję ma sens. Zawsze staram się uczyć wiedzy praktycznej.
W tym darmowym kursie zobaczysz wiele przykładów użycia języka UML. Będziesz miał zadaną również, po każdej lekcji, pracę domową. Przygotuj się więc i zarezerwuj trochę czasu. Planuję również rozwijać swoją działalność, aby dostarczać jak najwięcej wiedzy praktycznej. Jednak na razie skupmy się nad nauką języka ang.. (przepraszam) UML.
Jeszcze kilka spraw organizacyjnych. Dzisiaj dostaniesz jeszcze wolne. Ale co trzy dni, będziesz dostawał kolejną lekcję, którą będziesz musiał zrozumieć i zrobić do niej ćwiczenia. Przygotuj się na to. Jeśli miałbyś jakieś wątpliwości możesz zajrzeć na forum (http://forum.scire.pl), gdzie ćwiczenia są dyskutowane przez Twoich współkursantów (o ile już na nim nie jesteś).
Wszystkich lekcji (nie licząc dzisiejszego wstępu) jest dziewięć i będę wysyłał je do Ciebie co trzy dni.
Zapraszam Cię na pierwsze wideo, w którym poznasz mój głos i zapoznasz się z zawartością kursu.
Pozdrawiam cię serdecznie ;)
Grzesiek Kukawski
--
http://scire.pl
http://darmowy-kurs-uml.scire.pl
http://forum.scire.pl
Pokazywanie postów oznaczonych etykietą uml. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą uml. Pokaż wszystkie posty
23 lutego 2011
05 lipca 2009
Pierwsze (krótkie) doświadczenie z Eclipse UML2 Tools - idzie do kosza
Już pojawiają się opinie po wczorajszej Javarsovii 2009, ale moje wrażenia chciałbym jeszcze uzupełnić o kilka danych statystycznych i zdjęcia, więc temat odłożony na kolejny wpis.
Dzisiejszy dzień dosyć deszczowy w Warszawie i po uwagach, jakie coraz częściej do mnie dochodzą w kontekście treści publikowanych w moim blogu zdecydowałem się na niewielką acz zapewne zauważalną zmianę - koniec z relacjami z lektury książek, które ciągną się tygodniami. Nie ukrywam, że mój plan zaczął mnie samemu przygniatać swoim zasięgiem i próba relacjonowania każdego z rozdziałów powodowała, że miałem "zarezerwowane" kilkanaście dni/tygodni wprzód. Czytanie książek idzie mi znacznie szybciej, a relacje poszczególnych rozdziałów zajmowały często zdecydowanie za dużo treści w pojedynczym wpisie niż samemu chciałbym przeczytać. Na własne życzenie wiązałem sobie ręce. Głosy, jakie do mnie dochodziły zdawały się sugerować zmianę podejścia na bardziej produktywny, a nie jedynie odtwórczy. Koniec więc z pomysłami relacji książek w stylu "wpis za rozdział". Powinno być znacznie odświeżające dla obu stron.
W ten sposób postanowiłem wrócić do bardziej aktywnego rozwoju Nauczyciela - aplikacji w Grails, której celem jest nauka Grails praktycznie oraz pomoc w nauce moim dzieciakom. Dzisiaj przyszła pora na wdrożenie przepływów na bazie Grails Web Flow. Temat bardzo obszernie opisany w książce "The Definitive Guide to Grails, Second Edition", którą swego czasu relacjonowałem (patrz kategoria Grails). Zacząłem już dłubać w kontrolerze, kiedy to postanowiłem podejść do tematu trochę bardziej metodycznie z użyciem diagramu stanowego UML. Potrzebne mi było narzędzie do jego stworzenia i padło na Eclipse UML2 Tools (po prostu wyszukałem w Google frazę "eclipse uml").
Początkowo zabrałem się za instalację UML2TOOLS 0.9.0, ale niedługo trwało, kiedy pobrałem po prostu wersję Eclipse Modeling Tools (includes Incubating components), gdzie wszystko jest gotowe do użycia. Wystarczyło Ctrl+N, wybrać kategorię UML 2.1 Diagrams i pojawiła się cała lista dostępnych diagramów.
Następnie State Machine Diagram i skończyłem z czymś takim.
Jeśli to ma być wszystko, co oferuje Eclipse 3.5 w temacie UML 2.1, to ja dziękuję za takie rozwiązanie. Mam do dyspozycji komercyjne rozwiązania, jak IBM Rational Software Architect czy IBM WebSphere Integration Developer, więc na pewno nie będę narzekał, jak zapomnę o "czystym" Eclipse i jego wsparciu dla UML. Uważam UML2 Tools za niezwykle nieintuicyjne rozwiązanie, gdzie chociażby funkcja "Arrange All" rozkłada elementy odwrotnie - do góry nogami, co można zauważyć na powyższym zrzucie. Całkowicie się zgadzam za określeniem stanu projektu jako Incubating. I niech tam jeszcze posiedzi, bo tylko sprowokuje jeszcze jedną duszyczkę do zmarnowania kilku godzin na jego rozpracowywaniu, poszukiwaniu dokumentacji, aby ostatecznie machnąć na to ręką.
A poza tym, nie wiem, jak należałoby zamodelować przepływ typu sprawdzian w umlowym diagramie stanów. Jak rozumiem ten typ diagramu, jego celem jest przedstawienie zmiany stanu pewnego bytu, np. uczestnik sprawdzianu lub sam sprawdzian. Pierwszy nie pasuje mi - chyba, że miałbym modelować zmianę jego stanu psychicznego podczas sprawdzianu. Stąd pozostaje mi sprawdzian. Tylko to, co do tej pory mam, zdaje się bardziej przypominać diagram iteracyjny niż stanowy. Mam wrażenie, że utknąłem i potrzebuję podpowiedzi. Czy nie jest tak, że stan "w trakcie" nie jest aż nadto ogólny, który mógłbym spróbować rozbić na mniejsze (pod)stany, w których z kolei miałbym zamodelowane stany odpowiedzi na pojedyncze pytania? Trochę podpieram się moją wizją docelowej aplikacji, więc stąd te zapędy na stan: "pytanie odpowiedziane" i pętlę z warunkiem "czy zakończyć sprawdzian?". Chyba utknąłem :( Pooomooocy!
Dzisiejszy dzień dosyć deszczowy w Warszawie i po uwagach, jakie coraz częściej do mnie dochodzą w kontekście treści publikowanych w moim blogu zdecydowałem się na niewielką acz zapewne zauważalną zmianę - koniec z relacjami z lektury książek, które ciągną się tygodniami. Nie ukrywam, że mój plan zaczął mnie samemu przygniatać swoim zasięgiem i próba relacjonowania każdego z rozdziałów powodowała, że miałem "zarezerwowane" kilkanaście dni/tygodni wprzód. Czytanie książek idzie mi znacznie szybciej, a relacje poszczególnych rozdziałów zajmowały często zdecydowanie za dużo treści w pojedynczym wpisie niż samemu chciałbym przeczytać. Na własne życzenie wiązałem sobie ręce. Głosy, jakie do mnie dochodziły zdawały się sugerować zmianę podejścia na bardziej produktywny, a nie jedynie odtwórczy. Koniec więc z pomysłami relacji książek w stylu "wpis za rozdział". Powinno być znacznie odświeżające dla obu stron.
W ten sposób postanowiłem wrócić do bardziej aktywnego rozwoju Nauczyciela - aplikacji w Grails, której celem jest nauka Grails praktycznie oraz pomoc w nauce moim dzieciakom. Dzisiaj przyszła pora na wdrożenie przepływów na bazie Grails Web Flow. Temat bardzo obszernie opisany w książce "The Definitive Guide to Grails, Second Edition", którą swego czasu relacjonowałem (patrz kategoria Grails). Zacząłem już dłubać w kontrolerze, kiedy to postanowiłem podejść do tematu trochę bardziej metodycznie z użyciem diagramu stanowego UML. Potrzebne mi było narzędzie do jego stworzenia i padło na Eclipse UML2 Tools (po prostu wyszukałem w Google frazę "eclipse uml").
Początkowo zabrałem się za instalację UML2TOOLS 0.9.0, ale niedługo trwało, kiedy pobrałem po prostu wersję Eclipse Modeling Tools (includes Incubating components), gdzie wszystko jest gotowe do użycia. Wystarczyło Ctrl+N, wybrać kategorię UML 2.1 Diagrams i pojawiła się cała lista dostępnych diagramów.
Następnie State Machine Diagram i skończyłem z czymś takim.
Jeśli to ma być wszystko, co oferuje Eclipse 3.5 w temacie UML 2.1, to ja dziękuję za takie rozwiązanie. Mam do dyspozycji komercyjne rozwiązania, jak IBM Rational Software Architect czy IBM WebSphere Integration Developer, więc na pewno nie będę narzekał, jak zapomnę o "czystym" Eclipse i jego wsparciu dla UML. Uważam UML2 Tools za niezwykle nieintuicyjne rozwiązanie, gdzie chociażby funkcja "Arrange All" rozkłada elementy odwrotnie - do góry nogami, co można zauważyć na powyższym zrzucie. Całkowicie się zgadzam za określeniem stanu projektu jako Incubating. I niech tam jeszcze posiedzi, bo tylko sprowokuje jeszcze jedną duszyczkę do zmarnowania kilku godzin na jego rozpracowywaniu, poszukiwaniu dokumentacji, aby ostatecznie machnąć na to ręką.A poza tym, nie wiem, jak należałoby zamodelować przepływ typu sprawdzian w umlowym diagramie stanów. Jak rozumiem ten typ diagramu, jego celem jest przedstawienie zmiany stanu pewnego bytu, np. uczestnik sprawdzianu lub sam sprawdzian. Pierwszy nie pasuje mi - chyba, że miałbym modelować zmianę jego stanu psychicznego podczas sprawdzianu. Stąd pozostaje mi sprawdzian. Tylko to, co do tej pory mam, zdaje się bardziej przypominać diagram iteracyjny niż stanowy. Mam wrażenie, że utknąłem i potrzebuję podpowiedzi. Czy nie jest tak, że stan "w trakcie" nie jest aż nadto ogólny, który mógłbym spróbować rozbić na mniejsze (pod)stany, w których z kolei miałbym zamodelowane stany odpowiedzi na pojedyncze pytania? Trochę podpieram się moją wizją docelowej aplikacji, więc stąd te zapędy na stan: "pytanie odpowiedziane" i pętlę z warunkiem "czy zakończyć sprawdzian?". Chyba utknąłem :( Pooomooocy!
17 kwietnia 2008
Pierwsze kroki z MDA w wykonaniu AndroMDA
Po komentarzu Krzyśka do wpisu Pierwsze kroki z UML w NetBeans 6.1, w którym wspomniał o MDA i lekturze artykułu Mariusza Wójcika Spring Framework - projektowanie aplikacji w oparciu o koncepcję MDA nie miałem wątpliwości, że po wczorajszej zabawie z UML dzisiaj pora spróbować sił z MDA - Model-Driven Architecture. Podejście MDA pozwala na tworzenie aplikacji bazując na modelach UML niezależnie od docelowego środowiska uruchomieniowego i użytych technologii, które są transformowane do aplikacji wynikowej za pomocą pewnych magicznych transformat. W innych słowach możnaby założyć, że wystarczy jedynie trochę porysować i po dodaniu pewnych atrybutów utworzenie aplikacji to jedynie wydanie polecenia Generate. Trochę się człowiek nasłuchał o tego typu programowaniu, że fajne i takie tam, ale praktycznej wiedzy żadnej. Czas to zmienić.
Rozpocząłem od wspomnianego artykułu Mariusza, a później zajrzałem na strony AndroMDA. Zacząłem od dostępnej dokumentacji, gdzie w Environment Setup napisano:
Install Maven - A repository containing all versioned dependencies. This repository is used during the build and deploy processes (very similar to the .NET Global Assembly Cache concept).
Użycie Mavena do tworzenia aplikacji zawsze spotyka się z moją aprobatą, więc nie miałem złudzeń, że dzisiaj będzie znowu przyjemnie. Wzmianka o .Net w kontekście Mavena była zaskakująca. Może ktoś coś napisać o tym .NET Global Assembly Cache w kilku krótkich, żołnierskich zdaniach? Ja tu wierzę, że pomysły nowatorskie płynące z projektów otwartych, a tu się okazuje, że w .Net to już dawno wszystko (?) było ;-)
Właśnie niedawno wyszła wersja Apache Maven 2.0.9, więc przy okazji uaktualnimy ją i popróbujemy się z AndroMDA.
Uwaga na potencjalny błąd w tandemie Maven-AndroMDA:
(Note that as of this writing, the latest version of Maven is 2.0.7, but it has a minor issue with AndroMDA 3.2 - this has been fixed in the latest snapshot release. Advanced users may wish to install Maven 2.0.7, but you will have to manually delete the section in app\pom.xml.)
Dzisiejszy pomysł to stworzenie aplikacij webowej z wykorzystaniem AndroMDA, które realizuje specyfikację MDA. Zamiast, jak to polecano w dokumentacji AndroMDA, uruchomienia aplikacji na JBAS skorzystam z aktrakcyjniejszej funkcjonalnie oferty serwera Java EE 5, potencjalnie Apache Geronimo (chociaż w obwodzie oczekuje i GlassFish).

Po zmianach pom.xml prezentuje się następująco:
W sekcji Install a UML tool proponuje się skorzystanie z narzędzia UML, w którym zobrazuję mój pomysł nowej aplikacji webowej, którą następnie wyeksportuję w odpowiednim formacie zrozumiałym dla AndroMDA. Mam dostęp do wszystkich wymienionych produktów, ale do IBM Rational Software Architect (obecnie w wersji 7.0.0.6), który wspiera UML2/EMF jest mi najbliżej skorzystam z niego (mógłbym również skorzystać z NetBeans IDE 6.1 i jego wsparcia UMLa, ale skoro nie jest wymieniony na stronie na razie odpada).
We wskazanej gotowej aplikacji na stronie TimeTracker Tour można znaleźć plik readme.txt, w którym napisano:
The project located in this directory has been generated by Naresh Bhatia using the andromdapp:generate Maven plugin.
Fajnie wiedzieć, że przynajmniej część mojej pracy mogę zrzucić na barki mavena. Spróbujmy dowiedzieć się więcej o tej wtyczce z pomocą mvn help:describe (tak mógłbym wszystko wyczytać w pliku, albo na stronie, ale pomyślałem, że pochwalę się moją znajomością Maven-Fu ;-)).
Kończę rozdział i po chwili jestem w Starter App. Zamiast jednak tworzyć aplikację z linii poleceń, skorzystam z NB.
Ctrl+Shift+N i z kategorii Maven wybieram Maven Project. Wciskam przycisk Add... gdzie podaję dane wtyczki, którą wykorzystam do tworzenia aplikacji.

Jak się okazuje takie podejście nie przejdzie, gdyż NB zakończy pracę z:

Jak w poprzednim projekcie w katalogu głównym znajduje się plik readme.txt (widoczny w NB w oknie Files, gdyż Projects ukrywa pliki, których nierozpoznaje).
Wykonuję mvn install w wydaniu NB, tj. Clean and Build. W pobieranych zależnościach, podczas budowania, pojawiają się myfaces-impl-1.1.1, tomahawk-1.1.1, aż kończę z
..po chwili...
No dobrze, dobrze - zajmę się i tym (co, jak się zaraz okaże, nie było właściwą decyzją). Do głównego pom.xml projektu dodaję
Na szczęście projekt AndroMDA przewidział taką sytuację, że chciałbym skorzystać z wtyczki poza projektem, gdzie w pom.xml mógłbym zdefiniować zależność i udostępnił gotowy plik zip z koniecznymi artefaktami mavenowymi do rozpakowania w lokalnym repozytorium mavena.
I pytanie konkursowe: Co oznacza skrót MDA?
Rozpocząłem od wspomnianego artykułu Mariusza, a później zajrzałem na strony AndroMDA. Zacząłem od dostępnej dokumentacji, gdzie w Environment Setup napisano:
Install Maven - A repository containing all versioned dependencies. This repository is used during the build and deploy processes (very similar to the .NET Global Assembly Cache concept).
Użycie Mavena do tworzenia aplikacji zawsze spotyka się z moją aprobatą, więc nie miałem złudzeń, że dzisiaj będzie znowu przyjemnie. Wzmianka o .Net w kontekście Mavena była zaskakująca. Może ktoś coś napisać o tym .NET Global Assembly Cache w kilku krótkich, żołnierskich zdaniach? Ja tu wierzę, że pomysły nowatorskie płynące z projektów otwartych, a tu się okazuje, że w .Net to już dawno wszystko (?) było ;-)
Właśnie niedawno wyszła wersja Apache Maven 2.0.9, więc przy okazji uaktualnimy ją i popróbujemy się z AndroMDA.
Uwaga na potencjalny błąd w tandemie Maven-AndroMDA:
(Note that as of this writing, the latest version of Maven is 2.0.7, but it has a minor issue with AndroMDA 3.2 - this has been fixed in the latest snapshot release. Advanced users may wish to install Maven 2.0.7, but you will have to manually delete the
Dzisiejszy pomysł to stworzenie aplikacij webowej z wykorzystaniem AndroMDA, które realizuje specyfikację MDA. Zamiast, jak to polecano w dokumentacji AndroMDA, uruchomienia aplikacji na JBAS skorzystam z aktrakcyjniejszej funkcjonalnie oferty serwera Java EE 5, potencjalnie Apache Geronimo (chociaż w obwodzie oczekuje i GlassFish).
jlaskowski@work /cygdrive/c/projs/sandboxUruchamiam NetBeans IDE 6.1 RC1 i importuję projekt, aby zmodyfikować pom.xml (plik konfiguracyjny "serce" projektu mavenowego). Wcześniej zainstalowałem netbeansową wtyczkę wspierającą projekty mavenowe (patrz Tworzenie wtyczek Maven 2 z NetBeans IDE 6.1), więc wystarczy Ctrl+Shift+O i wybrać katalog, który stworzyłem wcześniej ręcznie (auć, przecież mogłem to stworzyć z poziomu NB!).
$ mvn -v
Maven version: 2.0.9
Java version: 1.5.0_14
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
jlaskowski@work /cygdrive/c/projs/sandbox
$ mvn archetype:create -DgroupId=pl.jaceklaskowski.jsf.mda -DartifactId=mda-webapp
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:create] (aggregator-style)
[INFO] ------------------------------------------------------------------------
...
[INFO] OldArchetype created in dir: c:\projs\sandbox\mda-webapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Po zmianach pom.xml prezentuje się następująco:
<project xmlns="http://maven.apache.org/POM/4.0.0"Wybieram Build z menu kontekstowego projektu (zaznaczam projekt w widoku Projects i z menu pod prawym przyciskiem myszki wybieram Build). BUILD SUCCESSFUL w oknie Output upewnia mnie, że wszystko jest jak należy.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.jaceklaskowski.jsf.mda</groupId>
<artifactId>mda-webapp</artifactId>
<version>1.0</version>
<name>Aplikacja webowa z pomocą (Andro)MDA, Maven2 i NetBeans 6.1</name>
<url>http://www.jaceklaskowski.pl</url>
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.andromda.maven.plugins</groupId>
<artifactId>andromdapp-maven-plugin</artifactId>
<version>3.2</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>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
W sekcji Install a UML tool proponuje się skorzystanie z narzędzia UML, w którym zobrazuję mój pomysł nowej aplikacji webowej, którą następnie wyeksportuję w odpowiednim formacie zrozumiałym dla AndroMDA. Mam dostęp do wszystkich wymienionych produktów, ale do IBM Rational Software Architect (obecnie w wersji 7.0.0.6), który wspiera UML2/EMF jest mi najbliżej skorzystam z niego (mógłbym również skorzystać z NetBeans IDE 6.1 i jego wsparcia UMLa, ale skoro nie jest wymieniony na stronie na razie odpada).
We wskazanej gotowej aplikacji na stronie TimeTracker Tour można znaleźć plik readme.txt, w którym napisano:
The project located in this directory has been generated by Naresh Bhatia using the andromdapp:generate Maven plugin.
Fajnie wiedzieć, że przynajmniej część mojej pracy mogę zrzucić na barki mavena. Spróbujmy dowiedzieć się więcej o tej wtyczce z pomocą mvn help:describe (tak mógłbym wszystko wyczytać w pliku, albo na stronie, ale pomyślałem, że pochwalę się moją znajomością Maven-Fu ;-)).
jlaskowski@work ~albo nawet z parametrem -Dmedium=true, który przedstawi funkcjonalność wtyczki w okrojonej postaci (dla czytających o mocnych nerwach proponuje się opcję -Dfull=true. Uprasza się o zapięcie pasów przez uruchomieniem polecenia ;-)).
$ mvn help:describe -Dplugin=org.andromda.maven.plugins:andromdapp-maven-plugin:3.2
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [help:describe] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:describe]
[INFO] Plugin: 'org.andromda.maven.plugins:andromdapp-maven-plugin:3.2'
-----------------------------------------------
Group Id: org.andromda.maven.plugins
Artifact Id: andromdapp-maven-plugin
Version: 3.2
Goal Prefix: andromdapp
Description:
A plugin for running AndroMDA's AndroMDApp application generator
to generate Maven2 AndroMDA powered applications.
jlaskowski@work ~Importuję aplikację timetracker-completed do NB i wykonuję Clean and Build (przecież nie będę tego robił z linii poleceń, kiedy dotykam MDA, nieprawdaż?). Jedna uwaga, projekt TimeTracker po zaimportowaniu zostanie oznaczony przez NB jako posiadający błędy i wykonanie budowania spowoduje rozwiązanie problemów (niedostępności bibliotek w lokalnym repozytorium mavena). Trochę to trwa zanim aplikacja zostanie zbudowana, aż po około 2-3 minutach pojawia się [ERROR]BUILD FAILURE. Hmm, czyżbym tracił cierpliwość? Próbuję innymi technikami - z menu kontekstowego projektu TimeTracker wybieram Open Required Projects (wcześniej jedynie otworzyłem projekt główny) i sprawdzam klasę UserVOComparator (projekt TimeTracker Common (jar)). Najwyraźniej nie ma klasy UserVO w projekcie. Wykonanie polecenia
$ mvn help:describe -Dplugin=org.andromda.maven.plugins:andromdapp-maven-plugin:3.2 -Dmedium=true
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [help:describe] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:describe]
[INFO] Plugin: 'org.andromda.maven.plugins:andromdapp-maven-plugin:3.2'
-----------------------------------------------
Group Id: org.andromda.maven.plugins
Artifact Id: andromdapp-maven-plugin
Version: 3.2
Goal Prefix: andromdapp
Description:
A plugin for running AndroMDA's AndroMDApp application generator
to generate Maven2 AndroMDA powered applications.
Mojos:
Goal: 'clean-structure'
Description:
Removes the an AndroMDApp generated application structure.
Goal: 'generate'
Description:
AndroMDA application generator Mojo.
Goal: 'build'
Description:
A Mojo used for executing the build goals from the top level project.
Goal: 'deploy'
Description:
Provides the deployment of applications to a given directory.
Goal: 'eclipse'
Description:
Writes the necessary .classpath and .project files for a new eclipse application.
Goal: 'maven'
Description:
Allows the execution of maven from a given project (searches for nested pom.xml files and executes Maven)
Goal: 'schema'
Description:
Provides the ability to drop database schemas.
Goal: 'instrument-scripts'
Description:
Allows for the {@link ScriptClassGenerator} mojo to be invoked. on one or more given classes.
Goal: 'undeploy'
Description:
Provides the undeployment of applications from a given directory.
jlaskowski@work /cygdrive/c/temp/timetracker-completednie napawa optymizmem. Może ten plik jest tworzony dynamicznie podczas budowania? Zgodnie z dokumentacją powinienem mvn install w katalogu głównym aplikacji. Niech będzie.
$ find . -name UserVO.java -print
jlaskowski@work /cygdrive/c/temp/timetracker-completedPięknie! Napawa optymizmem do dalszej ewaluacji, co?
$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An invalid artifact was detected.
This artifact might be in your project's POM, or it might have been included transitively
during the resolution process. Here is the information we do have for
o GroupID: org.andromda.timetracker
o ArtifactID: timetracker-common
o Version: <<< MISSING >>>
o Type: jar
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.artifact.InvalidArtifactRTException: For artifact {org.andromda.timetracker:timetracker-common:null:jar}:
The version cannot be empty.
at org.apache.maven.artifact.DefaultArtifact.validateIdentity(DefaultArtifact.java:147)
at org.apache.maven.artifact.DefaultArtifact.<init>(DefaultArtifact.java:122)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:158)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createDependencyArtifact(DefaultArtifactFactory.java:58)
at org.apache.maven.project.DefaultMavenProjectBuilder.createManagedVersionMap(DefaultMavenProjectBuilder.java:452)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:912)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:506)
at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:198)
at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:583)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:461)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:534)
at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:365)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:292)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Kończę rozdział i po chwili jestem w Starter App. Zamiast jednak tworzyć aplikację z linii poleceń, skorzystam z NB.
Ctrl+Shift+N i z kategorii Maven wybieram Maven Project. Wciskam przycisk Add... gdzie podaję dane wtyczki, którą wykorzystam do tworzenia aplikacji.

Jak się okazuje takie podejście nie przejdzie, gdyż NB zakończy pracę z:
[ERROR]BUILD ERRORWracam na linię poleceń. Już będę grzeczny.
------------------------------------------------------------------------
Error creating from archetype
Embedded error: The META-INF/maven/archetype.xml descriptor cannot be found.
jlaskowski@work /cygdrive/c/projs/sandboxOtwieram projekt mda-powitanie i projekty zależne w NB (Ctrl+Shift+O). Teraz jest czysto (z ostrzeżeniami, których udam, że nie zauważam).
$ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [andromdapp:generate]
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).
log4j:WARN Please initialize the log4j system properly.
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 location in which your new application will be created (i.e. f:/java/development):
c:/projs/sandbox
Please enter your first and last name (i.e. Chad Brandon):
Jacek Laskowski
Which kind of modeling tool will you use? [uml1.4, uml2, emf-uml2]:
emf-uml2
Please enter the name of your J2EE project (i.e. Animal Quiz):
Powitanie
Please enter an id for your J2EE project (i.e. animalquiz):
mda-powitanie
Please enter a version for your project (i.e. 1.0-SNAPSHOT):
1.0
Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):
pl.jaceklaskowski.powitanie
Would you like an EAR or standalone WAR? [ear, war]:
ear
Please enter the type of transactional/persistence cartridge to use [hibernate, ejb, ejb3, spring, none]:
ejb3
Please enter the database backend for the persistence layer
[hypersonic, mysql, oracle, db2, informix, mssql, pointbase, postgres, sybase, sabdb, progress, derby]:
derby
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 to use Facelets or JSP as your view type for JSF? [facelets, jsp]:
facelets
Would you like to use the JBoss Seam application framework? [yes, no]:
yes
Would you like to be able to expose your services as web services? [yes, no]:
yes
Would you like to use the JSR181 (webservice defined by annotations) EJB3 cartridge specific implementation? [yes, no]:
yes
-------------------------------------------------------------------------------------
G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n
-------------------------------------------------------------------------------------
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/core/target/classes/META-INF/ejb-jar.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/core/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
Output: 'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'
-------------------------------------------------------------------------------------
New application generated to --> 'file:/c:/projs/sandbox/mda-powitanie/'
Instructions for your new application --> 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
-------------------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Jak w poprzednim projekcie w katalogu głównym znajduje się plik readme.txt (widoczny w NB w oknie Files, gdyż Projects ukrywa pliki, których nierozpoznaje).
Wykonuję mvn install w wydaniu NB, tj. Clean and Build. W pobieranych zależnościach, podczas budowania, pojawiają się myfaces-impl-1.1.1, tomahawk-1.1.1, aż kończę z
------------------------------------------------------------------------Ech, znowu kłopoty. Kasuję projekt i zaczynam jeszcze raz, tyle że bez Seama i Web Services (po tylu problemach stałem się mniej wymagający).
[ERROR]BUILD ERROR
------------------------------------------------------------------------
Failed to resolve artifact.
Missing:
----------
1) org.andromda.profiles.uml14:andromda-profile-seam:xml.zip:1.0-SNAPSHOT
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.andromda.profiles.uml14 -DartifactId=andromda-profile-seam \
-Dversion=1.0-SNAPSHOT -Dpackaging=xml.zip -Dfile=/path/to/file
Path to dependency:
1) pl.jaceklaskowski.powitanie:mda-powitanie-mda:pom:1.0
2) org.andromda.profiles.uml14:andromda-profile-seam:xml.zip:1.0-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
pl.jaceklaskowski.powitanie:mda-powitanie-mda:pom:1.0
from the specified remote repositories:
central (http://repo1.maven.org/maven2),
andromda (http://team.andromda.org/maven2)
jlaskowski@work /cygdrive/c/projs/sandboxPonownie otwarcie projektu w NB i Clean and Build, które kończy się:
$ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [andromdapp:generate]
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).
log4j:WARN Please initialize the log4j system properly.
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 location in which your new application will be created (i.e. f:/java/development):
c:/projs/sandbox
Please enter your first and last name (i.e. Chad Brandon):
Jacek Laskowski
Which kind of modeling tool will you use? [uml1.4, uml2, emf-uml2]:
emf-uml2
Please enter the name of your J2EE project (i.e. Animal Quiz):
Powitanie
Please enter an id for your J2EE project (i.e. animalquiz):
mda-powitanie
Please enter a version for your project (i.e. 1.0-SNAPSHOT):
1.0
Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):
pl.jaceklaskowski.powitanie
Would you like an EAR or standalone WAR? [ear, war]:
ear
Please enter the type of transactional/persistence cartridge to use [hibernate, ejb, ejb3, spring, none]:
ejb3
Please enter the database backend for the persistence layer
[hypersonic, mysql, oracle, db2, informix, mssql, pointbase, postgres, sybase, sabdb, progress, derb
derby
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 to use Facelets or JSP as your view type for JSF? [facelets, jsp]:
facelets
Would you like to use the JBoss Seam application framework? [yes, no]:
no
Would you like to be able to expose your services as web services? [yes, no]:
no
-------------------------------------------------------------------------------------
G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n
-------------------------------------------------------------------------------------
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/core/target/classes/META-INF/ejb-jar.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/core/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
Output: 'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'
-------------------------------------------------------------------------------------
New application generated to --> 'file:/c:/projs/sandbox/mda-powitanie/'
Instructions for your new application --> 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
-------------------------------------------------------------------------------------
INFO [AndroMDA] completed model processing --> TIME: 10.688[s], RESOURCES WRITTEN: 118co jednak mnie nie przeraża, bo sam projekt został zbudowany, a jedynie projekt eclipsowy się nie utworzył.
[andromdapp:eclipse {execution: default}]
Project file written --> 'C:\projs\sandbox\mda-powitanie\.project'
found project pl.jaceklaskowski.powitanie:mda-powitanie-common:jar:1.0
found project pl.jaceklaskowski.powitanie:mda-powitanie-core:ejb:1.0
found project pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
------------------------------------------------------------------------
[ERROR]BUILD ERROR
------------------------------------------------------------------------
Error creating eclipse configuration
Embedded error: Unable to download the artifact from any repository
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.jboss -DartifactId=jboss-remoting \
-Dversion=4.0.4-GA -Dpackaging=jar -Dfile=/path/to/file
org.jboss:jboss-remoting:jar:4.0.4-GA
from the specified remote repositories:
central (http://repo1.maven.org/maven2),
andromda (http://team.andromda.org/maven2)
..po chwili...
No dobrze, dobrze - zajmę się i tym (co, jak się zaraz okaże, nie było właściwą decyzją). Do głównego pom.xml projektu dodaję
<repository>i ponownie podchodzę do Clean and Build. Znowu błąd. Dziwne, ale tego jboss-remoting nie ma w repozytorium jboss.com. Jest jednak w wersji 4.0.5-GA w repozytorium andromda (http://team.andromda.org/maven2). Wniosek: wtyczka andromdapp-maven-plugin w wersji 3.2 tworzy projekt z przestarzałymi (i niedostępnymi) zależnościami. Na stronie wtyczki andromdapp-maven-plugin data ostatniej publikacji to 01 Mar 2008 11:53 CET, jednakże jest to dla wersji 3.3-SNAPSHOT. Nie ma wielkiego wyboru jak popróbować jej.
<id>jboss.com</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
</repository>
Na szczęście projekt AndroMDA przewidział taką sytuację, że chciałbym skorzystać z wtyczki poza projektem, gdzie w pom.xml mógłbym zdefiniować zależność i udostępnił gotowy plik zip z koniecznymi artefaktami mavenowymi do rozpakowania w lokalnym repozytorium mavena.
jlaskowski@work /cygdrive/c/projs/sandboxGotowe! Znowu podchodzę do stworzenia projektu z wtyczką andromdapp-maven-plugin w wersji 3.3-SNAPSHOT.
$ cd c:/.m2
jlaskowski@work /cygdrive/c/.m2
$ wget -c \
http://team.andromda.org/maven2/org/andromda/maven/plugins/\
andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip
...
12:13:49 (153.83 KB/s) - `andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip' saved [80881/80881]
jlaskowski@work /cygdrive/c/.m2
$ jar -xvf andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip
created: org/
created: org/andromda/
created: org/andromda/maven/
created: org/andromda/maven/plugins/
created: org/andromda/maven/plugins/andromdapp-maven-plugin/
created: org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/
inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-3.3-SNAPSHOT.jar
inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-3.3-SNAPSHOT.pom
inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/maven-metadata-local.xml
jlaskowski@work /cygdrive/c/projs/sandboxTego już za wiele! Wracam do wtyczki w wersji 3.2 i rezygnuję z EJB3, co powinno znieść wymaganie odnośnie jakichkolwiek zależności jbossowych.
$ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.3-SNAPSHOT:generate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
GroupId: org.andromda.maven.plugins
ArtifactId: andromda-maven-plugins
Version: 3.3-SNAPSHOT
Reason: Unable to download the artifact from any repository
org.andromda.maven.plugins:andromda-maven-plugins:pom:3.3-SNAPSHOT
from the specified remote repositories:
ibiblio.org (http://repo1.maven.org/maven2)
jlaskowski@work /cygdrive/c/projs/sandboxPonownie Clean and Build w NB.
$ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [andromdapp:generate]
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).
log4j:WARN Please initialize the log4j system properly.
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 location in which your new application will be created (i.e. f:/java/development):
c:/projs/sandbox
Please enter your first and last name (i.e. Chad Brandon):
Jacek Laskowski
Which kind of modeling tool will you use? [uml1.4, uml2, emf-uml2]:
emf-uml2
Please enter the name of your J2EE project (i.e. Animal Quiz):
Powitanie
Please enter an id for your J2EE project (i.e. animalquiz):
mda-powitanie
Please enter a version for your project (i.e. 1.0-SNAPSHOT):
1.0
Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):
pl.jaceklaskowski.powitanie
Would you like an EAR or standalone WAR? [ear, war]:
ear
Please enter the type of transactional/persistence cartridge to use [hibernate, ejb, ejb3, spring, none]:
none
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 to use Facelets or JSP as your view type for JSF? [facelets, jsp]:
jsp
Would you like to be able to expose your services as web services? [yes, no]:
no
-------------------------------------------------------------------------------------
G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n
-------------------------------------------------------------------------------------
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
Output: 'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'
Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'
Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'
-------------------------------------------------------------------------------------
New application generated to --> 'file:/c:/projs/sandbox/mda-powitanie/'
Instructions for your new application --> 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'
-------------------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
------------------------------------------------------------------------Teraz jest jeszcze gorzej. Na dzisiaj koniec tego ewaluowania AndroMDA. Teraz już wiem, dlaczego tak niewielu korzysta z MDA. Fajne w założeniach, ale po prostu nie działa (albo ja coś pokręciłem i zamiast dać się prowadzić za rękę to przekombinowałem). Może ktoś ma jakieś sugestie gdzie, co i jak należałoby wykonać, aby skorzystać jednak z AndroMDA? Jakieś doświadczenia z narzędziem, albo jego konkurentami mile widziane.
[ERROR]BUILD ERROR
------------------------------------------------------------------------
Failed to resolve artifact.
Missing:
----------
1) org.andromda.cartridges:andromda-jsf-cartridge-components:jar:unknown
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.andromda.cartridges -DartifactId=andromda-jsf-cartridge-components \
-Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file
Path to dependency:
1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
2) org.andromda.cartridges:andromda-jsf-cartridge-components:jar:unknown
2) oracle.adf.view.faces:adf-faces-api:jar:unknown
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=oracle.adf.view.faces -DartifactId=adf-faces-api \
-Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file
Path to dependency:
1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
2) oracle.adf.view.faces:adf-faces-api:jar:unknown
3) org.apache.myfaces:tomahawk:jar:unknown
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.myfaces -DartifactId=tomahawk \
-Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file
Path to dependency:
1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
2) org.apache.myfaces:tomahawk:jar:unknown
4) org.apache.myfaces:myfaces-api:jar:unknown
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.myfaces -DartifactId=myfaces-api \
-Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file
Path to dependency:
1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
2) org.apache.myfaces:myfaces-api:jar:unknown
----------
4 required artifacts are missing.
for artifact:
pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0
from the specified remote repositories:
central (http://repo1.maven.org/maven2),
andromda (http://team.andromda.org/maven2)
I pytanie konkursowe: Co oznacza skrót MDA?
- "Moja Droga Agatko!" (szczęśliwi, którzy mogą tak tytułować listy do swej ukochanej)
- Mam Dość, Ale się nie poddaję
- Model-Driven Architecture
- ManDarynA gwarowo
16 kwietnia 2008
Pierwsze kroki z UML w NetBeans 6.1
UML (Unified Modelling Language) nigdy nie należał do moich podstawowych narzędzi programistycznych, którymi posługiwałem się podczas tworzenia oprogramowania. Ostatnimi jednak czasy odczuwam niedosyt różnorodności sposobów przedstawiania swoich myśli i zauważam, że mowa (jakkolwiek wyćwiczona) nierzadko przedstawia je właściwie. UML jest językiem obrazowania idei i słowo obrazowanie, jakkolwiek nie stosowane szeroko w tym kontekście, jak najbardziej mi tu pasuje i wyraża, co autor miał na myśli. Język UML jest sposobem wizualnego przedstawiania myśli i pomaga w ich relacji innym. Warto się zainteresować UMLem i mimo nieczęstego użycia w naszych projektach, zacząć go stosować (nawet mimo braku jego użycia przez cały zespół projektowy, gdyż dobre rzeczy same się reklamują i raz zauważony w użyciu UML może stać się podstawowym językiem wymiany informacji). Więcej o UML na stronach "producenta" - http://www.uml.org.
Dzisiaj miałem przyjemność przeczytać wpis Expectation driven developement in NetBeans IDE 6.1 Beta, gdzie autor zastosował umlowy diagram klas do zademonstrowania, co będzie tworzył, a dalej, w komentarzach, znalazłem informację o wsparciu UMLa przez NetBeans 6.1. Dodając do tego moje (wciąż bierne) zainteresowanie UMLem i trwający konkurs NetBeans IDE 6.1 Beta Blogging Contest mogłem ponownie upiec dwie pieczenie na jednym ogniu - zapoznać się z UMLem i sprawdzić jego wsparcie w NetBeans 6.1, a w dodatku zgłosić mój wpis w konkursie (to w sumie daje aż 3 pieczenie na jednym ogniu!).
Zacząłem od lektury artykułu w sekcji UML NetBeansa - Why Model With UML?, gdzie napisano This article serves as a primer for the basic concepts of UML oraz This article is written for those engineers who can never find time to model a project before starting to code and for those engineers who have not yet considered creating models of their systems prior to coding them, aż w końcu This article presents some methods and strategies to help you be more efficient and possibly even save time. To jakby stworzone specjalnie dla mnie! Po 10 minutach miałem go za sobą. Mimo, że wiele tez przedstawionych w artykule było mi znanych, artykuł czytałem z wielkim zainteresowaniem. Obawiałem się początkowo, że będzie trochę przydługi, ale był w sam raz i zaprezentował UML w sposób nie pozostawiający złudzeń, że jest to obowiązkowy sposób na rozpoczęcie projektu, każdego projektu.
Kolejny artykuł w serii wprowadzenia UMLa to UML: Developing Applications. Trochę mnie przeraziło Expected duration: 25 minutes, ale pomyślałem, że skrócę tu i tam, abym jedynie rozeznał się gdzie i jak zacząć, aby ostatecznie przeczytać artykuł i samemu coś stworzyć. Podczas lektury artykułu zdecydowałem się go nieznacznie uatrakcyjnić, w ten sposób, że w artykule tworzona jest aplikacja desktopowa, a ja postanowiłem stworzyć aplikację webową. Oni desktopową, ja webową.
Nie siląć się na wymyślny przykład postanowiłem stworzyć aplikację webową, która będzie witała użytkownika w języku, który jest przez niego wybrany jako domyślny w przeglądarce.
Ctrl+Shift+N i z kategorii Web wybrałem Web Application.
Podałem dane projektu:
Project Name: PowitanieWebApp
Server: GlassFish V2
Context Path: /powitanie
Frameworks: JavaServer Faces
I zatwierdziłem je Finish.
Ctrl+Shift+N i z kategorii UML wybrałem Java-Platform Model.

Opis tego typu projektu - Java-Platform Model - bardzo wymyślny:
Creates a platform-dependent modeling project in the system with empty containers for your model and elements. As you create and populate your model, Java modeling (business) rules are applied to the model.
Nic nie zrozumiałem!
Wciskam Next > i jako w polu Project Name wpisuję PowitanieWebAppUML. Finish.
Wybieram Class Diagram o nazwie PowitanieClassDiagram.

Finish.
Pojawi się edytor UML z diagramem klas. Po prawej stronie pojawi się paleta elementów UML.

Utworzyłem klasę Powitanie z mapą pozdrowień (zaznaczam element Class i przeciągam do edytora. Enter i podaję nazwę Powitanie). Tworzę pakiet pl.jaceklaskowski.jsf.uml z użyciem elementu Package. Ciekawym podejściem jest umożliwienie stworzenia wielu elementów danego typu (na przykład pakietów) i nadawanie im nazw przez Enter, czyli lewy przycisk myszy, Enter, wpisuję nazwę i ponownie Enter, i tak z kolejnymi elementami.
Definiuję atrybut Map<String, String> powitania = new HashMap<String, String>() i kasuję operację setPowitania.
Dodałem operację (metodę) addPowitanie(String jezyk, String powitanie)

Prawym przyciskiem na projekcie PowitanieWebAppUML wybieram menu Generate Code, gdzie jako Target Project podaję PowitanieWebApp. Zatwierdzam OK.
Projekt PowitanieWebApp zostanie oznaczony jako błędny (czerwona ikona na nazwie projektu), gdyż Map oraz HashMap są podane bez ich pakietów. Otwieram Powitanie.java, Ctrl+Shift+I i Enter. Po chwili NetBeans rozpozna zmiany i zniesie komunikat błędu. Jest czysto.
Dodaję ciało do konstruktora i metody addPowitanie. Ostatecznie klasa prezentuje się następująco:
Pora na zdefiniowanie nowopowstałej klasy jako ziarna zarządzanego JSF. Tutaj niestety jedynym sposobem jest edycja pliku konfiguracyjnego aplikacji jsf - faces-config.xml. Ale moment! Niespodzianka! Możliwość definiowania ziaren jest możliwa poprzez Add Managed Bean... w widoku XML edytora faces-config.xml.

Tego wcześniej nie wiedziałem, ani nie napotkałem w artykułach netbeansowych. Choćby dlatego warto było zacząć naukę UML (i już mi się będzie UML w wykonaniu NetBeans mile kojarzył ;-))
Definiuję nowe ziarno powitanie, wybieram klasę z listy Browse... o zasięgu session.

Zatwierdzam przyciskiem Add.
Plik faces-config.xml prezentuje się następująco:
Najwyższy czas przekonać się o działaniu mojej aplikacji webowej. Wciskam F6 i po chwili moim oczom ukazuje się...

Zmiana języka na pl (w Firefox - Tools > Options... > Advanced > General > Languages) i F5 (odświeżenie strony) i

A na ru (rosyjski)

Działa! Niemiecki pozostawiam jako ćwiczenie domowe.
Czy to zademonstrowało UMLa w wykonaniu NetBeans 6.1 w pełni? Wątpię. Kolejnym razem jednak znowu coś spróbuję i może w ten sposób poznam UML lepiej. Może nawet zacznę go regularnie używać?
Na zakończenie sprawdzę jeszcze co udostępnia NetBeans w demonstracyjnych aplikacjach - Ctrl+Shift+N, Samples > UML i jest jedynie UML Bank App Sample.

Niewiele. Na szczęście przykład działa, chociaż odpowiada temu, co właśnie przeczytałem. Potrzebuję artykułu o tworzeniu aplikacji webowych z użyciem UML. Choćby niewielki, który wskaże, czy w ogóle ma to sens. Wciąż poszukuję...
I pytanie konkursowe (w trwającym konkursie bez nagród): Co to jest UML?
Dzisiaj miałem przyjemność przeczytać wpis Expectation driven developement in NetBeans IDE 6.1 Beta, gdzie autor zastosował umlowy diagram klas do zademonstrowania, co będzie tworzył, a dalej, w komentarzach, znalazłem informację o wsparciu UMLa przez NetBeans 6.1. Dodając do tego moje (wciąż bierne) zainteresowanie UMLem i trwający konkurs NetBeans IDE 6.1 Beta Blogging Contest mogłem ponownie upiec dwie pieczenie na jednym ogniu - zapoznać się z UMLem i sprawdzić jego wsparcie w NetBeans 6.1, a w dodatku zgłosić mój wpis w konkursie (to w sumie daje aż 3 pieczenie na jednym ogniu!).
Zacząłem od lektury artykułu w sekcji UML NetBeansa - Why Model With UML?, gdzie napisano This article serves as a primer for the basic concepts of UML oraz This article is written for those engineers who can never find time to model a project before starting to code and for those engineers who have not yet considered creating models of their systems prior to coding them, aż w końcu This article presents some methods and strategies to help you be more efficient and possibly even save time. To jakby stworzone specjalnie dla mnie! Po 10 minutach miałem go za sobą. Mimo, że wiele tez przedstawionych w artykule było mi znanych, artykuł czytałem z wielkim zainteresowaniem. Obawiałem się początkowo, że będzie trochę przydługi, ale był w sam raz i zaprezentował UML w sposób nie pozostawiający złudzeń, że jest to obowiązkowy sposób na rozpoczęcie projektu, każdego projektu.
Kolejny artykuł w serii wprowadzenia UMLa to UML: Developing Applications. Trochę mnie przeraziło Expected duration: 25 minutes, ale pomyślałem, że skrócę tu i tam, abym jedynie rozeznał się gdzie i jak zacząć, aby ostatecznie przeczytać artykuł i samemu coś stworzyć. Podczas lektury artykułu zdecydowałem się go nieznacznie uatrakcyjnić, w ten sposób, że w artykule tworzona jest aplikacja desktopowa, a ja postanowiłem stworzyć aplikację webową. Oni desktopową, ja webową.
Nie siląć się na wymyślny przykład postanowiłem stworzyć aplikację webową, która będzie witała użytkownika w języku, który jest przez niego wybrany jako domyślny w przeglądarce.
Ctrl+Shift+N i z kategorii Web wybrałem Web Application.
Podałem dane projektu:
Project Name: PowitanieWebApp
Server: GlassFish V2
Context Path: /powitanie
Frameworks: JavaServer Faces
I zatwierdziłem je Finish.
Ctrl+Shift+N i z kategorii UML wybrałem Java-Platform Model.

Opis tego typu projektu - Java-Platform Model - bardzo wymyślny:
Creates a platform-dependent modeling project in the system with empty containers for your model and elements. As you create and populate your model, Java modeling (business) rules are applied to the model.
Nic nie zrozumiałem!
Wciskam Next > i jako w polu Project Name wpisuję PowitanieWebAppUML. Finish.
Wybieram Class Diagram o nazwie PowitanieClassDiagram.

Finish.
Pojawi się edytor UML z diagramem klas. Po prawej stronie pojawi się paleta elementów UML.

Utworzyłem klasę Powitanie z mapą pozdrowień (zaznaczam element Class i przeciągam do edytora. Enter i podaję nazwę Powitanie). Tworzę pakiet pl.jaceklaskowski.jsf.uml z użyciem elementu Package. Ciekawym podejściem jest umożliwienie stworzenia wielu elementów danego typu (na przykład pakietów) i nadawanie im nazw przez Enter, czyli lewy przycisk myszy, Enter, wpisuję nazwę i ponownie Enter, i tak z kolejnymi elementami.
Definiuję atrybut Map<String, String> powitania = new HashMap<String, String>() i kasuję operację setPowitania.
Dodałem operację (metodę) addPowitanie(String jezyk, String powitanie)

Prawym przyciskiem na projekcie PowitanieWebAppUML wybieram menu Generate Code, gdzie jako Target Project podaję PowitanieWebApp. Zatwierdzam OK.
Projekt PowitanieWebApp zostanie oznaczony jako błędny (czerwona ikona na nazwie projektu), gdyż Map oraz HashMap są podane bez ich pakietów. Otwieram Powitanie.java, Ctrl+Shift+I i Enter. Po chwili NetBeans rozpozna zmiany i zniesie komunikat błędu. Jest czysto.
Dodaję ciało do konstruktora i metody addPowitanie. Ostatecznie klasa prezentuje się następująco:
package pl.jaceklaskowski.jsf.uml;Owe znaczniki <editor-fold> są związane z powiązaniem klasy z diagramem UML.
import java.util.HashMap;
import java.util.Map;
//
// #[regen=yes,id=DCE.0C3BC662-D50C-31DA-16B7-26AFB9E13435]
//
public class Powitanie {
//
// #[regen=yes,id=DCE.20E0A115-46D3-0681-089A-41017816B6C6]
//
private Mappowitania = new HashMap ();
//
// #[regen=yes,id=DCE.5585E6DF-BAC1-C496-0665-DEC6A9BA153E]
//
public Powitanie () {
// zdefiniuj kilka powitań
powitania.put("en", "Hi!");
powitania.put("pl", "Cześć!");
powitania.put("de", "MoinMoin!");
powitania.put("ru", "Zdrastwujcie!");
}
//
// #[regen=yes,id=DCE.5AB5D39E-7AF1-D127-881C-3F9F766AE597]
//
public void addPowitanie (String jezyk, String powitanie) {
powitania.put(jezyk, powitanie);
}
//
// #[regen=yes,regenBody=yes,id=DCE.383F3A78-B7A8-812E-E5D4-B13087852CFE]
//
public MapgetPowitania () {
return powitania;
}
}
Pora na zdefiniowanie nowopowstałej klasy jako ziarna zarządzanego JSF. Tutaj niestety jedynym sposobem jest edycja pliku konfiguracyjnego aplikacji jsf - faces-config.xml. Ale moment! Niespodzianka! Możliwość definiowania ziaren jest możliwa poprzez Add Managed Bean... w widoku XML edytora faces-config.xml.

Tego wcześniej nie wiedziałem, ani nie napotkałem w artykułach netbeansowych. Choćby dlatego warto było zacząć naukę UML (i już mi się będzie UML w wykonaniu NetBeans mile kojarzył ;-))
Definiuję nowe ziarno powitanie, wybieram klasę z listy Browse... o zasięgu session.

Zatwierdzam przyciskiem Add.
Plik faces-config.xml prezentuje się następująco:
<?xml version='1.0' encoding='UTF-8'?>Zmieniam stronę welcomeJSF.jsp dodając wywołanie ziarna:
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>powitanie</managed-bean-name>
<managed-bean-class>pl.jaceklaskowski.jsf.uml.Powitanie</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
<%@page contentType="text/html"%>Zmiana polega na wywołaniu metody getPowitania() ziarna powitanie zwracającej mapę, której kluczem jest język, który w JSF uzyskuje się poprzez request.locale.language, podczas gdy w JSP za pomocą pageContext.request.locale.language (to są dwa różne języki EL rozróżniane przez znaki # oraz $, odpowiednio).
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pozdrowienia</title>
</head>
<body>
<f:view>
Powitanie w języku <b>${pageContext.request.locale.language}</b> brzmi...
<h1><h:outputText value="#{powitanie.powitania[request.locale.language]}" /></h1>
</f:view>
</body>
</html>
Najwyższy czas przekonać się o działaniu mojej aplikacji webowej. Wciskam F6 i po chwili moim oczom ukazuje się...

Zmiana języka na pl (w Firefox - Tools > Options... > Advanced > General > Languages) i F5 (odświeżenie strony) i

A na ru (rosyjski)

Działa! Niemiecki pozostawiam jako ćwiczenie domowe.
Czy to zademonstrowało UMLa w wykonaniu NetBeans 6.1 w pełni? Wątpię. Kolejnym razem jednak znowu coś spróbuję i może w ten sposób poznam UML lepiej. Może nawet zacznę go regularnie używać?
Na zakończenie sprawdzę jeszcze co udostępnia NetBeans w demonstracyjnych aplikacjach - Ctrl+Shift+N, Samples > UML i jest jedynie UML Bank App Sample.

Niewiele. Na szczęście przykład działa, chociaż odpowiada temu, co właśnie przeczytałem. Potrzebuję artykułu o tworzeniu aplikacji webowych z użyciem UML. Choćby niewielki, który wskaże, czy w ogóle ma to sens. Wciąż poszukuję...
I pytanie konkursowe (w trwającym konkursie bez nagród): Co to jest UML?
29 października 2006
Moje poszukiwania (darmowych) narzędzi UML
Próbuję okiełznać kilka projektów wolnodostępnych (w tym przede wszystkim Apache OpenEJB) i pomyślałem sobie, że warto zwrócić uwagę na dostępne narzędzia UML do rozrysowania zależności ich klas. Najbardziej zależy mi na diagramie przepływu (ang. sequence diagram), więc postanowiłem sprawdzić co mamy dostępnego na rynku...za darmo. Rozważam jedynie produkty niekomercyjne, bądź wersje dla społeczności - community edition - czy wersje przeznaczone dla projektów wolnodostępnych (ang. open source license), bo w końcu właśnie dla takich projektów zamierzam je wykorzystać.
Jest kilka kryteriów jakim poddaję te narzędzia:
Zabrałem się za poszukiwanie innego. Wpisałem w Google - Eclipse UML - i...dostałem odnośnik do Omondo EclipseUML (http://www.omondo.com). Słyszałem o nim już wcześniej, więc przejrzawszy stronę domową i dowiedziawszy się, że jest to wersja rozszerzająca Eclipse postanowiłem sprawdzić to cudeńko. Nie zastanawiając się długo pobrałem darmową wersję 3.2.20061006 i zainstalowałem ją w osobnym Extension Location w Eclipse. Rozpocząłem ewaluację. Pierwsze wrażenia całkiem pozytywne, szczególnie po tych nieprzyjemnych z ArgoUML. Darmowy, wspiera Eclipse 3.2.1, można zainstalować w osobnym katalogu bez ryzyka zniszczenia Eclipse i w końcu ma wsparcie dla wywołań metod własnych obiektu, który jest jednocześnie wywołującym i odbierającym włącznie z możliwością rozrysowania podwywołań. Wszystkie ładnie się układało, aż do momentu, kiedy po dodaniu kolejnej klasy i metody diagram zaczął robić się zbyt wysoki, tzn. każde dodanie nowej metody (a było ich nie więcej niż 10!) powodowało, że diagram rozszerzał się w pionie do niezarządzalnych rozmiarów. Dodatkowo linie reprezentujące czas życia obiektów nie były dopasowywane do nowych rozmiarów, więc przyszło mi "bawić się" z rozciąganiem i układaniem obiektów zamiast skupić się na ich wprowadzaniu, gdzie resztę powinno obsłużyć samo narzędzie (pamiętałem, że w którymś z narzędzi widziałem kiedyś możliwość upiększenia rozmieszczenia obiektów na diagramie). Po kilku godzinach zniechęcony, stwierdziłem, że na rynku musi być ciekawsza oferta.
Przypomniałem sobie, że bodajże 5 lat temu byłem na szkoleniu o Bluestone Application Server (nota bene, ciekaw jestem, komu w Polsce przyszło z nim pracować - ciekawe, niszowe rozwiązanie, które po zakupie przez HP i transformacji do HP Application Server - HPAS - zostało ostatecznie zasypane i rozwój całkowicie zamilkł. Ciekawostką jest fakt, że ludzie z działu rozwoju zasilili działy rozwoju Oracle Application Server oraz JBoss Application Server)...Ale o czym to ja? Acha, ewaluacja. Przypomniałem sobie o MagicDraw (http://www.magicdraw.com). Okazało się nawet, że miałem go juz zainstalowanego na swoim komputerze (prawdopodobnie po tym, kiedy otrzymałem wiadomość do skrzynki o tym jaki jest wspaniały i darmowy i takie tam, skuszony zainstalowałem po to, aby...mieć). Na stronie domowej doczytałem o najświeższej wersji 11.6 i że uaktualnienia instaluje się za pomocą mechanizmu wbudowanego w narzędzie (co sprowadza się jedynie na sprawdzeniu, czy one istnieją i potwierdzenie ich instalacji). Kilka punktów dla niego. Na razie wciąż ewaluuję, więc niewiele napiszę o nim tym razem, ale sam sposób instalacji jest bardzo obiecujący. Przejrzałem kilka filmów instruktorzowych o tworzeniu diagramów (w tym i diagramu sekwencji) i nie ukrywam, że oczekuję samych dobroci ;-)
W międzyczasie uaktualniania MagicDraw przypomniałem sobie o innym narzędziu - mojej referencji dla NetBeans RCP - Visual Paradigm for UML (http://www.visual-paradigm.com/product/vpuml). Ostatnia wersja 5.3 ma możliwość instalacji jako produkt samodzielny, bądź jako wtyczka do różnych IDE, w tym i Eclipse IDE. Niestety musiałbym zainstalować narzędzie w domyślnym katalogu Eclipse, bez możliwości skorzystania z Extension Location, więc zaniechałem tego sposobu i pobrałem wersję samodzielną. Nadal oczekiwałem na dokończenie instalacji uaktualnienia MagicDraw, kiedy po pobraniu i instalacji (co przypominam sprowadza się do rozpakowania odpwiedniej paczki instalacyjnej) uruchomiłem w końcu narzędzie i...moim oczom ukazało się zapierające dech w piersiach narzędzie (to są odpowiednie słowa, aby wyrazić mój zachwyt tym co zobaczyłem). Panel startowy wbił mnie w krzesło - kompletnie zdębiałem - mnogość opcji tworzenia różnorodnych diagramów i różnorodność kolorów, w jakich zostało to zaprezentowane. Prawie kompletnie zapomniałem o instalowaniu MagicDraw ;-) Mimo wyłącznie pozytywnych opinii o MagicDraw, postanowiłem kontynuować moją ewaluację od Visual Paradigm for UML. W końcu przyjazność użytkowniowi (co składa się na intuicyjność) ma duże znaczenie dla mnie.
Dla zainteresowanych i tych wytrwałych w lekturze moich doświadczeń ewaluacyjnych (kolejność przypadkowa) napiszę, że na rynku około października ma pojawić się najnowsza wersja IBM Rational Software Architect 7.0 (o nazwie kodowej Caspian). Dlaczego dodałem informację o komercyjnym produkcie? Jak mówi się za kulisami, ma być dostępna wersja darmowa dla społeczności (ang. community edition) i oparta o Eclipse 3.2. W końcy prace nad IBM RSA są kontynuowane pod nadzorem osób, które miały duży wpływ na ostateczny kształ UMLa, więc oczekiwania w stosunku do tego produktu muszą być odpowiednio wysokie również. Z niecierpliwością oczekuję momentu, w którym będę mógł podzielić się moimi doświadczeniami z produktem. Nie ma co pisać o wersji pre-BETA teraz, lepiej poczekać na pełną odsłonę, nieprawdaż?
Wracam do ewaluacji. Visual Paradigm i MagicDraw czekają już gotowe!
Jest kilka kryteriów jakim poddaję te narzędzia:
- wsparcie dla diagramów przepływu
- wymagania środowiska (najlepiej jeśli jest to rozszerzenie dla Eclipse IDE 3.2+)
- prostota użycia (ma być intuicyjne i intuicyjność nie ma być czymś co nabędę po przeczytaniu sterty dokumentacji)
- cena (a właściwie jej brak)
- prostota instalacji (preferuję wersje bez instalatora, których proces instalacji składa się z jednego kroku - rozpakowania do wybranego katalogu)
- sposób aktualizacji do nowszej wersji
- wsparcie dla UML 2.0 (chociaż nie mam bladego pojęcia dlaczego mi na tym tak zależy, więc nie takie ważne :-))
Zabrałem się za poszukiwanie innego. Wpisałem w Google - Eclipse UML - i...dostałem odnośnik do Omondo EclipseUML (http://www.omondo.com). Słyszałem o nim już wcześniej, więc przejrzawszy stronę domową i dowiedziawszy się, że jest to wersja rozszerzająca Eclipse postanowiłem sprawdzić to cudeńko. Nie zastanawiając się długo pobrałem darmową wersję 3.2.20061006 i zainstalowałem ją w osobnym Extension Location w Eclipse. Rozpocząłem ewaluację. Pierwsze wrażenia całkiem pozytywne, szczególnie po tych nieprzyjemnych z ArgoUML. Darmowy, wspiera Eclipse 3.2.1, można zainstalować w osobnym katalogu bez ryzyka zniszczenia Eclipse i w końcu ma wsparcie dla wywołań metod własnych obiektu, który jest jednocześnie wywołującym i odbierającym włącznie z możliwością rozrysowania podwywołań. Wszystkie ładnie się układało, aż do momentu, kiedy po dodaniu kolejnej klasy i metody diagram zaczął robić się zbyt wysoki, tzn. każde dodanie nowej metody (a było ich nie więcej niż 10!) powodowało, że diagram rozszerzał się w pionie do niezarządzalnych rozmiarów. Dodatkowo linie reprezentujące czas życia obiektów nie były dopasowywane do nowych rozmiarów, więc przyszło mi "bawić się" z rozciąganiem i układaniem obiektów zamiast skupić się na ich wprowadzaniu, gdzie resztę powinno obsłużyć samo narzędzie (pamiętałem, że w którymś z narzędzi widziałem kiedyś możliwość upiększenia rozmieszczenia obiektów na diagramie). Po kilku godzinach zniechęcony, stwierdziłem, że na rynku musi być ciekawsza oferta.
Przypomniałem sobie, że bodajże 5 lat temu byłem na szkoleniu o Bluestone Application Server (nota bene, ciekaw jestem, komu w Polsce przyszło z nim pracować - ciekawe, niszowe rozwiązanie, które po zakupie przez HP i transformacji do HP Application Server - HPAS - zostało ostatecznie zasypane i rozwój całkowicie zamilkł. Ciekawostką jest fakt, że ludzie z działu rozwoju zasilili działy rozwoju Oracle Application Server oraz JBoss Application Server)...Ale o czym to ja? Acha, ewaluacja. Przypomniałem sobie o MagicDraw (http://www.magicdraw.com). Okazało się nawet, że miałem go juz zainstalowanego na swoim komputerze (prawdopodobnie po tym, kiedy otrzymałem wiadomość do skrzynki o tym jaki jest wspaniały i darmowy i takie tam, skuszony zainstalowałem po to, aby...mieć). Na stronie domowej doczytałem o najświeższej wersji 11.6 i że uaktualnienia instaluje się za pomocą mechanizmu wbudowanego w narzędzie (co sprowadza się jedynie na sprawdzeniu, czy one istnieją i potwierdzenie ich instalacji). Kilka punktów dla niego. Na razie wciąż ewaluuję, więc niewiele napiszę o nim tym razem, ale sam sposób instalacji jest bardzo obiecujący. Przejrzałem kilka filmów instruktorzowych o tworzeniu diagramów (w tym i diagramu sekwencji) i nie ukrywam, że oczekuję samych dobroci ;-)
W międzyczasie uaktualniania MagicDraw przypomniałem sobie o innym narzędziu - mojej referencji dla NetBeans RCP - Visual Paradigm for UML (http://www.visual-paradigm.com/product/vpuml). Ostatnia wersja 5.3 ma możliwość instalacji jako produkt samodzielny, bądź jako wtyczka do różnych IDE, w tym i Eclipse IDE. Niestety musiałbym zainstalować narzędzie w domyślnym katalogu Eclipse, bez możliwości skorzystania z Extension Location, więc zaniechałem tego sposobu i pobrałem wersję samodzielną. Nadal oczekiwałem na dokończenie instalacji uaktualnienia MagicDraw, kiedy po pobraniu i instalacji (co przypominam sprowadza się do rozpakowania odpwiedniej paczki instalacyjnej) uruchomiłem w końcu narzędzie i...moim oczom ukazało się zapierające dech w piersiach narzędzie (to są odpowiednie słowa, aby wyrazić mój zachwyt tym co zobaczyłem). Panel startowy wbił mnie w krzesło - kompletnie zdębiałem - mnogość opcji tworzenia różnorodnych diagramów i różnorodność kolorów, w jakich zostało to zaprezentowane. Prawie kompletnie zapomniałem o instalowaniu MagicDraw ;-) Mimo wyłącznie pozytywnych opinii o MagicDraw, postanowiłem kontynuować moją ewaluację od Visual Paradigm for UML. W końcu przyjazność użytkowniowi (co składa się na intuicyjność) ma duże znaczenie dla mnie.
Dla zainteresowanych i tych wytrwałych w lekturze moich doświadczeń ewaluacyjnych (kolejność przypadkowa) napiszę, że na rynku około października ma pojawić się najnowsza wersja IBM Rational Software Architect 7.0 (o nazwie kodowej Caspian). Dlaczego dodałem informację o komercyjnym produkcie? Jak mówi się za kulisami, ma być dostępna wersja darmowa dla społeczności (ang. community edition) i oparta o Eclipse 3.2. W końcy prace nad IBM RSA są kontynuowane pod nadzorem osób, które miały duży wpływ na ostateczny kształ UMLa, więc oczekiwania w stosunku do tego produktu muszą być odpowiednio wysokie również. Z niecierpliwością oczekuję momentu, w którym będę mógł podzielić się moimi doświadczeniami z produktem. Nie ma co pisać o wersji pre-BETA teraz, lepiej poczekać na pełną odsłonę, nieprawdaż?
Wracam do ewaluacji. Visual Paradigm i MagicDraw czekają już gotowe!
Subskrybuj:
Posty (Atom)