09 czerwca 2008

GWT 1.5 i Eclipse Ganymede z Cypal Studio for GWT (RC6)

Już nie pamiętam, kiedy to było, kiedy ostatni raz tworzyłem aplikację z Google Web Toolkit (GWT). Ostatni raz zapewne to było przy Tworzenie aplikacji Google Web Toolkit z Java Persistence API. Dodając do tego wydanie GWT 1.5 Release Candidate 1 ze wsparciem dla konstrukcji Java 5 i aż się chce wrócić do tematu. Dużo się ostatnio pisze o tym konkursie Ganymede Around the World Contest (ukłony dla Jacka P. i Michała M.), więc postanowiłem sprawdzić jak się sprawy mają w kontekście tworzenia aplikacji z GWT w środowisku Eclipse Ganymede. Nie ukrywam, że długi czas zajęło mi zdecydowanie się na środowisko rozwoju aplikacji GWT i nie jest to pierwszy raz, kiedy się z tym borykam. Jeśli Eclipse i GWT, to na scenę wchodzi projekt Cypal Studio for GWT, który jest zbiorem wtyczek eclipsowych wspierających tworzenie aplikacji GWT. Ostatnia wersja R6 wyszła...36 godzin temu! Jak to bywa w takich sytuacjach, dla niektórych to nie lada stres dotknąć jeszcze ciepłego produktu, a dla pozostałych gratka skosztowania nowych funkcjonalności. Nie długo trwało, kiedy przekonałem się, że dla moich podstawowych wymagań tworzenia aplikacji GWT Cypal Studio for GWT zdecydowanie wystarczy. I wszystko działa jak należy, chociaż nie obyło się bez niespodzianek.

Zestawienie środowiska do tworzenia aplikacji GWT z Eclipse Ganymede i Cypal Studio for GWT rozpoczynam od pobrania Cypal Studio i najnowszej wersji GWT. Eclipse Ganymede już mam, więc mam go z głowy. Instalacja Cypal Studio to umieszczenie go w wybranym katalogu, np. C:\apps\eclipse-plugins\cypal.studio.for.gwt\eclipse\plugins (paczka dystrybucyjna narzędzia to zestaw wtyczek - pliki jar), a następnie w katalogu links w Eclipse umieszczam plik cypal.studio.for.gwt.link o następującej treści:
 path=C:/apps/eclipse-plugins/cypal.studio.for.gwt
Więcej o tym mechaniźmie instalacji wtyczek do Eclipse w Zarządzanie wtyczkami w Eclipse - Extension Location.

Teraz wystarczy prześledzić krótką acz treściwą dokumentację Cypal Studio for GWT i po 5 minutach można cieszyć się z gotowego środowiska, albo nawet gotowej aplikacji opartej o GWT.

Rozpoczynam od konfiguracji wtyczki w Eclipse - Window > Preferences > Cypal Studio i ustawiam parametr GWT Home. Następnie Ctrl+N i wybieram Dynamic Web Project, gdzie w Configuration pojawi się Cypal Studio for GWT (acz jedynie jeśli wersja Dynamic Web Module version jest niższa niż 2.5). Bez względu na wybór Configuration (czy istnieje czy nie, np. przy wyborze wspomnianej wersji 2.5) istnieje możliwość wyboru własnej konfiguracji (Custom) przez przycisk Modify (obok pola Configuration), gdzie widoczny jest Cypal's GWT Facet.

Jedna uwaga związana z tworzeniem projektu, w którym moglibyśmy wybrać Apache Tomcat 6.0 jako środowisko uruchomieniowe. Próba uruchomienia tak zestawionego projektu z GWT Hosted Mode Application kończy się błędem o niedostepności klas bądź niezgodności sygnatur metod - generalnie niezła jazda i nie wiadomo, o co chodzi. Już byłem bliski zrezygnowania z Eclipse na rzecz IntelliJ IDEA, który również udostępnia wsparcie dla projektów GWT, kiedy w końcu udało mi się rozpracować temat, co sprowadziło się do usunięcia serwera Apache Tomcat jako domyślnego środowiska uruchomieniowego. Nie mam pojęcia, czy z innymi środowiskami również można doświadczyć tego "cudeńka".

