Java_exPress_006_2009_12.pdf

(7931 KB) Pobierz
759364127 UNPDF
759364127.131.png
Maszynista
new Y ear (2010). happY = h appiness .hiGh;
Jak przystało na zakończenie roku, parę słów co nam się udało
osiągnąć w zeszłym roku i co planujemy na kolejny.
A więc witajcie po raz szósty. Tak, sporo tego się nazbierało. W
sumie to prawie 300 stron wiadomości o Javie. I to wszystko dzię-
ki współpracy kilkunastu osób, Waszemu zaangażowaniu i wspar-
ciu sponsorów. A od numeru czwartego zaczęliśmy tłumaczyć
Java exPress na język angielski. Sporo pracy, ale satysfakcja większa. Teraz każdy może
sięgnąć po Java exPress. Java exPress był obecny na prawie każdej większej imprezie
Javowej w Polsce, byliśmy patronem Devoxx i Jazoon, udało nam się zorganizować 3
edycje COOLuarów. Rozpoczęliśmy konkurs Java Geek.
A w przyszłym roku? Dalej będziemy publikować Java exPress co 3 miesiące. Także wer-
sja angielska zacznie się ukazywać regularnie. Podobnie z Java Geek i COOLuarami - pla-
nujemy w 2010 roku zorganizować 2 edycje. Jedną w Krakowie, a drugą... sam nie wiem
gdzie. Może tym razem Wrocław, a może Warszawa? ;) Pojawią się także nowe inicjaty-
wy, jak na przykład szkolenia dla każdego, czy screencasty. O ile starczy sił i ochotników
do pomocy, współpracy i sponsoringu ;)
Na koniec jak zwykle apel. Jeśli chcesz napisać ar-
tykuł, pomóc w tłumaczeniach lub tworzeniu stron
www, napisz do nas na kontakt@dworld.pl.
A zupełnie na koniec: Wszystkiego dobrego w 2010
roku. Niech Java będzie z Wami ;)
Do zobaczenia w 2010 roku,
Grzegorz Duda
r ozkład jazdY
new Y ear (2010). happY = h appiness .hiGh;
2
n a horYzoncie ...
3
L oG 4 j - czYLi jak skutecznie tworzYć LoGi w apLikacjach javovYch 4
GorM – G raiLs o bject r eLationaL M appinG
10
b ehaviour - driven deveLopMent z easYb
20
s iGnaL F raMework dLa pLatForMY j ava Me
26
G radLe - Mocarne narzędzie do budowY projektów
33
e xpress k iLLers , cz . v
45
e xpress k iLLers , cz . v - odpowiedzi
46
r ecenzja : G roovY M aG 11/2009
47
M istrz p roGraMowania : r eFaktorYzacja , cz . ii
48
2 3
759364127.140.png 759364127.142.png 759364127.150.png 759364127.001.png
 
 
 
 
 
 
 
759364127.049.png
 
 
 
759364127.072.png 759364127.082.png 759364127.085.png 759364127.094.png 759364127.101.png 759364127.110.png 759364127.113.png 759364127.114.png 759364127.115.png 759364127.116.png
 
 
 
 
 
 
 
759364127.117.png
 
 
 
759364127.118.png 759364127.119.png 759364127.120.png 759364127.121.png 759364127.122.png 759364127.123.png 759364127.124.png 759364127.125.png 759364127.126.png 759364127.127.png
 
 
 
759364127.128.png 759364127.129.png 759364127.130.png
 
759364127.132.png 759364127.133.png
 
759364127.134.png 759364127.135.png
 
759364127.136.png 759364127.137.png 759364127.138.png 759364127.139.png
 
