Java_exPress_008_2010_09.pdf

(5341 KB) Pobierz
759364131.295.png
Maszynista
J avaex P ress www = N ew P age ();
Kolejny numer oddany w ręce czytelników. To już ósmy. Pierwszy po-
jawił się 2 lata temu. Dzięki ciągłemu zaangażowaniu polskiej społecz-
ności javowej od dwóch lat możemy się cieszyć nowym numerem JAVA
exPress co 3 miesiące.
W drugie urodziny udało nam się odświeżyć i przebudować stronę cza-
sopisma htp://javaexpress.pl. Mamy nadzieję, że w nowej oprawie
graicznej stanie się ona punktem centralnym w dyskusjach na tematy
około javowe. Szczególnie te poruszane w artykułąch znajdujących się w nowych numerach
JAVA exPress.
Wiele dyskusji, czy JAVA exPress powinien być wydawany w formie papierowej zakończy praw-
dopodobnie informacja o SDJ, który to z formy papierowej przeniósł się na darmowego pdfa.
Jednak „tradycyjna” forma jest zbyt kosztowna nawet dla takiego pisma jak SDJ.
Jak zwykle wielkie podziękowania dla Marka Podsiadłego, który wiele swojego czasu pośwęca
na rozwój stron htp://dworld.pl oraz htp://javaexpress.pl. Wielkie podziękowania należą się
także autorom tekstów oraz tłumaczom - Magdzie i Grześkowi.
Na koniec jak zwykle apel. Jeśli chcesz napisać artykuł, pomóc w tłumaczeniach lub tworzeniu
stron www, napisz do nas na kontakt@dworld.pl. Każda pomoc pozwoli udoskonalić nasze cza-
sopismo.
Do zobaczenia na konferencjach,
Grzegorz Duda
r ozkład Jazdy
JeP. get t eam (). say t haNk y ou ();
2
C o w trawie PiszCzy ...
3
r elaCJa z koNfereNCJi J avarsovia
4
db 4 o - o biektowa baza daNyCh
5
C ouCh db — bo daNe to Nie zawsze tabele
12
t raNsakCJe w systemaCh J ava ee: k orzystaNie z baz daNyCh
23
z arządzaNie sobą w Czasie - alokaCJa Czasu
36
a rChitektura aPlikaCJi f lex i J ava
38
w eb d river łatwe i PrzyJemNe testowaNie aPlikaCJi webowyCh
49
m istrz P rogramowaNia : r efaktoryzaCJa , Cz . iv
55
2
759364131.321.png 759364131.362.png 759364131.391.png 759364131.001.png 759364131.055.png 759364131.057.png 759364131.058.png 759364131.061.png 759364131.066.png 759364131.071.png 759364131.073.png 759364131.076.png 759364131.087.png 759364131.098.png 759364131.099.png 759364131.105.png 759364131.107.png 759364131.109.png 759364131.115.png 759364131.120.png 759364131.121.png 759364131.123.png 759364131.127.png 759364131.131.png 759364131.134.png 759364131.136.png 759364131.142.png 759364131.143.png 759364131.145.png 759364131.148.png 759364131.152.png 759364131.157.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.290.png
 
 
 
 
 
 
759364131.308.png
 
 
759364131.315.png
 
 
759364131.326.png
 
 
759364131.347.png
 
 
759364131.354.png
 
 
759364131.363.png 759364131.366.png 759364131.370.png
 
759364131.376.png
 
 
 
 
 
 
 
 
759364131.401.png
 
 
 
 
 
 
 
 
 
 
759364131.028.png
 
759364131.049.png 759364131.053.png 759364131.054.png 759364131.056.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.059.png
 
 
 
 
 
 
759364131.060.png
 
 
759364131.062.png
 
 
759364131.063.png
 
 
759364131.064.png
 
 
759364131.065.png
 
 
759364131.067.png 759364131.068.png 759364131.069.png
 
759364131.070.png
 
 
 
 
 
 
 
 
759364131.072.png
 
 
 
 
 
 
 
 
 
 
759364131.074.png
 
759364131.075.png 759364131.077.png 759364131.078.png 759364131.079.png 759364131.080.png 759364131.081.png 759364131.082.png 759364131.083.png 759364131.084.png 759364131.085.png 759364131.086.png 759364131.088.png 759364131.089.png 759364131.090.png 759364131.091.png 759364131.092.png 759364131.093.png 759364131.094.png 759364131.095.png 759364131.096.png 759364131.097.png
 
 
 
 
 
 
 
 
 
 
759364131.100.png 759364131.101.png
 
 
 
 
759364131.102.png 759364131.103.png 759364131.104.png
 
 
 
 
 
 
 