I na koniec uwaga o usunięciu pliku gwt-user.jar z dokumentacji Cypal Studio for GWT, która nie dotyczy wersji GWT 1.5. Nie trzeba sobie zaprzątać głowy tym plikiem.

Po utworzeniu projektu, wystarczy Ctrl+N i Cypal Studio > GWT Module, podać dane modułu GWT i voila - aplikacja gotowa!

Jako przykład jakiejkolwiek funkcjonalności wyłącznie w celach demonstracyjnych można skorzystać z dokumentacji javadoc dla GWT, gdzie przy każdej kontrolce pojawia się krótki przykład, na jej wykorzystanie, np. dokumentacja com.google.gwt.user.client.ui.ToggleButton. Pozostaje jeszcze zajrzeć do katalogu samples, uruchomić przykłady, rozejrzeć się po kodzie i można zaczynać coś poważniejszego.

Uruchomienie aplikacji to Run > Run Configurations > GWT Hosted Mode Application i wybranie projektu GWT (pole Project) z odpowiednim modułem (pole Module). Tak proste, jak prostym powinno być.

Pytanie konkursowe: Jak nazywa się zestaw wtyczek eclipsowych do tworzenia aplikacji GWT?

p.s. Miałem o tym pisać już wcześniej, ale dopiero teraz się zebrałem. Podczas, kiedy ja żyłem JAVArsovią 2008, moja Agatka zdecydowała się trochę zrewolucjonizować nasze rodzinne życie i postanowiliśmy (my?!) kupić nowe mieszkanie na Ursynowie. Żonuś moja kochana trochę sceptycznie podchodzi do próby nagłaśniania tematu na moim blogu, ale może w ten sposób zrekompensuję rodzinie straty czasowe, kiedy to przesiaduję na blogu zamiast zajmować się nią i być może namierzę ciekawe mieszkanie. Interesuje nas mieszkanie 4-pokojowe (75-90m2) na Ursynowie (preferowany Natolin), najlepiej za...darmo - może znajdzie się jakaś bogata ciocia z Ameryki ;-) Jeśli macie wieści o takim lokum na Usynowie koniecznie dajcie znać. Fajnie byłoby się pochwalić mieszkaniem kupionym przez bloga. Dziękuję!

