Software.Developers.Journal.2010.06.PL.pdf

(7130 KB) Pobierz
287738974 UNPDF
287738974.022.png
6/2010 (186)
Szanowni Czytelnicy,
SPIS TREŚCI
Niedawno obchodziliśmy 15-lecie SDJ. 15 lat naj-
większego polskiego pisma dla programistów. Przez
ten czas zyskaliśmy solidną pozycję na rynku, odda-
ne grono czytelników i markę wśród największych firm
z branży.
Nie chcemy jednak stać w miejscu. Świat się zmie-
nia a wraz z nim media. Dlatego z przyjemnością infor-
muję, że Software Developer’s Journal staje w awan-
gardzie światowych mediów. Otwieramy się na przy-
szłość, a ...przyszłość leży w sieci.
Ten numer SDJ jest zwiastunem rewolucji, która prę-
dzej czy później dotknie każdego medium na świecie.
Rozwój internetu, urządzeń przenośnych sprawi, że
papierowe wydania pism będą ustępować przed napo-
rem nowych technologii. Aby sprostać oczekiwaniom
pisma on-line, SDJ przeszedł delikatny lifting. Mam na-
dzieję, że nowy format pozwoli Wam z przyjemnością
oddawać się lekturze magazynu.
Każdy kolejny numer SDJ będzie się ukazywał do
pobrania każdego, ostatniego dnia miesiąca. Pismo
będzie dostępne w wygodnym formacie PDF. Co waż-
niejsze będzie on pismem całkowicie darmowym!
Jesteśmy przekonani, że zmiana formatu wydawa-
nia magazynu, a także szersza dostępność sprawi, że
SDJ stanie się jeszcze bardziej opiniotwórczym me-
dium o programowaniu w Polsce. Nadal będziemy pre-
zentować aktualną, a także sprawdzoną wiedzę z dzie-
dziny programowania. Współpracując ze specjalistami
z największych firm na rynku, a także pasjonatami pro-
gramowania, uczelniami wyższymi itp chcemy dostar-
czać naszym czytelnikom wiedzy potrzebnej do pracy,
a także dalszego rozwoju osobistego.
Jednocześnie nie zapominamy o materiałach dodat-
kowych do artykułów. Wszelkie aplikacje, kody a także
materiały video będą dostępne na naszej stronie www.
Również za darmo.
Mam głęboką nadzieję, że ta zmiana przypadnie
Wam do gustu. Chcemy aby SDJ jak najbardziej od-
powiadał Waszym oczekiwaniom, dlatego będziemy
wdzięczni za wszelkie sugestie i uwagi dotyczące na-
szego, wspólnego magazynu.
BIBLIOTEKA MIESIĄCA
6 Biblioteka Dozer –
Proste mapowanie obiektów
Tomasz Oponowicz
Ręcznie pisanym translatorom można zarzucić wie-
le – są czasochłonne, błędogenne, a ich przejrzystość
zależy w dużej mierze od umiejętności programistycz-
nych. Może czas odrzucić dotychczasowe przyzwycza-
jenia? Interesującym rozwiązaniem wydaje się być bi-
blioteka Dozer.
KLUB TECHNICZNY
16 Technologie Progress OpenEdge – Część 7.
Replikacja i obsługa klastrów systemowych
w środowisku OpenEdge
Piotr Tucholski
Jednym z najistotniejszych aspektów w systemach
aplikacyjnych jest bezpieczeństwo informacji zawar-
tych w bazach danych, a w przypadku ich awarii szyb-
kie wznowienie i kontynuacja pracy systemu. Przyjrzyj-
my się produktom OpenEdge Replication i Failover Clu-
sters.
SZTUCZNA
INTELIGENCJA
20 Paradygmat CLP – Przykłady problemów
optymalizacyjnych oraz logicznych
Łukasz Mazur
Rozwiązywane problemy przez systemy informatyczne
opracowane na mechanizmach CLP są zazwyczaj wy-
soce złożone. Wykorzystują one heurystyczne algoryt-
my poszukiwania rozwiązania, dodatkowo wspomaga-
jąc się propagacją ograniczeń oraz dystrybucją zmien-
nych.
Redaktor naczelny SDJ
Łukasz Łopuszański
4
6/2010
4
287738974.023.png 287738974.024.png 287738974.025.png 287738974.001.png
 
