24 kwietnia 2007

Pierwsze potyczki z GWT - szczypta technologii klienckiej dla urozmaicenia

Może nie pierwsze teoretycznie, ale z pewnością pierwsze praktycznie. Po prezentacji Michała Margiela - Miesięczna ewaluacja Google Web Toolkit (GWT) - i co, fajne? - na spotkaniu Warszawa JUG myśl o konieczności samodzielnego popróbowania się z Google Web Toolkit (GWT) nie dawała mi spokoju. Jakby tego było mało natrafiłem na relację Java i AJAX w praktyce: system internetowy w GWT autorstwa lukjel. Tego było już za wiele. Czułem, że coś mnie omija. Wszyscy się dobrze bawią z GWT, a ja stoję gdzieś z boku, w kącie i zastanawiam się skąd dochodzą odgłosy zabawy ;-)

Pobrałem GWT 1.3.3 dla Windows i przeczytałem Google Web Toolkit Getting Started Guide. Niewiele tego jak na początek, pomyślałem, ale może właśnie w tym tkwi siła GWT - prostota tworzenia aplikacji, której nie ma co opisywać, bo się sama tłumaczy. I długo nie musiałem czekać, żeby się o tym przekonać (w międzyczasie lektura specyfikacji JPA zajęła mnie na trochę, więc faktycznie trwało to dłużej zanim zabrałem się za GWT).

Właśnie wczoraj, w z korespondencji otrzymałem propozycję skorzystania z akademickiej licencji dla IntelliJ IDEA. Jako członek zespołów projektów otwartych miałem już dla nich licencję, więc pomyślałem, że nawet jeśli nie skorzystam z propozycji, to może warto sprawdzić jak się sprawuje IDEA i w międzyczasie uaktualnić ją. Po aktualizacji do wersji 6.0.5 moim oczom ukazał się panel powitalny z...GWT Studio. Przypomniałem sobie o tych wszystkich intrygujących artykułach i wypowiedziach związanych z GWT i tym razem nie mogłem już odkładać tematu na później. Musiałem coś własnego zobaczyć działającego, co byłoby napisane w GWT. Zabrałem się za jego rozpracowywanie.

Nie będę reklamował komercyjnego produktu jakim jest IntelliJ IDEA, ale warto podkreślić, że cena za możliwości narzędzia jest niewspółmierna (na korzyść IDEA). Wsparcie dla GWT jest dokładnie, jakiego mógłby oczekiwać taki nowicjusz GWT jakim ja jestem. Zresztą można samemu się przekonać, obejrzawszy film - Google Web Toolkit as 1-2-3. Więcej o GWT i IDEA. Biorąc pod uwagę wsparcie dla EJB 3.0 i JPA i kilku innych technologii zdaje się, że do zbioru na codzień wykorzystywanych IDE dodam kolejne - IntelliJ IDEA. Ufff, to już 3, nie wspominając o komercyjnych ofertach od IBM (IBM Rational Application Developer 7) czy BEA (BEA Workshop Studio 3.3). I jeszcze jest Exadel Studio Pro. Każde ma coś unikatowego. Szczęśliwie ostatnie produkty to jedynie rozszerzenia dla Eclipse IDE, więc można pracować ze wszystkimi, jakby były pojedyńczym produktem.

Wracam do tematu głównego - GWT. Pierwszy strzał to oczywiście uruchomienie przykładów rozprowadzanych z GWT, które znaleźć można w katalogu samples. Dalej prześledzenie filmu o IDEA i ostatecznie pomysł, aby spróbować skorzystać z GWT i jego narzędzi do generowania struktury projektu - projectCreator oraz applicationCreator, które pozwalają na przygotowanie projektu dla Eclipse IDE. Możliwość tworzenia projektów korzystających z GWT w Eclipse IDE zmniejsza wymagania wstępne (niweluje potrzebę korzystania z IntelliJ IDEA chociażby za cenę większego wysiłku i prawdopodobnie czasu).

c:\projs> mkdir witajswieciegwt