759364131.106.png
 
 
 
 
759364131.108.png
 
 
 
 
 
 
 
 
 
759364131.110.png
 
 
 
 
759364131.111.png 759364131.112.png 759364131.113.png 759364131.114.png 759364131.116.png 759364131.117.png 759364131.118.png 759364131.119.png
 
Maszynista
r elaCJa z koNfereNCJi J avarsovia
k aPituła k oNfereNCJi
Wszystko zakończyło się w sobotę w nocy, gdy
ostatni uczestnicy konferencji w dobrych hu-
morach, żegnali się, opuszczając SPOINĘ. Była
to impreza integracyjna, ostatni gwóźdź pro-
gramu, dla osób, które za aktywność zgarnęły
zaproszenia.
Tak właśnie dobiegła końca 4. edycja najwięk-
szej, bezpłatnej konferencji społeczności javo-
wej w Polsce - Javarsovia 2010, organizowanej
przez Warszawski JUG.
I choć się skończyła, to wciąż rozbrzmiewają
jej echa w społeczności i dociera do nas dużo
pozytywnych opinii na jej temat. Jest również
trochę uwag krytycznych, ale to dobrze, bo
dzięki nim wiemy co poprawić na przyszłość.
sady kontraktów i współpracy z klientem przy
zastosowaniu zwinnego podejścia. Najaktyw-
niejsi mogli liczyć na ciekawe nagrody w po-
staci unikalnych kubków, książek, licencji na
oprogramowanie oraz zaproszeń na SPOINĘ.
W tym roku ponad 650 uczestników brało
udział w konferencji. Jest to o 150 więcej niż
rok wcześniej. Wliczając sponsorów i prele-
gentów, możemy powiedzieć, że nasze sza-
cunki mówiące o 700 osobach okazały się tra-
ione. Dzięki temu udało nam się zaserwować
wszystkim obiad, a i koszulek wystarczyło pra-
wie dla wszystkich.
W holu można było wymienić doświadczenia
z uczestnikami, którzy przyjechali do nas z ca-
łej Polski. Gwar jaki panował może świadczyć
o tym, że większość ludzi w pełni wykorzystało
tą możliwość. Jesteśmy bardzo zadowoleni z
osiągniętego efektu.
Wszystkim przybyłym uczestnikom oraz choj-
nym sponsorom bardzo dziękujemy.
Od strony merytorycznej Javarsovia wypadła
rekordowo. Uczestnicy mogli wybierać spo-
śród 24 prezentacji, odbywających się w 4
równoległych sesjach. Jak zwykle nie zabrakło
technologicznych nowości, a odwiedzający
mieli szansę posłuchać o najnowszych chmu-
rach, szkieletach, fasolkach i nierelacyjnych
bazach danych. Na prezentacjach można było
poznać nie tylko najnowsze technologie, ale
także zgłębić arkana programistycznego rze-
miosła. Mogliśmy dowiedzieć się jak pisać
lepszy kod, jak dbać o testy oraz poznać za-
Jeżeli nie byliście na Javarsovii 2010, nic stra-
conego - wszystkie sesje były rejestrowane i
ukażą się w serwisie parleys.com. Wystarczy,
że będziecie śledzić informacje na www.javar-
sovia.pl
Liczymy, że konferencja na stałe wpisze się do
Waszych “kalendarzy konferencyjnych”, obok
innych, świetnych polskich konferencji.
Już na jesieni “warsztatowa” Warsjava, a za
rok - jubileuszowa Javarsovia 2011!
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.122.png
 
 
 
 
 
 
759364131.124.png
 
 
759364131.125.png
 
 
759364131.126.png
 
 
759364131.128.png
 
 
759364131.129.png
 
 
759364131.130.png
 
 
759364131.132.png
 
759364131.133.png
 
 
 
 
 
 
 
 
759364131.135.png
 
 
 
 
 
 
 
 
 
 
759364131.137.png
 
759364131.138.png 759364131.139.png 759364131.140.png 759364131.141.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.144.png
 
 
 
 
 
 
759364131.146.png
 
 
759364131.147.png
 
 
759364131.149.png
 
 
759364131.150.png
 
 
759364131.151.png
 
 
759364131.153.png 759364131.154.png 759364131.155.png
 