Megafon
n a horYzoncie ...
G rzeGorz d uda
IntelliJ IDEA 9.0
nizowana przez społeczność JUGową.
Długo na to czeka-
łem i w końcu jest.
Wczoraj została
wypuszczona 9 wersja znakomitego IDE
IntelliJ IDEA. Co tu się długo rozpisywać.
Ściągać i używać. Szczególnie, że oprócz
płatnej wersji Ulimate, jest także darmo-
wa dostępna wersja Communiy Ediion.
Porównanie funkcjonalności znajdziecie
na stronie htp://www.jetbrains.com/
idea/features/index.html.
W lecie przyjdzie
nam odwiedzić Ja-
varsovię (htp://
javarsovia.pl/). Do-
kładna data oraz
formuła nie są
jeszcze znane, ale
można liczyć, że koniec czerwca lub począ-
tek lipca będzie się działo w Warszawie.
To także konferencja organizowana przez
społeczność. Tym razem z Warszawa JUG.
W wersji 9.0 zostało dodane wsparcie dla
Androida, OSGi, Google ApEngine czy Java-
EE 6. Wiele rzeczy zostało poprawionych.
Zresztą zerknijcie sami (htp://www.jet-
brains.com/idea/whatsnew/index.html).
Na koniec roku zo-
staje już klasyczne
JDD (htp://jdd.
org.pl/). Jak zwy-
kle w Krakowie, jak zwykle w październiku,
jak zwykle doskonale.
Konferencje w 2010
Rok 2010 zapowiada się bardzo ciekawie
od strony konferencyjnej. Dużo i różnorod-
nie - tak można określić scenę konferencji
javowych w Polsce.
Jeśli do tego dodamy 2 edycje Nie-konfe-
rencji COOLuarów, może Warsjawę, może
Java4poeple, kilka Eclipse DemoCampów
oraz inncy mniejszych spotkań, to rok
2010 wygląda bardzo ciekawie. Nie wspo-
minając o cyklicznych spotkaniach licznych
w naszym kraju JUGów.
Pierwszą konfe-
rencją w nowym
roku będzie 4De-
velopers (ht-
p://2010.4develo-
pers.org.pl/), która
odbywać się bę-
dzie tym razem w
Poznaniu, 26 marca. To co ją wyróżnia spo-
śród innych konferencji, to 4 ścieżki: Java,
.Net, zarządzanie projektami oraz PHP.
Konkurs Java Geek
Jeśli konferencje, to nie
może zabraknąć konkur-
su Java Geek. Wystar-
towaliśmy na COOLu-
arach, a później JDD z
konkursem na zbieranie
pieczątek. Kolejne punk-
ty do tego całorocznego konkursu można
będzie zdobyć na 4Developers.
Kolejną konferen-
cją będzie GeeCON,
który w dniach
13-14 maja zawita
do... Poznania. No właśnie - w tym roku
Poznań rządzi konferencyjnie. A GeeCON
nikomu nie trzeba chyba przedstawiać. Je-
dyna w Polsce 2 dniowa konferencja, orga-
Koniec konkursu będzie we wrześniu 2010
roku, a więc jeszcze sporo czasu na zdoby-
cie wielu punktów. A dla najbardziej ak-
tywnych przewidziane są ciekawe nagrody
Javowe. Szczególy na htp://www.dworld.
pl/page/show/Java_Geek
2 3
 
759364127.141.png
 
 
 
 
 
 
 
759364127.143.png
 
 
 
759364127.144.png 759364127.145.png 759364127.146.png 759364127.147.png 759364127.148.png 759364127.149.png 759364127.151.png 759364127.152.png 759364127.153.png 759364127.154.png 759364127.155.png
 
 
 
 
 
 
 
759364127.002.png
 
 
 
759364127.003.png 759364127.004.png 759364127.005.png 759364127.006.png 759364127.007.png 759364127.008.png 759364127.009.png 759364127.010.png 759364127.011.png 759364127.012.png 759364127.013.png
 
 
 
759364127.014.png 759364127.015.png 759364127.016.png
 
759364127.017.png 759364127.018.png
 
759364127.019.png 759364127.020.png
 
759364127.021.png 759364127.022.png 759364127.023.png 759364127.024.png 759364127.025.png 759364127.026.png 759364127.027.png 759364127.028.png 759364127.029.png 759364127.030.png
 