c:\projs> cd witajswieciegwt

C:\projs\witajswieciegwt> c:\apps\gwt\projectCreator -eclipse witajswieciegwt
Created directory C:\projs\witajswieciegwt\src
Created directory C:\projs\witajswieciegwt\test
Created file C:\projs\witajswieciegwt\.project
Created file C:\projs\witajswieciegwt\.classpath

C:\projs\witajswieciegwt> c:\apps\gwt\applicationCreator -eclipse witajswieciegwt pl.jaceklaskowski.klient.WitajSwiecieGWT
'pl.jaceklaskowski.klient.WitajSwiecieGWT': Please use 'client' as the final package, as in 'com.example.foo.client.MyApp'.
It isn't technically necessary, but this tool enforces the best practice.
Google Web Toolkit 1.3.3
ApplicationCreator [-eclipse projectName] [-out dir] [-overwrite] [-ignore] className

where
-eclipse Creates a debug launch config for the named eclipse project
-out The directory to write output files into (defaults to current)
-overwrite Overwrite any existing files
-ignore Ignore any existing files; do not overwrite
and
className The fully-qualified name of the application class to create

Co za gość?! Nie mogę nazwać mojego pakietu jakbym chciał. Uroki (wymuszonej) konfiguracji domyślnej?! Oby się opłacało.

C:\projs\witajswieciegwt> c:\apps\gwt\applicationCreator -eclipse witajswieciegwt pl.jaceklaskowski.client.WitajSwiecieGWT
Created directory C:\projs\witajswieciegwt\src\pl\jaceklaskowski
Created directory C:\projs\witajswieciegwt\src\pl\jaceklaskowski\client
Created directory C:\projs\witajswieciegwt\src\pl\jaceklaskowski\public
Created file C:\projs\witajswieciegwt\src\pl\jaceklaskowski\WitajSwiecieGWT.gwt.xml
Created file C:\projs\witajswieciegwt\src\pl\jaceklaskowski\public\WitajSwiecieGWT.html
Created file C:\projs\witajswieciegwt\src\pl\jaceklaskowski\client\WitajSwiecieGWT.java
Created file C:\projs\witajswieciegwt\WitajSwiecieGWT.launch
Created file C:\projs\witajswieciegwt\WitajSwiecieGWT-shell.cmd
Created file C:\projs\witajswieciegwt\WitajSwiecieGWT-compile.cmd

Otwieram Eclipse IDE 3.3m6 i importuję projekt WitajSwiecieGWT. Po zaimportowaniu w menu Run -> Run As pojawia się nowa konfiguracja uruchomieniowa - WitajSwiecieGWT. Próba uruchomienia i okazuje się, że projekt...działa!


Wciskając przycisk Click me wywołujemy następujący kod

button.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
if (label.getText().equals(""))
label.setText("Hello World!");
else
label.setText("");
}
});

, który wyświetla Hello World!.

Na zakończenie sprawdzę, jak bardzo dynamiczne jest tworzenie aplikacji z GWT i Eclipse.

Zmieniłem tekst Hello World! na Witaj Świecie GWT! i odświeżyłem przeglądarkę GWT. I znowu poprawnie. Odświeżyło się. Niestety, coś nie tak pojawiło się z kodowaniem polskich znaków. Zmieniłem Preferences->General->Workspace->Text file encoding w Eclipse na UTF-8, co wymagało również poprawienia 'Ś' w klasie i po ponownym odświeżeniu pojawiła się i polska litera.

Na koniec wykonałem skrypt WitajSwiecieGWT-compile.cmd. W wyniku uruchomienia pojawiły się dwa katalogi tomcat oraz www. Otworzyłem plik www/pl.jaceklaskowski.WitajSwiecieGWT/WitajSwiecieGWT.html w przeglądarce (Firefox 2.0.0.3 na Windows) i...znowu działa.

Szybko, sprawnie i przyjemnie. Zdecydowanie za lekko idzie ;-) Już mi się marzy budowanie za pomocą M2 z Java EE w tle.