759364131.156.png
 
 
 
 
 
 
 
 
759364131.158.png
 
 
 
 
 
 
 
 
 
 
759364131.159.png
 
759364131.160.png 759364131.161.png 759364131.162.png 759364131.163.png 759364131.164.png 759364131.165.png 759364131.166.png 759364131.167.png 759364131.168.png 759364131.169.png 759364131.170.png 759364131.171.png 759364131.172.png 759364131.173.png 759364131.174.png 759364131.175.png 759364131.176.png 759364131.177.png 759364131.178.png 759364131.179.png 759364131.180.png 759364131.181.png 759364131.182.png 759364131.183.png 759364131.184.png 759364131.185.png 759364131.186.png 759364131.187.png 759364131.188.png 759364131.189.png 759364131.190.png 759364131.191.png 759364131.192.png 759364131.193.png 759364131.194.png 759364131.195.png 759364131.196.png 759364131.197.png 759364131.198.png 759364131.199.png 759364131.200.png 759364131.201.png 759364131.202.png 759364131.203.png 759364131.204.png 759364131.205.png
 
 
 
 
 
 
 
 
 
 
 
 
759364131.206.png
 
 
 
759364131.207.png 759364131.208.png 759364131.209.png
 
 
 
 
 
 
 
759364131.210.png
 
 
 
 
759364131.211.png
 
 
 
 
 
 
 
 
 
759364131.212.png
 
 
 
 
759364131.213.png 759364131.214.png 759364131.215.png 759364131.216.png 759364131.217.png 759364131.218.png 759364131.219.png 759364131.220.png 759364131.221.png 759364131.222.png 759364131.223.png 759364131.224.png 759364131.225.png 759364131.226.png 759364131.227.png 759364131.228.png 759364131.229.png 759364131.230.png 759364131.231.png 759364131.232.png 759364131.233.png 759364131.234.png 759364131.235.png 759364131.236.png 759364131.237.png 759364131.238.png 759364131.239.png 759364131.240.png 759364131.241.png 759364131.242.png 759364131.243.png 759364131.244.png 759364131.245.png 759364131.246.png 759364131.247.png 759364131.248.png 759364131.249.png 759364131.250.png 759364131.251.png 759364131.252.png 759364131.253.png 759364131.254.png 759364131.255.png 759364131.256.png
 
Poczekalnia
db 4 o - o biektowa baza daNyCh
P aweł C egła
Wstęp
Instalacja
Instalacja sprowadza się do ściągnięcia paczki
ze wszystkimi niezbędnymi komponentami.
Później należy tylko dodać odpowiedni plik
JAR do zmiennej CLASSPATH (np. dla db4o
w wersji 7.4 i javy 1.5 - db4o-7.4.121.14026-
java5.jar).
Wszędobylski tandem: baza danych
+ ORM
Myśląć „przechowywanie danych” w kon-
tekście aplikacji komputerowych prawie na
pewno myślimy „relacyjna baza danych i ma-
powanie obiektowo-relacyjne”. Bazy danych,
które są dojrzałymi i niezawodnymi produk-
tami zapewniają nam trwałe przechowywa-
nie danych. Natomiast rozwiązania typu ORM
umożliwiają nam dostęp do tych danych w
postaci użytecznej dla programów napisanych
w sposób obiektowy. Podejście to zostało
spopularyzowane przez framework Hibernate
a następnie ustandaryzowane jako Java Per-
sistence API stanowiące element specyikacji
Java EE 5.
Można również dodać db4o jako zależność w
projektach zarządzanych przez Mavena, od-
powiednie artefakty znajdują się pod adre-
Podstawowe interfejsy
Db4o
Klasa-fabryka, która służy do rozpoczęcia ko-
rzystania z bazy w jednym z dostępnych try-
bów, jak również zarządzaniem koniguracją.
Podejście takie izoluje w dużym stopniu pro-
jektanta/programistę od czynności związa-
nych z relacyjnymi bazami danych (takimi jak
zakładanie indeksów, rozmiary kolumn itp.)
Jednak w przypadku bardziej złożonych aplika-
cji kod w obiektowym języku programowania
zostaje „zaśmiecony” pewnymi elementami
relacyjnymi, np. adnotacjami JPA; @Column,
@ManyToMany.
ObjectContainer
Interfejs, przy pomocy którego wykonujemy
wszystkie podstawowe operacje CRUD na ba-
zie. Każdy obiekt typu ObjectContainer imple-
mentuje również interfejs rozszerzony ExtO-
bjectContainer (metoda ObjectContainer.
ext()), który zapewnia funkcjonalność dodat-
kową (np. dostęp do wewnętrznych identyi-
katorów obiektów).
Obiektowa baza danych
Alternatywą mogą być obiektowe bazy da-
nych. Obiekty są w nich przechowywane tak,
jak używamy ich w programach napisanych
zgodnie z paradygmatem obiektowym. Nie
trzeba ich mapować na model relacyjny ani
modelować takich podstawowych zależności
jak dziedziczenie i kompozycja.
Interfejs ten w db4o zapewnia podobną funk-
cjonalność jak EnityManager w Java Persi-
stence API.
ObjectSet
Obiekty tego typu są zwracane jako wyniki
zapytań. Interfejs ten rozszerza kilka innych
interfejsów z biblioteki standardowej Javy;
Collecion, List, Iterator i Iterable. Możemy go
zrzutować na taki, który aktualnie potrzebuje-
my w naszej aplikacji.
Nie mogą one jeszcze zagrozić pozycji relacyj-
nych baz danych, jednak warto przyjrzeć się
możliwościom, jakie oferują. db4o jest bazą
danych dostępną na plaformy Java i .NET.
Możemy jej używać na licencji GPL oraz ko-
mercyjnej.
4
759364131.257.png 759364131.258.png 759364131.259.png 759364131.260.png 759364131.261.png 759364131.262.png 759364131.263.png 759364131.264.png 759364131.265.png 759364131.266.png 759364131.267.png 759364131.268.png 759364131.269.png 759364131.270.png 759364131.271.png 759364131.272.png 759364131.273.png 759364131.274.png 759364131.275.png 759364131.276.png 759364131.277.png 759364131.278.png 759364131.279.png 759364131.280.png 759364131.281.png 759364131.282.png 759364131.283.png 759364131.284.png 759364131.285.png 759364131.286.png 759364131.287.png 759364131.288.png 759364131.289.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.291.png
 
 
 
 
 
 
759364131.292.png
 
 
759364131.293.png
 
 
759364131.294.png
 
 
759364131.296.png
 
 
759364131.297.png
 
 
759364131.298.png 759364131.299.png 759364131.300.png
 