9 komentarzy:

  1. Odpowiadając na Twoją zaczepkę pragnę zaznaczyć,że właśnie tworze posta :)

    Jeśli chodzi o gwt to bardzo podoba mi się integracja którą oferuje Idea. Nie jestem wielbicielem tego IDE ale akurat ta funkcjonalność zrobiła na mnie naprawdę duże wrażenie.

    OdpowiedzUsuń
  2. Akurat w przypadku GWT nie jestem przekonany do stosowania wtyczek do IDE. Narzędzia które przychodzą z dystrybucją całkiem nieźle sprawdzają się w kwestii przygotowania projektu eclipse'owego.

    Twoje problemy z Hosted Mode mogą wynikać z tego, że dystrybucja GWT przychodzi z własnym specjalnie dostosowanym Tomcatem. To on jest uruchomiany w Hosted Mode. Choć Google poleca używanie Web Mode do bardziej złożonych web aplikacji (integracja ze springiem, etc.), to jednak ten wbudowany tomcat jest zupełnie standardowy i manipulującą plikem web.xml w ROOT/WEB-INF/ można uzyskać pożądane efekty, nie tracąc przy tym możliwości wygodnego debugowania kodu Javy, zanim stanie się on kodem JS (potem już tylko debugowanie serwisów RPC po stronie serwera i debuger JS na kliencie :) )

    A co do GWT 1.5, to generalnie jestem bardzo zadowolony. Zawsze zadziwiało mnie nieortodoksyjne podejście z jakim twórcy GWT podchodzą do Javy. Sama koncepcja kompilacji Java2JS to jedno, ale co tam oprócz tego tkwi w środku - Deffered Binding, czyli po co robić w runtime to, co można zrobić na etapie kompilacji. Powiązany z tym Implicit Method Binding (można to w pewnym stopniu porównać do AOP). Teraz "upgradowałem" projekty z GWT 1.4 do 1.5 i znalazłem jeszcze kilka fajnych rzeczy. Np. genericsy - niby nic nowego, a jednak GWT używa ich na wiele różnych sposobów - nie tylko można wyposażyć w generics własne klasy, część kodu GWT też jest uzupełniona sprytnie genericsami, np. AsyncCallback, co likwiduje konieczność castowania i pewną ilość "boilerplate code". Co więcej, i to jest szczególnie interesujące, genericsy używane są nie tylko jako odwołanie do typu, ale także jako metainformacja o typie - czyli funkcjonują jak annotations, w pewny sensie obchodząc problem type erasure.

    Wracając do zwalczania nadmiarowego kodu, polecam przyjrzenie się annotation:

    com.google.gwt.user.client.rpc.RemoteServiceRelativePath

    Nie jest to opisane w dokumentacji w tej chwili, a likwiduje tony niepotrzebnego kodu przy inicjalizacji serwisów RPC.

    Pomimo zachwytów nad GWT 1.5, dostrzegam jedną wadę - czasem nawet 5x wydłużony czas kompilacji. Mamy duży projekt w GWT (~20k linii kodu), który na niezłej maszynie kompilował się ponad 2min, nawet nie próbowałem z GWT 1.5, ale niektórzy raportowali, że ich projekty kompilują się 30min :) Obaczymy.

    Jeśli jesteś zainteresowany GWT i którymś z tych zagadnień w szczegółach, to daj znać - wrzucę jakiś większy tekst na bloga.

    OdpowiedzUsuń
  3. Co do tego bledu (java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory) - wystarczy usunac z buildpatha biblioteki Tomcata 6 i dziala ;)
    (PPM/Build path/Remove from Build Path)
    Pozdrawiam

    OdpowiedzUsuń
  4. No tak, ten czas kompilacji, trochę zniechęca do zabawy w tym wynalazku GWT itd...
    początkujący

    OdpowiedzUsuń
  5. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  6. Niestety ten sposób dodawania pluginów nie działa ( przynajmniej u mnie ). Być może dlatego, że pod łyndołsem nie można nazwy zaczynać od kropki. chodzi o plik .eclipseextension
    Pod slackiem też nie bardzo chce to chodzić. Przyznam, że mam małe doswiadczenia z Eclipse i może po prostu nie zrobiłem czegoś co dla bardziej zaawansowanego użytkownika jest oczywiste.
    Pozdrawiam

    OdpowiedzUsuń
  7. Działa, działa, bo to nie Windows nie pozwala, ale Windows Explorer. Ja zakładam pliki rozpoczynające się od kropki pod Cygwinem, ale pewnie są inne sposoby, np.

    C:\Documents and Settings\jlaskowski
    > ver

    Microsoft Windows XP [Version 5.1.2600]

    C:\Documents and Settings\jlaskowski
    > echo ala > .ala

    C:\Documents and Settings\jlaskowski
    > dir .ala
    Volume in drive C is disk
    Volume Serial Number is 00F4-27E9

    Directory of C:\Documents and Settings\jlaskowski

    2009-01-06 12:30 6 .ala
    1 File(s) 6 bytes
    0 Dir(s) 19 649 683 456 bytes free

    Jak już zostanie utworzony, można edytować wybranym narzędziem - Otwórz za pomocą, czy jakoś tak.

    OdpowiedzUsuń
  8. Bardzo fajnie napisane. Jestem pod wrażeniem i pozdrawiam.

    OdpowiedzUsuń