07 czerwca 2008

Pierwsze kroki z JBoss Seam i Apache Geronimo

Kilka dni temu pisałem o aplikacji opartej o JSF (JavaServer Faces), w której potrzebowałem skorzystać ze znaczników JSP projektu jpivot (notka java.io.File.toURI().toURL() oraz słów kilka o Ajaxie w Wicket). Właśnie przed konfiguracją mechanizmu utrwalania danych opartych o Spring Framework i JPA (Java Persistence API) myślałem o rozwiązaniu ala Ruby on Rails (RoR), w którym podałbym podstawowe dane aplikacji, a większość z niej utworzona byłaby automatycznie. Moja aplikacja nie będzie aplikacją CRUD (Create/Read/Update/Delete) , ale jej zręby przydałyby mi się na starcie. I tak sobie rozważałem, jakby tu ubrać temat w jakiś projekt (potencjalnie rozwijany przez społeczność polskich JUGów), aż tu przypomniałem sobie o...JBoss Seam! Nie wiem jak mogłem o nim zapomnieć! Skoro potrzebuję szkieletu ala RoR, JSF, JPA i biblioteki kontrolek JSF w postaci Apache MyFaces Trinidad czy podobnie, to właśnie JBoss Seam zdaje się być idealnym rozwiązaniem. To się nazywa znaleźć rozwiązanie na miarę wymagań. Nie należę do znawców tematu JBoss Seam, więc tym bardziej kręci mnie popróbowanie się z nim (pisałem o nim kilkakrotnie w kategorii jboss seam).

Lektura strony domowej projektu JBoss Seam - http://seamframework.org - nie pozostawia złudzeń wyboru szkieletu aplikacyjnego:

Seam is a powerful open source development platform for building rich Internet applications in Java. Seam integrates technologies such as Asynchronous JavaScript and XML (AJAX), JavaServer Faces (JSF), Java Persistence (JPA), Enterprise Java Beans (EJB 3.0) and Business Process Management (BPM) into a unified full-stack solution, complete with sophisticated tooling.

To jest dokładnie to, czego potrzebowałem do zbudowania mojej nowej aplikacji.

Początkowo próbowałem się z archetypem JSF+Facelets+Seam Archetype, ale już po chwili widać było, że nie tędy droga. Po poprawnym zestawieniu projektu z archetypem mavenowym softeu-archetype-seam:
 $ mvn archetype:create \
-DarchetypeArtifactId=softeu-archetype-seam \
-DremoteRepositories=http://maven.softeu.cz/ \
-DgroupId=pl.jaceklaskowski.seam \
-DartifactId=seam-facelets-witajswiecie
...
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: softeu-archetype-seam:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: pl.jaceklaskowski.seam
[INFO] Parameter: packageName, Value: pl.jaceklaskowski.seam
[INFO] Parameter: basedir, Value: c:\projs\sandbox
[INFO] Parameter: package, Value: pl.jaceklaskowski.seam
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: artifactId, Value: seam-facelets-witajswiecie
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: c:\projs\sandbox\seam-facelets-witajswiecie
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
jego uruchomienie zakończyło się błędem.
 [INFO] Jetty server exiting.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failure

Embedded error: Could not create Component: org.jboss.seam.security.identity
No converter for type: org.drools.RuleBase
Tyle było z mojego wykorzystania Seama z pomocą archetypu softeu-archetype-seam. Kasuję projekt seam-facelets-witajswiecie.

Oparcie się o skrypt seam (aka seam-gen) szczęśliwie dało oczekiwany skutek - utworzenie aplikacji seamowej. Mimo konieczności wskazania katalogu domowego JBoss AS, którego nie miałem (i na chwilę obecną nie planuję mieć), uruchomienie projektu z Apache Geronimo sprowadziło się do pewnych zmian w dostępności bibliotek, utworzenia planu i instalacji modułu wspierającego pracę Hibernate z JTA w Geronimo i tyle. Moje doświadczenia spisałem w postaci kolejnego artykułu Pierwsze kroki z JBoss Seam i Apache Geronimo. Jutro popróbuję się z tworzeniem akcji z pomocą skryptu seam.

Ciekawym Twoich doświadczeń z JBoss Seam i zestawianiem środowiska do tworzenia aplikacji z nim. Każde uproszczenia mile widziane, więc jak masz jakieś, koniecznie pozwól mi je poznać.

Pytanie konkursowe: Jakie polecenie skryptu seam stworzy projekt seamowy?

3 komentarze:

  1. Ruby on Rails to jednak znacznie wiecej niz generowany automatycznie CRUD.... Porownanie RoR i Seam Framework to spore naduzycie :P

    OdpowiedzUsuń
  2. Cześć Paweł,

    Nie znam RoR poza kilkoma reklamowanymi jego cechami, jak wspomniana szybkość tworzenia aplikacji przez dostosowanie się do pewnych reguł nazewniczych. Zapewne to nie wszystko, co oferuje RoR, ale pod tym kątem bardzo przypomina mi Seama, który próbuje (realizuje) ten paradygmat.

    Możesz napisać, co wyróżnia RoR od innych szkieletów webowych? Co więcej mógłbym oczekiwać od RoR, czego nie znajdę w innych podobnych rozwiązaniach (jak wspomniany JBoss Seam)? Chętnie sprawdziłbym Seama pod tym kątem i zweryfikował pogłoski, aby Seam i RoR były podobnymi rozwiązania tylko opartymi na innych językach, więc ich możliwości "językowe" są odmienne (pomijam milczeniem JRoR).

    Jacek

    OdpowiedzUsuń
  3. Czesc,

    Akurat tydzien temu przechodzilem w trybie pilnym (oddanie projektu we Wtorek, a w Sobote Oracle ADF przestal mi sie podobac :) ) kurs Seam by dorobic interfejs z odrobina logiki do bazy na Oracle.

    seam-gen mnie zawiodl. Generuje duzo mniej niz oczekiwalem. Wygenerowanie czegos na produkcyjnej bazie danych na poczatku sie sypie, bo... pewnie sam zobaczysz, ale da sie to obejsc recznie.

    Za to sam framework bardzo mi sie spodobal, dokumentacja jest swietna, wyglada to na bardzo przemyslane, zintegrowane i rozsadnie rozszerzone o wlasne koncepcje. Poza tym wspiera Groovy :), a dokumentacja RichFaces to dzielo sztuki.

    Do tego plugin:
    http://www.jboss.org/tools/download/index.html#stable

    Pozdrawiam,
    Krzysiek

    OdpowiedzUsuń