759364131.301.png
 
 
 
 
 
 
 
 
759364131.302.png
 
 
 
 
 
 
 
 
 
 
759364131.303.png
 
759364131.304.png 759364131.305.png 759364131.306.png 759364131.307.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.309.png
 
 
 
 
 
 
759364131.310.png
 
 
759364131.311.png
 
 
759364131.312.png
 
 
759364131.313.png
 
 
759364131.314.png
 
 
759364131.316.png 759364131.317.png 759364131.318.png
 
759364131.319.png
 
 
 
 
 
 
 
 
759364131.320.png
 
 
 
 
 
 
 
 
 
 
759364131.322.png
 
759364131.323.png 759364131.324.png 759364131.325.png 759364131.327.png 759364131.328.png 759364131.329.png 759364131.330.png 759364131.331.png 759364131.332.png 759364131.333.png 759364131.334.png 759364131.335.png 759364131.336.png 759364131.337.png 759364131.338.png 759364131.339.png 759364131.340.png 759364131.341.png 759364131.342.png 759364131.343.png 759364131.344.png
 
 
 
 
 
 
 
 
 
 
759364131.345.png 759364131.346.png
 
 
 
 
759364131.348.png 759364131.349.png 759364131.350.png
 
 
 
 
 
 
 
759364131.351.png
 
 
 
 
759364131.352.png
 
 
 
 
 
 
 
 
 
759364131.353.png
 
 
 
 
759364131.355.png 759364131.356.png 759364131.357.png 759364131.358.png 759364131.359.png 759364131.360.png 759364131.361.png
 