SPIS TREŚCI
PROGRAMOWANIE URZĄDZEŃ
MOBILNYCH
Miesięcznik Software Developer’s Journal (12 numerów w roku)
jest wydawany przez Software Press Sp. z o.o. SK
Redaktor naczelny:
Łukasz Łopuszański lukasz.lopuszanski@software.com.pl
38 Android NDK – Programowanie natywne
w systemie Android
Piotr Szmyt
Tematem artykułu są podstawy NDK, czyli środowiska
umożliwiającego wykorzystanie kodu natywnego (C/
C++) w systemie Android. Zakładam, że czytelnik posia-
da już podstawowe informacje na temat programowania
w systemie Android, tworzenia nowych projektów oraz
uruchomiania itp., gdyż tego typu elementy nie będą opi-
sywane w tym artykule.
Projekt okładki: Agnieszka Marchocka
Skład i łamanie:
Tomasz Kostro www.studiopoligraficzne.com
Kierownik produkcji:
Andrzej Kuca andrzej.kuca@software.com.pl
Adres korespondencyjny:
Software Press Sp. z o.o. SK,
ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427 36 91, fax +48 22 224 24 59
www.sdjournal.org cooperation@software.com.pl
APLIKACJE BIZNESOWE
Dział reklamy: adv@software.com.pl
54 Stary, dobry znajomy: Oracle Forms
Michał Kuratczyk
Historia narzędzi Oracle Forms sięga późnych lat 80.
i choć ich popularność wyraźnie spadła wraz z rozpo-
wszechnieniem się Internetu, wciąż wiele aplikacji bazu-
je na tym rozwiązaniu.
Redakcja dokłada wszelkich starań, by publikowane w piśmie
i na towarzyszących mu nośnikach informacje i programy były
poprawne, jednakże nie bierze odpowiedzialności za efekty
wykorzystania ich; nie gwarantuje także poprawnego działania
programów shareware, freeware i public domain.
Wszystkie znaki firmowe zawarte w piśmie są własności
odpowiednich firm.
Zostały użyte wyłącznie w celach informacyjnych.
Osoby zainteresowane współpracą prosimy o kontakt:
cooperation@software.com.pl
EFEKTYWNOŚC PRACY
58 Brakujący 1% – Zarządzanie
zaangażowaniem programistów
Michał Bartyzel, Mariusz Sieraczkiewicz
Większość programistów uwielbia swoją pracę. Jeśli
nawet nie przepadają za niektórymi zadaniami, to i tak
przeważnie lubią to, co robią. Zazwyczaj więc pojedyn-
czy programista jest bardzo zaangażowanym pracowni-
kiem. W artykule zastanawiamy się, jak wygląda spra-
wa zaangażowania w przypadku zespołu współpracują-
cych ze sobą
www.sdjournal.org
5
5
287738974.002.png 287738974.003.png 287738974.004.png 287738974.005.png 287738974.006.png 287738974.007.png
 