Poczekalnia
L oG 4 j - czYLi jak skutecznie tworzYć LoGi w apLikacjach javovYch
M ichał s zYnkaruk
W życiu każdego programisty JAVA prędzej
czy później pojawia się etap, w którym
dochodzi on do wniosku, że korzystanie
z „System.out.print” w przypadku chęci
sprawdzenia wartości danych zmiennych,
stanu w którym obecnie znajduje się apli-
kacja itp. nie jest ani efektywne, ani efek-
towne. Oczywiście można powiedzieć, że
korzystanie ze standardowego wyjścia na
konsole jest łatwe i z pozoru szybkie. No
tak, ale co w przypadku jeśli chcemy, by
zamiast na konsole wynik był zapisywany
do pliku? Wówczas trzeba wszystkie te
elementy zastąpić odpowiednio innym ko-
dem. Świetnie, ale jeśli chcemy aby wyniki
były zapisywane już nie tylko do pliku, ale
ponownie na konsole? Uf … no wymaga
to wiele niepotrzebnej pracy. Czy można
sobie ułatwić życie? Odpowiedź na to py-
tanie jest prosta: Log4j! Jest to wieloplat-
formowa biblioteka napisana w całości w
Javie, której autorem jest Ceki Gülcü, a jej
początki sięgają jeszcze ubiegłego wieku.
Bez obawy, chodzi o lata 90-te :) Umożli-
wia ona zapisywanie logów w aplikacjach
Javovych. Obecnie wspierana jest przez
fundację Apache i wchodzi w skład pro-
jektu Jakarta. Wyróżnia się trzy wersje: 1.2
która jest uznawana za tę stabilną, 1.3 któ-
ra została z pewnych względów porzucona
oraz 2.0 która jest, nazwijmy to, ekspery-
mentalna.
A w jaki sposób?
To już zależy od naszej wyobraźni. Ale od
początku. W log4j wyróżniamy trzy typy
obiektów:
• Logger’y
• Appender’y
• Layout’y
Loggery posiadają metody, które tworzą
logi i ustawiają im odpowiedni priorytet.
Miejsca, do których mogą traić logi są de-
iniowane za pomocą Appender’ów. O tym
jaką postać mają mieć komunikaty decy-
dują obiekty typu Layout.
Wyróżniamy następujące Logger’y:
• NOPLogger
• RootCategory
• RootLogger
Najważniejszy jest RootLogger i to właśnie
z niego będę korzystać w dalej omówio-
nych przykładach. Pozostałe możemy po-
minąć. Zwłaszcza, że RootCategory uzna-
wany jest za przestarzały.
Jeśli chodzi o ustawienie priorytetów, to
wyróżniamy następujące poziomy:
Co może być zapisywane w logach?
Przede wszystkim szeroko rozumiany prze-
pływ aplikacji. Możemy zapisywać jakie są
aktualne wartości poszczególnych zmien-
nych i obiektów, a także wypisywać komu-
nikaty o różnego typu błędach bądź infor-
mować o zdarzeniach biznesowych mają-
cych miejsce w trakcie działania aplikacji.
• FATAL : Poważne błędy powodujące
przedwczesne zakończenie działania
aplikacji
• ERROR : Błędy wykonania
• WARN : Przy użyciu przestarzałych
komponentów, w sytuacjach niespo-
dziewanych nie wpływających na wa-
dliwe działanie
4 5
759364127.031.png 759364127.032.png 759364127.033.png 759364127.034.png 759364127.035.png
 
 
 
 
 
 
 
759364127.036.png
 
 
 
759364127.037.png 759364127.038.png 759364127.039.png 759364127.040.png 759364127.041.png 759364127.042.png 759364127.043.png 759364127.044.png 759364127.045.png 759364127.046.png
 
 
 
 
 
 
 
759364127.047.png
 
 
 
759364127.048.png 759364127.050.png 759364127.051.png 759364127.052.png 759364127.053.png 759364127.054.png 759364127.055.png 759364127.056.png 759364127.057.png 759364127.058.png
 
 
 
759364127.059.png 759364127.060.png 759364127.061.png
 
759364127.062.png 759364127.063.png
 
759364127.064.png 759364127.065.png
 
759364127.066.png 759364127.067.png 759364127.068.png
 