Poczekalnia
Nie mogą one jeszcze zagrozić pozycji
relacyjnych baz danych, jednak warto przyjrzeć się
możliwościom, jakie oferują
Tryby działania
Baza danych db4o można używać w dwóch
trybach; wbudowanym i klient-serwer. Pierw-
szy z nich nadaje się do mniejszych aplikacji,
bez przetwarzania współbieżnego, natomiast
tryb klient-serwer będzie idealny dla aplika-
cji wielowątkowych, z wieloma transakcjami
wykonującymi się równolegle. Czyli m.in. w
popularnych aplikacjach internetowych. Dzia-
łanie bazy w trybie klient-serwer możemy
ograniczyć tylko do jednej maszyny wirtualnej
a komunikacja pomiędzy klientami a serwe-
rem polegać będzie na wymianie referencji
do obiektów Javy (analogia do interfejsów
lokalnych w EJB). Oczywiście klienty i serwer
mogą znajdować się w różnych maszynach
wirtualnych. Wtedy komunikacja odbywać się
będzie po sieci TCP/IP (tym razem analogia do
interfejsów zdalnych w EJB).
Tryb wbudowany
// Listing 1
ObjectContainer oc = Db4o.openFile(PATH_TO_DB4O_FILE);
// operacje na bazie
oc.close();
Tryb klient-serwer
Jedna maszyna wirtualna
// Listing 2
// serwer
ObjectServer server = Db4o.openServer(PATH_TO_DB4O_FILE, 0);
// klient
ObjectContainer oc = server.openClient();
Wiele maszyn wirtualnych
// Listing 3
// serwer
ObjectServer server = Db4o.openServer(PATH_TO_DB4O_FILE, PORT);
server.grantAccess(USERNAME, PASSWORD);
// klient
ObjectContainer oc = Db4o.openClient(HOST, PORT, USERNAME, PASSWORD);
Podstawowe operacje
// ObjectContainer oc – uzyskany w którymkolwiek z trybów działania
Zapisywanie
oc.store( new Person( “Jan” , “Kowalski” ));
Prościej chyba się już nie da...
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.364.png
 
 
 
 
 
 
759364131.365.png
 
 
759364131.367.png
 
 
759364131.368.png
 
 
759364131.369.png
 
 
759364131.371.png
 
 
759364131.372.png
 
 
759364131.373.png
 
759364131.374.png
 
 
 
 
 
 
 
 
759364131.375.png
 
 
 
 
 
 
 
 
 
 
759364131.377.png
 
759364131.378.png 759364131.379.png 759364131.380.png 759364131.381.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
759364131.382.png
 
 
 
 
 
 
759364131.383.png
 
 
759364131.384.png
 
 
759364131.385.png
 
 
759364131.386.png
 
 
759364131.387.png
 
 
759364131.388.png 759364131.389.png 759364131.390.png
 
759364131.392.png
 
 
 
 
 
 
 
 
759364131.393.png
 
 
 
 
 
 
 
 
 
 
759364131.394.png
 
759364131.395.png 759364131.396.png 759364131.397.png 759364131.398.png 759364131.399.png 759364131.400.png 759364131.402.png 759364131.403.png 759364131.404.png 759364131.405.png 759364131.406.png 759364131.407.png 759364131.408.png 759364131.409.png 759364131.410.png 759364131.411.png 759364131.412.png 759364131.413.png 759364131.414.png 759364131.415.png 759364131.416.png 759364131.417.png 759364131.418.png 759364131.419.png 759364131.420.png 759364131.421.png 759364131.422.png 759364131.423.png 759364131.424.png 759364131.425.png 759364131.426.png 759364131.427.png 759364131.428.png 759364131.429.png 759364131.430.png 759364131.431.png 759364131.432.png 759364131.433.png 759364131.434.png 759364131.435.png 759364131.436.png 759364131.437.png 759364131.438.png 759364131.439.png 759364131.440.png 759364131.441.png
 
 
 
 
 
 
 
 
 
 
 
 
759364131.442.png
 
 
 
759364131.443.png 759364131.444.png 759364131.445.png
 
 
 
 
 
 
 
759364131.446.png
 
 
 
 
759364131.002.png
 
 
 
 
 
 
 
 
 
759364131.003.png
 
 
 
 
759364131.004.png 759364131.005.png 759364131.006.png 759364131.007.png 759364131.008.png 759364131.009.png 759364131.010.png 759364131.011.png 759364131.012.png 759364131.013.png 759364131.014.png 759364131.015.png 759364131.016.png 759364131.017.png 759364131.018.png 759364131.019.png 759364131.020.png 759364131.021.png 759364131.022.png 759364131.023.png 759364131.024.png 759364131.025.png 759364131.026.png 759364131.027.png 759364131.029.png 759364131.030.png 759364131.031.png 759364131.032.png 759364131.033.png 759364131.034.png 759364131.035.png 759364131.036.png 759364131.037.png 759364131.038.png 759364131.039.png 759364131.040.png 759364131.041.png 759364131.042.png 759364131.043.png 759364131.044.png 759364131.045.png 759364131.046.png 759364131.047.png 759364131.048.png 759364131.050.png 759364131.051.png 759364131.052.png
 
Zgłoś jeśli naruszono regulamin