BIBLIOTEKA MIESIĄCA
Biblioteka Dozer
Proste mapowanie obiektów
Ręcznie pisanym translatorom można zarzucić wiele –
są czasochłonne, błędogenne, a ich przejrzystość zależy
w dużej mierze od umiejętności programistycznych.
Może czas odrzucić dotychczasowe przyzwyczajenia?
Interesującym rozwiązaniem wydaje się być biblioteka Dozer.
Dowiesz się:
• W jaki sposób zainicjalizować Dozer'a;
• W jaki sposób tworzyć proste i zaawansowane pliki konigura-
cyjne wykorzystywane przez Dozer'a;
• W jaki sposób mapować obiekty typu JAXB przy pomocy Dozer'a.
Powinieneś wiedzieć:
• Jak programować w języku Java;
• Podstawowa znajomość XML'a.
pomiędzy obiektami z różnych modeli danych.
W przypadku systemów rozproszonych,
obiekty przekazywane są pomiędzy różnymi systemami.
Sytuacje, w których zewnętrzny model danych wykorzy-
stywany jest wewnątrz naszej aplikacji, są niepożądane.
Zdarza się, że dostawca usług nagle zmienia w zna-
czący sposób model danych. Następstwem tego są
zmiany w całej naszej aplikacji. Dlatego lepszym roz-
wiązaniem byłoby mapowanie obiektów zewnętrznych
na nasz wewnętrzny model danych, na najniższej war-
stwie. W dużej mierze uniezależniłoby to nasz system
od zmian pochodzących z zewnątrz.
Powszechnym rozwiązaniem powyższego problemu
jest pisanie ręcznych translatorów. Jednak implementa-
cja ich jest zbyt czasochłonna, a programista jest zmu-
szony do ręcznego odwzorowania wszystkich zależ-
ności. Nawet gdy klasy różnią się między sobą w nie-
wielkim stopniu. Tak zaimplementowany kod jest mało
przejrzysty i trudny w szybkiej analizie. Dodatkowo sto-
sunkowo łatwo o pomyłkę.
W niniejszym artykule przedstawię, w jaki sposób roz-
wiązać typowe problemy mapowania przy pomocy biblio-
teki Dozer. Biblioteka wprowadza jednolity sposób zapi-
sywania relacji pomiędzy obiektami w plikach XML. Nie
wymaga ona żadnej modyfikacji istniejących klas (np.
Szybki start w Eclipse
Koniguracja projektu w Eclipse:
1. Stworzyć w Eclipse nowy projekt Java;
2. Pobrać binarną dystrybucję biblioteki Dozer (patrz: ramka W sieci);
3. W zakładce do konigurowania bibliotek zewnętrznych ( Project -> Properties -> Java Build Path -> Libraries ) dodać bibliotekę
dozer.osgi-5.2.0.jar za pomocą przycisku Add external JARs ;
4. Powtórzyć kroki 2 i 3 dla bibliotek JAXB, Apache Commons Beanutils, Apache Commons Collections, Apache Commons Lang
i Apache Commons Logging.
Dodatkowo w przypadku biblioteki JAXB, po ściągnięciu jej z Internetu należy ją rozpakować, stosując się do instrukcji umieszczo-
nych na stronie domowej biblioteki. Spośród wypakowanych plików, do build path'a należy dodać plik o nazwie jaxb-api.jar.
Z przyczyn technicznych na niektórych Listingach nie znalazły się deinicje setter'ów i getter'ów, co zostało oznaczone stoso-
wanym komentarzem. Jednak w łatwy sposób Czytelnik może wygenerować wspomniane funkcje za pomocą narzędzi wbu-
dowanych w Eclipse'a. W kodzie źródłowym klasy wywołujemy menu kontekstowe i klikamy kolejno Source -> Generate getters
and setters .
6
6/2010
M apowanie obiektów jest to kopiowanie danych
287738974.008.png 287738974.009.png
 
287738974.010.png 287738974.011.png 287738974.012.png 287738974.013.png
Biblioteka Dozer
dodanie adnotacji). Dzięki temu jest to w pełni przeźro-
czyste rozwiązanie. Pierwsza wersja biblioteki Dozer zo-
stała wydana w 2005 roku. Od tego czasu jest intensyw-
nie rozwijana i optymalizowana. Ponadto cechuje się
przemyślanymi rozwiązaniami i dużą stabilnością.
Struktura niniejszego artykułu jest następująca: na
początek przedstawię sposób wykorzystania API Do-
zer'a oraz podstawową koncepcję zapisywania rela-
cji w plikach konfiguracyjnych. Następnie zaprezentu-
ję rozbudowane mechanizmy sterowania mapowaniem
i omówię szczegółowo zastosowane techniki. W dal-
szej kolejności zmierzę się z rzeczywistym problemem
– mapowaniem obiektów typu JAXB. Na koniec porów-
nam wydajność pomiędzy Dozer'em a ręcznie pisany-
mi translatorami.
wpisać i skompilować klasy znajdujące się na Listin-
gach od 1 do 5. Przykład uruchamiamy, wywołując kla-
DozerExample .
Przeanalizujmy krok po kroku kod programu znajdu-
jący się na Listingu 1. Na początku dołączamy niezbęd-
ne nagłówki. Następnie inicjalizujemy bibliotekę Dozer,
za co odpowiedzialna jest instrukcja:
DozerBeanMapper mapper = (DozerBeanMapper) DozerBeanMapp
erSingletonWrapper.getInstance();
Wykorzystaliśmy tutaj klasę DozerBeanMapperSingleton
Wrapper , ponieważ twórcy biblioteki zalecają, aby w ca-
łej naszej aplikacji występowała tylko jedna instancja
klasy DozerBeanMapper (tzw. singleton). Dalej inicjalizu-
jemy klasę JabberPerson testowymi wartościami:
Zaczynamy
Pierwszą czynnością, którą należy wykonać, jest konfi-
guracja środowiska pracy. Osoby korzystające z Eclip-
se'a zapraszam do przestudiowania zawartości ramki
Szybki start w Eclipse . Czytelników chcących wykorzy-
stać bibliotekę wraz ze Spring Framework odsyłam do
ramki Szybki start w Spring . Warto także wspomnieć,
że biblioteka Dozer jest dostępna w centralnym repozy-
torium Maven'a. W ramce W sieci umieściłem bardziej
szczegółowe informacje z tym związane.
Gdy środowisko pracy jest już gotowe, możemy roz-
począć przygodę z Dozer'em. Na potrzeby artykułu wy-
obraźmy sobie, że jesteśmy programistami multiko-
munikatora internetowego, Pidgin. Aplikacja jest zmu-
szona do mapowania obiektów konkretnego protoko-
łu na swój model danych. Tak więc należy utworzyć,
JabberPerson source = new JabberPerson("Jan",
"Kowalski", 40, new
JabberAddress("Wojska Poskiego",
"3"));
Ostatecznie zlecamy bibliotece przemapowanie obiek-
tu typu JabberPerson na obiekt typu PidginPerson za
pomocą instrukcji:
PidginPerson destination = mapper.map(source,
PidginPerson.class);
Listing 1. Najprostsze użycie biblioteki Dozer (plik
DozerExample.java)
Szybki start w Spring
Spójrzmy na prosty przykład, tego, jak wykorzystać Do-
zer'a w istniejącym serwisie zarządzanym przez Sprin-
g'a. W tym celu, w dowolnym serwisie, deiniujemy inter-
fejs org.dozer.Mapper w formie właściwości komponen-
tu JavaBean. Niech właściwość będzie miała nazwę map-
per. Następnie, w plikach XML deiniujących kontekst apli-
kacji, określamy, że właściwość mapper powinna być usta-
wiona na egzemplarz klasy org.dozer.DozerBeanMapper
(który deiniujemy jako element bean). Teraz w serwisie mo-
żemy korzystać z dobrodziejstw biblioteki Dozer, wykorzy-
stując zmienną mapper .
import java.util.*;
import org.dozer.*;
public class DozerExample {
public static void main ( String ... args ) {
DozerBeanMapper mapper = ( DozerBeanMapper )
DozerBeanMapperSingletonWrapper .
getInstance () ;
mapper . setMappingFiles ( new
ArrayList < String > ()) ;
JabberPerson source = new
JabberPerson ( "Jan" , "Kowalski" ,
40 ,
new JabberAddress ( "Wojska Poskiego" ,
"3" )) ;
PidginPerson destination =
mapper . map ( source ,
PidginPerson . class ) ;
System . out . println ( "JabberPerson-
>PidginPerson: " + destination ) ;
Plugin do Eclipse'a
W ramach projektu Dozer rozwijana jest również wtyczka
do Eclipse'a, usprawniająca edycję plików koniguracyjnych.
Możliwości, jakie oferuje wtyczka:
• podpowiadanie nazw klas i pól w trakcie pisania;
• walidacja nazw klas i pól;
• graiczne przedstawienie treści zawartej w plikach koni-
guracyjnych.
}
}
www.sdjournal.org
7
287738974.014.png 287738974.015.png 287738974.016.png 287738974.017.png 287738974.018.png 287738974.019.png 287738974.020.png 287738974.021.png
 
Zgłoś jeśli naruszono regulamin