Poczekalnia
Z własnego doświadczenia wynika,
iż najbardziej popularnymi są PaternLayout i HTMLLayout.
• INFO : W celu śledzenia wykonania
Mając już wybrany Appender który wie
gdzie zapisywać należy ustalić co będzie-
my zapisywać, a więc czas na Layouty :
• DEBUG : Szczegółowe info. dotyczące
przepływu w działaniu aplikacji, w ce-
lach diagnostycznych
HTMLLayout produkuje tabele HTML
• TRACE : Bardziej szczegółowe info
PaternLayout umożliwia określenie sza-
blonu wpisu
• ALL/OFF : Wszystkie poziomy / wyłą-
czenie logów
SimpleLayout powoduje, że logi są wpisy-
wane w postaci: poziom – wiadomość
Przy wyborze danego poziomu musimy
wziąć pod uwagę to, że wszystkie logi wy-
pisywane na poziomach niższych od tego
który wybraliśmy nie będą wyświetlane.
Przykładowo, jeśli poziom ustawimy na
DEBUG (domyślny) to wówczas wszystkie
logi wypisywane na poziomie TRACE nie
ujrzą światła dziennego.
XMLLayout formuje wpis do formatu
xml’owego
DateLayout ułatwia nam zarządzanie cza-
sem umieszczanym we wpisie.
Z własnego doświadczenia oraz wszelkich
rozmów użytkowników opisywanej biblio-
teki wynika, iż najbardziej popularnymi są
PaternLayout i HTMLLayout.
Jeśli chodzi o różnego rodzaju Appende-
ry, to jest ich dużo zdeiniowanych, choć
nikt nam nie zabrania by tworzyć własne
w oparciu o klasę AppenderSkeleton. Wy-
mienię najciekawsze z nich :
Jeśli zdecydujemy się na wykorzystanie
PaternLayoutu, to wówczas możemy
określić w jaki sposób ma wyglądać dany
wpis. Jak to zrobić ? Określamy szablon, w
którym stosujemy poniższe elementy:
ConsoleAppender wypisuje logi na konso-
lę, domyślnie działa jak System.out . ,
ale może także jako System.Err.
%% - pojedynczy znak %
WriterAppender zapisuje logi do pliku ko-
rzystając z klasy Writer bądź OutputStre-
am.
%c - kategoria zdarzenia
%C - nazwa klasy, z której został wysłany
wpis
JDBCAppender umożliwia zapis logów do
bazy danych.
%d - data zdarzenia
LF5Appender zapisuje logi do konsoli
opartej na Swingu.
%m - treść komunikatu
%n - separator linii
SMTPAppender pozwala wysłać logi na e-
maila, głównie dotyczące poważnych błę-
dów w działaniu aplikacji.
%p - priorytet zdarzenia
%r - liczba milisekund, które upłynęły od
momentu uruchomienia aplikacji
DailyRollingFileAppender rotuje logi do
określonego rozmiaru, umożliwiając przy
tym zapis z podziałem na lata, miesiące,
dni itd.
%t - nazwa wątku, z którego został wysła-
ny wpis
4 5
 
759364127.069.png
 
 
 
 
 
 
 
759364127.070.png
 
 
 
759364127.071.png 759364127.073.png 759364127.074.png 759364127.075.png 759364127.076.png 759364127.077.png 759364127.078.png 759364127.079.png 759364127.080.png 759364127.081.png 759364127.083.png
 
 
 
 
 
 
 
759364127.084.png
 
 
 
759364127.086.png 759364127.087.png 759364127.088.png 759364127.089.png 759364127.090.png 759364127.091.png 759364127.092.png 759364127.093.png 759364127.095.png 759364127.096.png 759364127.097.png
 
 
 
759364127.098.png 759364127.099.png 759364127.100.png
 
759364127.102.png 759364127.103.png
 
759364127.104.png 759364127.105.png
 
759364127.106.png 759364127.107.png 759364127.108.png 759364127.109.png 759364127.111.png 759364127.112.png
 
Zgłoś jeśli naruszono regulamin