niedziela, 31 sierpnia 2008

koszulka Eclipse, bug naprawiony

Stało się...
Eclipse 3.4.0 ujrzał światło dzienne, a Ganymede Around the World Contest dobiegł końca. Wziąłem udział w tym konkursie, co na szczęście nie umknęło uwadze organizatorów, o czym przekonałem się odbierając przesyłkę:


Niby emka, ale jakaś duża. Przynajmniej nie zrobiona w Chinach a w Kanadzie.

Jakby tego było mało, zgłoszony przeze mnie błąd został już naprawiony. Dołączony zostanie prawdopodobnie do wersji 3.4.1 środowiska.
Poprawiony błąd i koszulka. Chyba warto brać udział w konkursach spod stajni Eclipse.

środa, 13 sierpnia 2008

testy java

Zawsze mnie zastanawiało, skąd się biorą podchwytliwe pytania dotyczące programowania w Javie. Czy wymyślają je programiści, na zasadzie "sztuka dla sztuki", czy pochodzą one z prawdziwych projektów. Moja zagadka pochodzi z życia.

Co będzie wynikiem wywołania funkcji:


public static void main(String[] args) {
BigDecimal arg1 = new BigDecimal("10");
BigDecimal arg2 = new BigDecimal("3");
System.out.println(arg1.divide(arg2).toPlainString());
}


a) na konsole zostanie wypisane: 3,333333333
b) na konsole zostanie wypisane: 3,33
c) na konsole zostanie wypisane: 3
d) zostanie rzucony wyjątek w linii System.out.println(arg1.divide(arg2).toPlainString());
e) na konsole zostanie wypisane: null

no i odpowiedź:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
następnym razem dzieląc obiekty klasy BigDecimal będę uważał.

poniedziałek, 11 sierpnia 2008

Java EE 5 Development using GlassFish Application Server

Korzystając z biblioteki warszawskiego JUGa miałem okazję zapoznać się z książką
"Java EE 5 Development using GlassFish Application Server"
autorstwa Davida R. Heffelfingera. Poniżej przedstawiam recenzję tej pozycji. Recenzja jest po angielsku - takie wymogi wydawnictwa, które wspomaga bibliotekę książkami.

I newer used GlassFish application server so I was really curious about it's features. Reading a book about GlassFish could have been a great possibility to familiarize with it's capabilities. Could have been, but haven't. After first look on the table of contents I realized, that this book is rather about Java EE 5 Development than about Development using GlassFish Application Server. The glass fish on the cover misled me.

So instead of improving my knowledge about GlassFish features I revised my J2EE skills. Hibernate, JDBC, JSP, JSF, EJB, Web Services weren't novelties for me, but I've founded some interesting fragments. Did you know, that you may use Facelets to make JSF-xml pages viewable directly in browser. I didn't. The book contains quite a lot similar more or less useful tricks with example code. Unfortunately it also contains some bugs, like getting new ID by executing
"select max(customer_id) + 1 from customers"
statement.

Generally speaking Java EE 5 Development using GlassFish Application Server by David R. Heffelfinger is a solid 400 pages book about J2EE. If you want to know GlassFish Application Server in details, you will be disappointed, but if you are a newbie in J2EE you will spent a lot of interesting evenings with it. Even more than with one of your girlfriends.

piątek, 1 sierpnia 2008

zdalne debugowanie aplikacji na serwerze aplikacyjnym JBoss

Istnieją jeszcze starej daty programiści którzy lubią pracę z konsolą. Nie uruchamiają oni serwerów aplikacyjnych z poziomu Eclipse, korzystają za to z terminala. Zaliczam się do nich i ja. Podejście takie ma jedną zasadniczą wadę. W Eclipse, aby uruchomić serwer aplikacyjny w trybie debug wystarczy na zakładce Servers kliknąć odpowiednią ikonkę. Z poziomu konsoli jest nieco trudniej. Ale tylko troszeczkę...

Ręczne uruchamianie serwera w trybie debug może się także przydać przy debugowaniu serwera uruchomionego na innym komputerze, niż komputer programisty. Instrukcję jak to zrobić, na przykładzie Eclipse 3.4.0 i serwera JBoss 4.0.5.GA przedstawiam poniżej.

W przykładzie, korzystam z aplikacji akwarium, którą od czasu do czasu posiłkuję się na blogu.

Najpierw zajmę się JBossem. W katalogu bin znajduje się plik run.sh. Kopiuję go na debug.sh. Na początku pliku dodaję:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"

To polecenie modyfikuje zmienną JAVA_OPTS, której zawartość dalej w skrypcie staje się parametrami uruchomieniowymi wirtualnej maszyny (JVM) z którą wystartuje serwer. Dobrze jest zapamiętać wartość wpisaną jako address i ustawić suspend=n. W przeciwnym wypadku JBoss nie uruchomi się dopóki nie podłączymy się do niego z IDE.

W JBossie to już wszystko. Czas na Eclipse.

W klasie AquariumManagerImpl ustawiam pułapkę, klikając na lewym marginesie.



Tutaj zatrzyma się aplikacja aby umożliwić śledzenie jej wykonania krok po kroku.

Następnie wybieram z menu Debug pozycję Debug Configurations....




Wybieram z listy po lewej stronie Remote Java Application podając odpowiedni port i nazwę.



Klikam Apply i Debug. Wyskoczy błąd, ponieważ serwer nie jest jeszcze włączony.

Czas zatem go uruchomić, tym razem nie poleceniem
./run.sh
a
./debug.sh

JBoss powienien wypluć z siebie:
Listening for transport dt_socket at address: 8787

Następnie, w Eclipse z menu Debug wybieram pozycję aquarium - debug.

Wchodzę na stronę:
http://localhost:8080/aquarium/info.htm.
Strona się nie ładuje, przechodzę do Eclipse. Zatwierdzam zmianę perspektywy i już mogę przechodzić kod aplikacji linijka po linijce za pomocą klawisza F6
F8 natomiast wznawia dalszy bieg programu.