You are on page 1of 30

Tytu oryginau: Professional Java EE Design Patterns

Tumaczenie: ukasz Piwko


ISBN: 978-83-283-1315-6
Copyright 2015 by John Wiley & Sons, Inc., Indianapolis, Indiana.
All Rights Reserved.
This translation published under license with the original publisher John Wiley & Sons, Inc.
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by
any means, electronic, mechanical, photocopying, recording, scanning or otherwise without either the prior
written permission of the Publisher.
The Wrox Brand trade dress is a trademark of John Wiley & Sons, Inc. in the United States and/or other
countries. Used by permission.
Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress are
trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States
and other countries, and may not be used without written permission. Java is registered trademark of
Oracle America, Inc. All other trademarks are the property of their respective owners. John Wiley & Sons,
Inc., is not associated with any product or vendor mentioned in this book.
Translation copyright 2015 by Helion S.A.
Wszelkie prawa zastrzeone. Nieautoryzowane rozpowszechnianie caoci lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metod kserograficzn,
fotograficzn, a take kopiowanie ksiki na noniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki wystpujce w tekcie s zastrzeonymi znakami firmowymi bd towarowymi ich
wacicieli.
Autor oraz Wydawnictwo HELION dooyli wszelkich stara, by zawarte w tej ksice informacje byy
kompletne i rzetelne. Nie bior jednak adnej odpowiedzialnoci ani za ich wykorzystanie, ani za zwizane
z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie
ponosz rwnie adnej odpowiedzialnoci za ewentualne szkody wynike z wykorzystania informacji
zawartych w ksice.
Wydawnictwo HELION
ul. Kociuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (ksigarnia internetowa, katalog ksiek)
Drogi Czytelniku!
Jeeli chcesz oceni t ksik, zajrzyj pod adres
http://helion.pl/user/opinie/javeez
Moesz tam wpisa swoje uwagi, spostrzeenia, recenzj.
Printed in Poland.

Kup ksik
Pole ksik
Oce ksik

Ksigarnia internetowa
Lubi to! Nasza spoeczno

Spis treci

O autorach .......................................................................................................... 11
O korektorze merytorycznym .......................................................................... 13
Podzikowania .................................................................................................. 15
Przedmowa ........................................................................................................ 17
Wprowadzenie ................................................................................................... 19
CZ I

WPROWADZENIE DO WZORCW PROJEKTOWYCH W JAVIE EE

Rozdzia 1.

Krtki przegld wzorcw projektowych ......................................................... 27


Czym jest wzorzec projektowy ........................................................................................28
Jak odkryto wzorce i do czego s potrzebne ............................................................29
Wzorce w realnym wiecie .........................................................................................30
Podstawy wzorcw projektowych ...................................................................................31
Wzorce w rozwizaniach dla biznesu .............................................................................31
Od Javy do Javy dla biznesu .......................................................................................31
Pojawienie si wzorcw Javy dla przedsibiorstw ...................................................32
Wzorce projektowe a wzorce biznesowe ..................................................................33
Stare dobre wzorce projektowe spotykaj Jav EE ..................................................33
Kiedy wzorce staj si antywzorcami ........................................................................35
Podsumowanie ...................................................................................................................35

Rozdzia 2.

Podstawy Javy EE .............................................................................................. 37


Architektura wielowarstwowa .........................................................................................38
Warstwa kliencka ...............................................................................................................39
Warstwa logiki biznesowej ...............................................................................................40
Komponent sieciowy ...................................................................................................40
Warstwa EIS .......................................................................................................................40
Serwery Java EE ..................................................................................................................41
Profil sieciowy Javy EE ......................................................................................................42
Podstawowe zasady Javy EE .............................................................................................42

Kup ksik

Pole ksik

6 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE


Konwencja przed konfiguracj ........................................................................................43
CDI ......................................................................................................................................43
Interceptory ........................................................................................................................44
Podsumowanie ...................................................................................................................45
wiczenia ............................................................................................................................45
CZ II

IMPLEMENTACJA WZORCW PROJEKTOWYCH W JAVIE EE

Rozdzia 3.

Wzorzec Fasada ................................................................................................. 49


Czym jest Fasada ................................................................................................................50
Diagram klas wzorca Fasady ......................................................................................51
Implementacja wzorca Fasada w zwykym kodzie rdowym ...................................52
Implementacja wzorca Fasada w Javie EE ......................................................................53
Fasada z ziarnami bezstanowymi ..............................................................................53
Fasada ze stanowym ziarnem ....................................................................................55
Gdzie i kiedy uywa wzorca Fasada ..............................................................................55
Podsumowanie ...................................................................................................................56
wiczenia ............................................................................................................................56

Rozdzia 4.

Wzorzec Singleton ............................................................................................ 57


Czym jest Singleton ...........................................................................................................58
Diagram klas wzorca Singleton .................................................................................59
Implementacja wzorca Singleton w zwykym kodzie .............................................59
Implementacja wzorca Singleton w Javie EE .................................................................63
Ziarna singletonowe ....................................................................................................63
Wykorzystywanie singletonw przy uruchamianiu ...............................................64
Okrelanie kolejnoci uruchamiania ........................................................................65
Wspbieno .............................................................................................................67
Gdzie i kiedy uywa wzorca Singleton ..........................................................................69
Podsumowanie ...................................................................................................................69
wiczenia ............................................................................................................................70

Rozdzia 5.

Wstrzykiwanie zalenoci i CDI ........................................................................ 71


Na czym polega wstrzykiwanie zalenoci .....................................................................72
Implementacja wstrzykiwania zalenoci w zwykym kodzie .....................................72
Implementacja wstrzykiwania zalenoci w Javie EE ...................................................75
Adnotacja @Named ....................................................................................................76
Wstrzykiwanie zalenoci i kontekst (CDI) .............................................................77
CDI a EJB ......................................................................................................................78
Ziarna CDI ...................................................................................................................78
Adnotacja @Inject .......................................................................................................79
Konteksty i zakres ........................................................................................................79
Nazewnictwo i EL ........................................................................................................80
Ziarna CDI jako wsparcie dla JSF .............................................................................80
Kwalifikatory ................................................................................................................81
Alternatywy ..................................................................................................................81

Kup ksik

Pole ksik

Spis treci 7

Stereotypy .....................................................................................................................82
Inne wzorce zwizane z CDI ......................................................................................82
Podsumowanie ...................................................................................................................83
wiczenia ............................................................................................................................83
Rozdzia 6.

Wzorzec Fabryka ............................................................................................... 85


Czym jest Fabryka .............................................................................................................86
Metoda Fabryczna .............................................................................................................86
Implementacja Metody Fabrycznej w zwykym kodzie .........................................88
Fabryka Abstrakcyjna .......................................................................................................89
Implementacja Fabryki Abstrakcyjnej w zwykym kodzie ....................................90
Implementacja wzorca Fabryka w Javie EE ...................................................................91
Okiezna moc kontenera CDI ..................................................................................97
Gdzie i kiedy uywa wzorcw fabrycznych ................................................................100
Podsumowanie .................................................................................................................101
wiczenia ..........................................................................................................................101

Rozdzia 7.

Wzorzec Dekorator .......................................................................................... 103


Czym jest wzorzec Dekorator ........................................................................................104
Diagram klas wzorca Dekorator ..............................................................................105
Implementacja wzorca Dekorator w zwykym kodzie ...............................................106
Implementacja wzorca Dekorator w Javie EE .............................................................109
Dekoratory bez konfiguracji XML ..........................................................................113
Gdzie i kiedy uywa wzorca Dekorator ......................................................................114
Podsumowanie .................................................................................................................115
wiczenia ..........................................................................................................................115

Rozdzia 8.

Programowanie aspektowe (interceptory) ................................................... 117


Co to jest programowanie aspektowe ...........................................................................118
Implementacja AOP w zwykym kodzie ......................................................................120
Aspekty w Javie EE i interceptory .................................................................................122
Cykl ycia interceptora .............................................................................................125
Interceptory na poziomie domylnym ...................................................................125
Kolejno interceptorw ...........................................................................................126
Interceptory CDI .......................................................................................................128
Gdzie i kiedy uywa interceptorw .............................................................................130
Podsumowanie .................................................................................................................131

Rozdzia 9.

Asynchroniczno ........................................................................................... 133


Co to jest programowanie asynchroniczne ..................................................................134
Wzorzec Asynchroniczno .....................................................................................134
Implementacja asynchronicznoci w zwykym kodzie ...............................................136
Programowanie asynchroniczne w Javie EE ................................................................138
Asynchroniczne ziarna .............................................................................................138
Asynchroniczne serwlety ..........................................................................................140
Gdzie i kiedy stosowa programowanie asynchroniczne ...........................................143
Podsumowanie .................................................................................................................144
wiczenia ..........................................................................................................................145

Kup ksik

Pole ksik

8 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE


Rozdzia 10. Usuga odmierzania czasu .............................................................................. 147
Czym jest usuga odmierzania czasu .............................................................................148
Implementacja czasomierza w Javie EE ........................................................................150
Czasomierze automatyczne ......................................................................................150
Czasomierze programowe ........................................................................................151
Wyraenia czasowe ...................................................................................................153
Transakcje ...................................................................................................................156
Podsumowanie .................................................................................................................156
wiczenia ..........................................................................................................................157
Rozdzia 11. Wzorzec Obserwator ....................................................................................... 159
Czym jest Obserwator .....................................................................................................160
Opis .............................................................................................................................160
Diagram klas wzorca Obserwator ...........................................................................162
Implementacja wzorca Obserwator w zwykym kodzie .............................................162
Implementacja wzorca Obserwator w Javie EE ...........................................................164
Gdzie i kiedy uywa wzorca Obserwator ....................................................................169
Podsumowanie .................................................................................................................170
wiczenia ..........................................................................................................................170
Rozdzia 12. Wzorzec Dostp do Danych ............................................................................ 171
Czym jest wzorzec Dostp do Danych ..........................................................................172
Diagram klas Dostpu do Danych ..........................................................................172
Oglne informacje o wzorcu Dostp do Danych ........................................................173
Wzorzec Obiekt Transferu Danych ........................................................................173
API JPA i ORM ..........................................................................................................174
Implementacja wzorca Dostp do Danych w Javie EE ...............................................174
Implementacja DAO bezpieczna pod wzgldem typw ......................................179
Gdzie i kiedy uywa wzorca Dostp do Danych ........................................................180
Podsumowanie .................................................................................................................180
wiczenia ..........................................................................................................................180
Rozdzia 13. REST-owe usugi sieciowe .............................................................................. 181
Co to jest REST ................................................................................................................182
Sze warunkw REST ....................................................................................................183
Klient-serwer ..............................................................................................................183
Jednolity interfejs .......................................................................................................184
Bezstanowo .............................................................................................................184
Moliwo zapisywania danych w buforze ............................................................184
System warstwowy .....................................................................................................184
Kod na danie ...........................................................................................................184
Model dojrzaoci Richardsona .....................................................................................185
Poziom 0. zwyky XML ........................................................................................185
Poziom 1. zasoby ..................................................................................................185
Poziom 2. czasowniki HTTP ..............................................................................185
Poziom 3. kontrolki hipermedialne ...................................................................185

Kup ksik

Pole ksik

Spis treci 9

Projektowanie REST-owego interfejsu API .................................................................185


Nazewnictwo zasobw ..............................................................................................186
Rzeczowniki, a nie czasowniki .................................................................................186
Znaczenie nazw ..........................................................................................................187
Liczba mnoga .............................................................................................................187
Metody HTTP ............................................................................................................187
REST w akcji .....................................................................................................................188
Rzeczownik users .......................................................................................................188
Rzeczowniki topics i posts ........................................................................................189
Implementacja REST w Javie EE ...................................................................................191
HATEOAS ........................................................................................................................194
Gdzie i kiedy uywa REST ............................................................................................196
Podsumowanie .................................................................................................................197
wiczenia ..........................................................................................................................197
Rozdzia 14. Wzorzec Model Widok Kontroler .............................................................. 199
Czym jest wzorzec MVC ................................................................................................200
Typy wzorca MVC ....................................................................................................201
Implementacja wzorca MVC w zwykym kodzie ........................................................202
Implementacja wzorca MVC w Javie EE ......................................................................206
Serwlet FacesServlet .........................................................................................................206
Implementacja wzorca MVC przy uyciu serwletu FacesServlet ..............................206
Gdzie i kiedy uywa wzorca MVC ...............................................................................208
Podsumowanie .................................................................................................................209
wiczenia ..........................................................................................................................209
Rozdzia 15. Inne wzorce projektowe w Javie EE ............................................................... 211
Co to s gniazda sieciowe ...............................................................................................212
Co to jest warstwa porednia do przekazywania wiadomoci ...................................214
Co to jest architektura mikrousugowa ........................................................................215
Architektura monolityczna ......................................................................................215
Skalowalno ..............................................................................................................217
Dekompozycja na usugi ..........................................................................................218
Zalety architektury mikrousugowej .......................................................................218
Nie ma nic za darmo .................................................................................................219
Wnioski .......................................................................................................................220
Kilka antywzorcw na zakoczenie ..............................................................................220
Uberklasa ....................................................................................................................220
Architektura Lazani ...................................................................................................221
Pan Kolumb ................................................................................................................221
Korzyci z przyjani ..................................................................................................221
Supernowoczesno ..................................................................................................222
Szwajcarski scyzoryk .................................................................................................222

Kup ksik

Pole ksik

10 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE


CZ III

PODSUMOWANIE

Rozdzia 16. Wzorce projektowe dobre, ze i brzydkie ................................................. 225


Dobre wzorce sukcesu ................................................................................................225
Ze naduywanie i bdne stosowanie wzorcw .....................................................227
Brzydkie ............................................................................................................................228
Podsumowanie .................................................................................................................230
Skorowidz ........................................................................................................ 231

Kup ksik

Pole ksik

5
Wstrzykiwanie zalenoci i CDI

ZAWARTO ROZDZIAU:
wprowadzenie do technik wstrzykiwania zalenoci;
znaczenie wstrzykiwania zalenoci w Javie EE;
implementacja wstrzykiwania zalenoci w zwykym kodzie;
implementacja wstrzykiwania zalenoci w Javie EE;
wprowadzenie do kontekstowego wstrzykiwania zalenoci;
najwaniejsze rnice dzielce kontenery CDI i EJB.

PRZYKADY KODU DO POBRANIA


Pliki z kodem rdowym przykadw z tego rozdziau znajduj si w archiwum,
ktre mona pobra z serwera FTP wydawnictwa Helion pod adresem:
ftp://ftp.helion.pl/przyklady/javeez.zip. Pliki znajduj si w folderze r05,
a ich nazwy odzwierciedlaj kolejne fragmenty rozdziau.

Wstrzykiwanie zalenoci (ang. Dependency Injection DI) to jeden z nielicznych powszechnie


znanych i stosowanych wzorcw projektowych, ktre nie zostay opisane w ksice Bandy Czworga1.
Ale obecnie wzorzec ten jest wykorzystywany w nowoczesnych jzykach programowania zarwno do
implementacji mechanizmw wewntrznych, jak i jako rodek do rozluniania powiza midzy klasami.
Technologia J2EE miaa suy do budowania najbardziej zoonych systemw, ale spisaa si marnie,
poniewa tylko nadmiernie komplikowaa proces tworzenia nawet prostszych systemw. Pierwotny
projekt J2EE by oparty na wysokim poziomie zoonoci i cisych powizaniach midzy klasami,
1

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Wzorce projektowe. Elementy oprogramowania
obiektowego wielokrotnego uytku, Helion, 2010.

Kup ksik

Pole ksik

72

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

co stao si bodcem do powstania i spopularyzowania rnych systemw szkieletowych, takich jak Spring
czy PicoContainer. W 2004 r. Martin Fowler opublikowa artyku na temat kontenerw odwrconego
sterowania (ang. Inversion of Control IoC) i wzorca wstrzykiwania zalenoci2. Wikszo producentw
oprogramowania nie zachcaa programistw do uywania kontenera J2EE. Wkrtce kontrol przejy
lekkie kontenery, ktre zaczto oficjalnie obsugiwa, i na dodatek Spring sta si w zasadzie nieoficjalnym
standardem, doprowadzajc do tego, e Jav biznesow postanowiono zaprojektowa od nowa.

Na czym polega wstrzykiwanie zalenoci


Wzorzec Wstrzykiwanie Zalenoci opiera si na pomyle odwrcenia tego, do kogo naley
kontrola. Zamiast tworzy zalenoci i nowe obiekty za pomoc sowa kluczowego new lub
przy uyciu operacji wyszukiwania, potrzebne zasoby wstrzykuje si do obiektu docelowego.
Podejcie to ma wiele zalet:
Klient nie musi wiedzie o rnych implementacjach wstrzykiwanych zasobw,
co uatwia wprowadzanie zmian w projekcie.
Znacznie atwiej implementuje si testy jednostkowe z wykorzystaniem atrap obiektw.
Konfiguracj mona przenie na zewntrz, redukujc w ten sposb skutki zmian.
Architektura oparta na lunych powizaniach uatwia tworzenie systemw wtyczkowych.
Podstawow ide techniki wstrzykiwania zalenoci jest zmiana miejsca tworzenia obiektw oraz
wykorzystanie wtryskiwacza (ang. injector) do wstrzykiwania w odpowiednim momencie specyficznych
implementacji do obiektw docelowych. Moe si to wydawa podobne do implementacji wzorca Fabryka
(opisanego w rozdziale 6., Wzorzec Fabryka), ale koncepcja ta jest znacznie bardziej zaawansowana
ni proste tworzenie obiektu. Odwrcenie sterowania cakowicie wywraca do gry nogami relacje midzy
obiektami i przekazuje ca prac do wtryskiwacza (ktry w wikszoci przypadkw dziaa magicznie).
Zamiast wywoywa fabryk, aby dostarczy implementacj wywoujcemu, wtryskiwacz aktywnie sprawdza,
kiedy obiekt docelowy potrzebuje obiektu rdowego, i dokonuje wstrzyknicia w odpowiedni sposb.

Implementacja wstrzykiwania zalenoci


w zwykym kodzie
Standardowa implementacja wstrzykiwania zalenoci w Javie poza kontenerem EJB jest dostpna
dopiero od czasu wprowadzenia CDI (ang. Context and Dependency Injection). Cho istniej rne
systemy szkieletowe, jak choby Spring i Guice, nietrudno jest samodzielnie zaimplementowa
podstawowe rozwizanie.
Najprostsza implementacja wzorca Wstrzykiwanie Zalenoci to fabryka tworzca zaleno
na danie przy uyciu metody getInstance(). Poniej przedstawiamy tak implementacj,
aby pokaza, jak to si robi w zwykym kodzie.
W implementacji tej powinno si oddzieli rozwizywanie zalenoci od zachowania klasy.
Oznacza to, e klasa powinna mie okrelon funkcjonalno bez definiowania tego, jak pozyskuje
referencje do klas, od ktrych zaley. W ten sposb rozcza si operacj tworzenia obiektu i miejsce
jego uycia a to jest esencj wstrzykiwania zalenoci.
2

Martin Fowler, Inversion of Control Containers and the Dependency Injection Pattern, 2004,
http://martinfowler.com/articles/injection.html.

Kup ksik

Pole ksik

Implementacja wstrzykiwania zalenoci w zwykym kodzie

73

Najpierw na listingach: 5.1, 5.2, 5.3 i 5.4 przedstawimy przykady silnie powizanych klas,
a nastpnie zmienimy je zgodnie z zasadami wzorca Wstrzykiwanie Zalenoci.
Listing 5.1. Klasa UserService tworzca now zaleno w konstruktorze
package com.devchronicale.di;
class UserService {
private UserDataRepository udr;
UserService() {
this.udr = new UserDataRepositoryImpl();
}
public void persistUser(User user) {
udr.save(user) ;
}
}

Listing 5.2. Interfejs UserDataRepository


package com.devchronicale.di;
public interface UserDataRepository {
public void save(User user);
}

Listing 5.3. Konkretna implementacja interfejsu UserDataRepository


package com.devchronicale.di;
public class UserDataRepositoryImpl implements UserDataRepository {
@Override
public void save(User user) {

// zapisywanie danych
}
}

Listing 5.4. Klasa User


package com.devchronicale.di;
public class User {

// kod dotyczcy uytkownika


}

Przedstawiona na listingu 5.1 klasa UserService dostarcza usugi logiki biznesowej do


zarzdzania uytkownikami, np. do zapisywania informacji o uytkownikach w bazie danych.
W tym przykadzie obiekt jest tworzony przez konstruktor, co wie logik biznesow
(zachowanie klasy) z tworzeniem obiektu.
Teraz zdejmiemy obowizek tworzenia obiektu z naszej klasy i przeniesiemy go do fabryki.
Na listingu 5.5 tworzona jest implementacja klasy UserDataRepository, ktr przekazujemy
do konstruktora klasy UserService. Trzeba byo zmieni konstruktor klasy UserService,
aby przyjmowa nowy parametr.

Kup ksik

Pole ksik

74

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

Listing 5.5. Klasa UserServiceFactory tworzca obiekty klasy UserService


package com.devchronicale.di;
public class UserServiceFactory {
public UserService getInstance() {
return new UserService(new UserDataRepositoryImpl());
}
}

Na listingu 5.6 konstruktor UserService da wstrzyknicia egzemplarza klasy UserDataRepository.


Klasa UserService nie jest sprzona z klas UserDataReposityImpl. Teraz to zadaniem fabryki
jest tworzenie obiektu i wstrzykiwanie implementacji do konstruktora klasy UserService.
W ten sposb oddzielilimy logik biznesow od operacji tworzenia obiektw.
Listing 5.6. Zmieniona klasa UserService
package com.devchronicale.di;
class UserService {
private UserDataRepository udr;
UserService(UserDataRepository udr) {
this.udr = udr;
}
public void persistUser(User user) {
udr.save(user) ;
}
}

OPOWIADANIE WOJENNE
Gdy powierzono mi zadanie napisania aplikacji na Androida, postanowiem
poszuka systemw szkieletowych ze wstrzykiwaniem zalenoci dla platform
mobilnych. Jako programista z dowiadczeniem w sektorze biznesowym mylaem,
e to najlepsze rozwizanie. Interfejs uytkownika Androida wykorzystuje przecie
struktur przypominajc wstrzykiwanie zalenoci, wic skadniki interfejsu
zdefiniowane w XML-u z kodem Javy, wic wydawao mi si, e implementacja
kompletnego systemu wstrzykiwania zalenoci jest dobrym pomysem, ktry
pozwoli osign oszaamiajce rezultaty.
Opracowaem pikn architektur, w ktrej wszystkie obiekty i zasoby byy ze sob
powizane. Wstrzykiwanie dziaao piknie, ale aplikacja nie. Uruchamiaa si
o wiele duej ni inne podobne aplikacje i szwankowaa te w niej nawigacja.
Wszyscy zakadalimy, e elegancki system zoony z luno powizanych skadnikw
da si utworzy tylko przy uyciu wstrzykiwania zalenoci, wic nawet nie przyszo
nam do gowy szuka rda problemw wanie w tej technice. Stworzylimy pikny
i lekki interfejs uytkownika oraz wykorzystalimy asynchroniczne zadania dziaajce
w tle, aby nie blokowa aplikacji niektrymi operacjami oraz zmniejszy ilo pracy
podczas uruchamiania programu. Jednak wszystko na prno.

Kup ksik

Pole ksik

Implementacja wstrzykiwania zalenoci w Javie EE

75

W kocu dotaro do nas, e problemem jest wstrzykiwanie zalenoci. Aplikacja podczas


uruchamiania i wykonywania niezbdnych czynnoci pocztkowych wyszukiwaa
wszystkie zasoby do wstrzykiwania i referencje. W serwerze, ktry uruchamia si
nieczsto, ma wielu uytkownikw, jest rzadko restartowany i dysponuje gigantyczn
iloci pamici, moe i byoby to dobre. Ale w przypadku urzdzenia przenonego,
ktre ma jednego uytkownika, jest czsto restartowane i dysponuje niewielk iloci
pamici, ponielimy sromotn klsk.
Rozwizanie polegao na powizaniu ze sob zasobw. Cho kod zrobi si brzydszy,
to aplikacja staa si szybka jak byskawica, co zakoczyo nasze problemy z wydajnoci.
Mora z tej historii nie jest taki, e wstrzykiwanie zalenoci nie jest odpowiedni
technik do stosowania w urzdzeniach przenonych, tylko taki, e jeli si j
nieprawidowo zaimplementuje (niewane, w jakim urzdzeniu) w nieodpowiednim
kontekcie, to mona mie powane kopoty.

Implementacja wstrzykiwania zalenoci


w Javie EE
Standardowo w J2EE nie byo wstrzykiwania zalenoci a do Javy EE 5. Zamiast tego w tamtych
czasach dostp do ziaren i zasobw by realizowany przy uyciu interfejsu wyszukiwania
kontekstowego (ang. Java Naming and Directory Interface JNDI). Wad tej metody byo
zacienianie powiza midzy skadnikami i wykorzystywanie cikiego serwerowego kontenera,
przez co testowanie wcale nie byo atwiejsze od pisania waciwego kodu.
Od Javy EE 5 i EJB 3 wstrzykiwanie zalenoci jest ju integraln czci platformy Enterprise Java.
W celu pozbycia si konfiguracji XML wprowadzono kilka adnotacji do wykonywania wstrzykni:
@Resource (JSR 250) suy do wstrzykiwania takich zasobw, jak: dane, JMS
(ang. Java Message Service), URL, poczta oraz zmienne rodowiskowe.
@EJB (JSR 220) suy do wstrzykiwania ziaren EJB.
@WebServiceRef suy do wstrzykiwania usug sieciowych.
Od pojawienia si Javy EE 6, CDI oraz EJB 3.1 technika wstrzykiwania zalenoci staa si
znacznie bardziej przydatna, a wic te i bardziej interesujca dla programistw Javy EE.
W EJB 3.1 ziarna nie musz ju mie interfejsw. Ponadto wprowadzono nowy interfejs sieciowy
EJB zapewniajcy uproszczony i lejszy kontener EJB. Dodano te now i ulepszon adnotacj
wstrzykiwania @Inject (JSR 229 i JSR 330), ktra stanowia wsplny interfejs do wstrzykiwania
dla rnych systemw z krlestwa Javy.
Wstrzykiwanie przy uyciu adnotacji @Inject jest bezpieczne pod wzgldem typw, poniewa
odbywa si na podstawie typu referencji do obiektu. Gdybymy chcieli dostosowa do nowych
zasad kod z listingu 5.1, usunlibymy z niego konstruktor i dodalibymy adnotacj @Inject
do pola UserDataRepository. Wygldaoby to tak jak na listingu 5.7.

Kup ksik

Pole ksik

76

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

Listing 5.7. Klasa UserService z uyciem adnotacji @Inject


package com.devchronicale.di;
import javax.inject.Inject;
class UserService {
@Inject
private UserDataRepository udr;
public void persistUser(User user) {
udr.save(user);
}
}

Kontener CDI tworzy jeden egzemplarz klasy UserRepositoryImpl jako ziarno zarzdzane
przez kontener i wstrzykuje go wszdzie tam, gdzie znajdzie adnotacj @Inject przy polu typu
UserDataRepository.
Ziarna zarzdzane przez kontener mona wstrzykiwa do konstruktorw, metod i pl bez wzgldu
na modyfikator dostpu, ale pole nie moe by finalne, a metoda nie moe by abstrakcyjna.
Powstaj pewne wane pytania. Co si stanie, jeli bdzie wicej ni jedna implementacja interfejsu
UserDataRepository? Jak kontener CDI zidentyfikuje implementacj do wstrzyknicia? Aby rozrni
konkretne implementacje interfejsu UserDataRepository, dla konkretnych klas mona oznaczy
klas samodzielnie zdefiniowanym kwalifikatorem.
Wyobra sobie, e s dwie implementacje interfejsu UserDataRepository jedna dla kolekcji
Mongo DB (dokumentowa baza danych), a druga dla bazy danych MySQL (relacyjna baza
danych). Naleaoby utworzy dwa kwalifikatory (jeden dla implementacji Mongo i drugi
dla implementacji MySQL) i odpowiednio oznacza nimi konkretne klasy oraz znajdujce si
w nich pola.
Wemy np. klas UserService z listingu 5.7. Gdybymy chcieli uy implementacji interfejsu
UserDataRepository dla Mongo, dodalibymy adnotacj @Mongo do pola udr:
@Inject @Mongo
private UserDataRepository udr;

Bardziej szczegowy opis kwalifikatorw znajduje si poniej i w rozdziale 6.

Adnotacja @Named
Kolejnym wielkim wydarzeniem byo wprowadzenie adnotacji @Named w miejsce
kwalifikatorw acuchowych. Wieloznacznoci w zalenociach EJB rozstrzygano przy uyciu
acucha w atrybucie beanName adnotacji @EJB okrelajcej implementacj do wstrzyknicia
@EJB(beanName="UserDataRepository"). Adnotacja @Named umoliwia rwnie rozstrzyganie
niejednoznacznoci przy uyciu atrybutu acuchowego. Na listingu 5.8 implementacja Mongo
interfejsu UserDataRepository jest wstrzykiwana do pola udr.

Kup ksik

Pole ksik

Implementacja wstrzykiwania zalenoci w Javie EE

77

Listing 5.8. Wykorzystanie adnotacji @Named do rozstrzygania wieloznacznoci


package com.devchronicale.di;
import javax.inject.Inject;
import javax.inject.Named;
class UserService {
@Inject
@Named("UserDataRepositoryMongo")
private UserDataRepository udr;
public void persistUser(User user) {
udr.save(user) ;
}
}

Jawna adnotacja implementacji Mongo jest wymagana przez odpowiadajc jej adnotacj @Named.
Na listingu 5.9 implementacja Mongo interfejsu UserDataRepository jest oznaczona adnotacj
z tak sam nazw, jaka zostaa uyta do rozstrzygnicia wieloznacznoci na listingu 5.8.
Listing 5.9. Konkretna implementacja wymaga adnotacji @Named
package com.devchronicale.di;
import javax.inject.Named;
@Named("UserDataRepositoryMongo")
public class UserDataRepositoryMongo implements UserDataRepository {
@Override
public void save(User user) {

// zapisywanie danych
}
}

Wykorzystywanie acuchw do identyfikowania zalenoci to technika przestarzaa. Jest ona


niebezpieczna dla typw i w specyfikacji CDI JSR 299 odradza si jej stosowanie. Ale da si te
uy adnotacji @Named w taki sposb, aby nie wykorzystywa identyfikatorw acuchowych
w miejscu wstrzykiwania.
@Inject @Named
private UserDataRepository UserDataRepositoryMongo;

Na listingu 5.9 nazwa implementacji do wstrzyknicia jest okrelana na podstawie nazwy pola
UserDataRepositoryMongo. W rzeczywistoci adnotacja @Named zostaje zamieniona na
@Named("UserDataRepositoryMongo").

Wstrzykiwanie zalenoci i kontekst (CDI)


Technika CDI (ang. Context and Dependency Injection kontekst i wstrzykiwanie zalenoci) wniosa
do platformy Java EE kompletny mechanizm wstrzykiwania zalenoci, ktry wczeniej by cile
zwizany z EJB i o wiele bardziej ograniczony. Po pojawieniu si EJB 3 w JBoss wprowadzono Seam

Kup ksik

Pole ksik

78

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

(system szkieletowy do budowy aplikacji sieciowych), ktry zdoby cakiem spor popularno
dziki obsudze bezporednich interakcji midzy JSF (ang. JavaServer Faces) i JavaBeans oraz EJB.
Sukces systemu Seam doprowadzi do powstania specyfikacji JSR 299 WebBeans. Podobnie jak
Hibernate, znany system szkieletowy do zapisywania danych dla Javy, by bodcem do standaryzacji
interfejsu API Java Persistence (JPA), Seam sta si inspiracj rdzenia implementacji CDI.
CDI wsppracuje z kadym zwykym obiektem Javy (POJO) przez tworzenie i wstrzykiwanie
obiektw do innych obiektw. Wstrzykiwa mona nastpujce rodzaje obiektw:
POJO;
zasoby biznesowe, np. dane i kolejki;
zdalne referencje EJB;
ziarna sesyjne;
obiekty typu EntityManager;
referencje do usug sieciowych;
pola producenckie i obiekty zwracane przez metody producenckie.

CDI a EJB
Cho moe si wydawa, e CDI i EJB to technologie konkurencyjne, w rzeczywistoci egzystuj
one w harmonii. CDI moe dziaa bez kontenera EJB. W istocie CDI moe by podstaw aplikacji
desktopowej lub dowolnej aplikacji sieciowej, ktra nie korzysta z kontenera EJB. CDI dostarcza
fabryk i wstrzykiwanie do dowolnego ziarna.
Natomiast ziarna EJB wymagaj kontenera EJB. Nawet uproszczona architektura EJB jest bardziej
zoona ni obiekty POJO i dlatego ziarna EJB potrzebuj kontenera EJB. Kontener ten zapewnia
dodatkowe przydatne usugi, takie jak: zabezpieczenia, transakcje i wspbieno.
Mwic krtko: kontener CDI jest lejszym i potniejszym, ale te mniej funkcjonalnym
kontenerem dla obiektw POJO. Jednak oba kontenery s na tyle dobrze ze sob zintegrowane,
e adnotacje CDI mog suy jako brama i standardowy interfejs do interakcji z kontenerem EJB.
Na przykad adnotacja @Inject moe by uywana zarwno z POJO, jak i EJB oraz moe wstrzykiwa
dowoln kombinacj tych obiektw, wywoujc odpowiedni kontener.

Ziarna CDI
Ziarno zarzdzane przez kontener to troch wicej ni tylko obiekt POJO speniajcy pewne
proste wymagania:
Musi mie bezargumentowy konstruktor lub konstruktor deklarujcy adnotacj @Inject.
Klasa musi by konkretna i znajdowa si na najwyszym poziomie hierarchii albo
by opatrzona adnotacj @Decorate. Nie moe by to niestatyczna klasa wewntrzna.
Ziarno nie moe by zdefiniowane jako EJB.
Jeli ziarno jest zdefiniowane jako zarzdzane przez inn technologi Javy EE, np. JSF,
to rwnie bdzie zarzdzane przez ten kontener.
Obiekty kadej klasy speniajcej te wymagania s tworzone i zarzdzane przez kontener i mog
by wstrzykiwane. Nie trzeba adnej specjalnej adnotacji, aby oznaczy klas jako ziarno zarzdzane.

Kup ksik

Pole ksik

Implementacja wstrzykiwania zalenoci w Javie EE

79

Kontener szuka ziaren w archiwach ziaren. Wyrnia si dwa typy takich archiww jawne
i niejawne. Archiwum jawne zawiera deskryptor wdroenia bean.xml, ktry z reguy pozostaje
pusty. CDI skanuje klasy w archiwum w poszukiwaniu klas speniajcych opisane powyej wymagania
stawiane ziarnom oraz przejmuje do zarzdzania i wstrzykiwania wszystkie te z nich, ktre nie
maj adnotacji @Vetoed. Adnotacja ta wyklucza klas z grupy klas zarzdzanych przez kontener.
W niektrych przypadkach nie jest podane zezwolenie kontenerowi na zarzdzanie wszystkimi
znalezionymi ziarnami, ktre speniaj warunki. Jeli trzeba ograniczy grup klas, ktre zostan
przyjte przez kontener CDI do zarzdzania, mona zdefiniowa wasno bean-discovery-mode
w deskryptorze wdroenia bean.xml. Na listingu 5.10 pokazano fragment tego pliku zawierajcy
wasno bean-discovery-mode z wartoci all.
Listing 5.10. Tryb wykrywania ziaren ustawia si w pliku bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
...
</beans>

Wasnoci bean-discovery-mode mona przypisa jedn z trzech wartoci: all, none lub annotated.
Ustawienie all oznacza dla kontenera CDI, e ma zarzdza wszystkimi znalezionymi w archiwum
ziarnami. Jest to warto domylna. Ustawienie none oznacza, e kontener CDI ma w ogle nie
zarzdza ziarnami, a annotated sprawia, e archiwum zachowuje si jak archiwum niejawne.
W takim przypadku kontener szuka ziaren z adnotacjami oznaczajcymi ich zakres.
Niejawne archiwum ziaren nie zawiera deskryptora wdroenia bean.xml. Stanowi to dla kontenera
CDI sygna, e powinien zarzdza tylko ziarnami z okrelonym zakresem. Wicej informacji
na temat zakresw ziaren znajduje si w punkcie Konteksty i zakres.

Adnotacja @Inject
Waciwoci adnotacji @Inject zostay ju opisane. Zanim wprowadzono technologi CDI do Javy EE,
kady system szkieletowy wstrzykiwania zalenoci dziaa na swj sposb. Kiedy w Javie EE
zastosowano kontener CDI, ktry mia pracowa obok kontenera EJB, adnotacja @Inject staa si
jedynym i abstrakcyjnym interfejsem dla prawie wszystkich operacji wstrzykiwania. Dziki niej
mona uywa kadego kontenera lub systemu szkieletowego wstrzykiwania zalenoci
odpowiedniego w danym przypadku.

Konteksty i zakres
Kontekst jest tym, co odrnia kontenery EJB od CDI. Cykl ycia ziarna CDI jest powizany
z zakresem kontekstowym. Istniej cztery zakresy CDI:
@RequestScoped zakres obejmuje danie HTTP uytkownika.
@SessionScoped zakres obejmuje sesj HTTP uytkownika.
@ApplicationScoped stan jest wspdzielony przez wszystkich uytkownikw w aplikacji.
@ConversationScoped zakres jest kontrolowany przez programist.

Kup ksik

Pole ksik

80

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

Ziarno opatrzone adnotacj okrelajc zakres przechowuje stan przez cay ten zakres i wspdzieli
ten stan z kadym klientem dziaajcym w tym samym zakresie. Na przykad ziarno o zakresie dania
przechowuje stan przez cay czas istnienia dania HTTP, a ziarno o zakresie sesji przechowuje
stan przez cay czas istnienia sesji HTTP. Ziarno z zakresem jest automatycznie tworzone w razie
potrzeby i niszczone na kocu kontekstu, w ktrym bierze udzia.
Adnotacje zakresowe s czsto uywane do okrelania zakresu ziaren wykorzystywanych
przez jzyk EL (ang. Expression Language) w faceletach.

Nazewnictwo i EL
Ziarno z adnotacj @Named jest dostpne poprzez jzyk EL. Domylnie w wyraeniu naley uy
nazwy klasy, tylko zmieni pierwsz liter na ma. W odniesieniach do metod dostpowych
zaczynajcych si od przedrostka get lub is naley opuci t czstk. Na listingu 5.11 pokazano
stosowny przykad.
Listing 5.11. Adnotacja @Named sprawia, e ziarno staje si widoczne dla EL
package com.devchronicale.di;
import j avax.enterprise.context.RequestScoped;
import j avax. inj ect.Named;
@Named // Defining that this is a managed bean
@RequestScoped // Defines the scope
public class User {
private String fullName;
public String getFullName() {
return this .fullName;
}

// dalsze metody usunite dla uproszczenia


}

Jest to prosta implementacja nazwanego ziarna zwracajcego acuch, gdy zostanie wywoana
metoda getFullName(). W facelecie do metody tej naleaoby odnie si za pomoc nazwy
user.fullname.
<h:form id="user">
<p><h:outputText value="#{user.fullname}"/></p>
</h:form>

Ziarna CDI jako wsparcie dla JSF


Jak w poprzednim przykadzie, ziarna CDI mog suy jako ziarna wspierajce dla stron JSF.
Dostp do nazwanych ziaren mona uzyska poprzez ich nazw z pierwsz liter zmienion
na ma. Dostp do pl i metod dostpowych na stronach JSF mona uzyska zgodnie
z konwencjami Javy. Technologia JSF nie jest tematem tej ksiki, ale na listingu 5.11
pokazano przykad wykorzystania ziaren CDI z JSF.

Kup ksik

Pole ksik

Implementacja wstrzykiwania zalenoci w Javie EE

81

Kwalifikatory
W tym podrozdziale opisujemy sposoby tworzenia wasnych klas kwalifikatorw.
Na listingu 5.12 tworzymy kwalifikator o nazwie Mongo, przy uyciu ktrego mona dodawa
adnotacje do pl. Jeli chcesz zastosowa t adnotacj do metody, parametru lub klasy albo
interfejsu (typu), to moesz j doda do adnotacji @Target.
Listing 5.12. Tworzenie kwalifikatora o nazwie @Mongo
package com.devchronicale.di;
import static java.lang.annotation.ElementType. FIELD ;
import static java.lang.annotation.RetentionPolicy. RUNTIME ;
import j ava.lang.annotation.Retention;
import j ava.lang.annotation.Target;
import j avax. inj ect.Qualifier;
@Qualifier
@Retention(RUNTIME)
@Target({ FIELD} )
public @interface Mongo {}

Szerzej na temat rnych zastosowa adnotacji piszemy w rozdziale 6.

Alternatywy
W przedstawionych przykadach pokazalimy, jak za pomoc kwalifikatorw odrni od siebie
dwie rne implementacje interfejsu UserDataRepository. Takich wyborw implementacji
dokonuje si z reguy w czasie pisania programu, wprowadzajc odpowiednie zmiany w kodzie.
Ale w razie potrzeby mona te zrobi to podczas wdraania programu za pomoc adnotacji
@Alternative i kilku linijek konfiguracji w deskryptorze wdroenia bean.xml.
Korzystajc z dotychczasowych przykadw, oznaczymy nasze dwie implementacje interfejsu
UserDataRepository adnotacj @Alternative oraz zdefiniujemy odpowiedni konfiguracj

w pliku bean.xml. W niej zdecydujemy, ktr implementacj naley wstrzykn.


@Alternative
public class UserDataRepositoryMongo implements UserDataRepository { ... }
@Alternative
public class UserDataRepositoryMySQL implements UserDataRepository { ... }

Implementacj wykorzystywan w aplikacji deklarujemy w pliku bean.xml:


<beans ...>
<alternatives>
<class>com.devchronicale.di.UserDataRepositoryMongo</class>
</alternatives>
</beans>

Alternatywy czsto s wykorzystywane w fazie testowania programu do tworzenia atrap obiektw.

Kup ksik

Pole ksik

82

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

Stereotypy
Stereotypy mona sobie wyobraa jako szablony definiujce cechy typu ziarna. Na przykad
ziarno wykorzystywane na poziomie modelu w aplikacji zbudowanej wedug wzorca
Model Widok Kontroler (MVC) do dziaania wymaga pewnych adnotacji. Mog to by np. te:
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)

Do zdefiniowania ziarna modelowego niezbdne s tylko adnotacje @Named i @RequestScoped.


Pozostae s potrzebne do utworzenia adnotacji o nazwie @Model.
W razie potrzeby do kadego ziarna mona przypisa wszystkie te adnotacje albo mona
zdefiniowa stereotyp o nazwie @Model i tylko jego uywa w przypadku ziaren. To drugie
rozwizanie znacznie upraszcza kod i uatwia jego obsug serwisow.
Aby utworzy stereotyp, definiuje si now adnotacj i stosuje si wymagane adnotacje,
jak pokazano na listingu 5.13.
Listing 5.13. Adnotacja stereotypowa
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}

Kade ziarno z adnotacj @Model ma zakres dania (@RequestScoped) i jest widoczne


dla EL (@Named). Na szczcie kontener CDI z tym stereotypem zosta ju zdefiniowany.
Adnotacji stereotypowych najczciej uywa si w kombinacji z adnotacj alternatywn
do oznaczania obiektw atrapowych.

Inne wzorce zwizane z CDI


Technologia CDI daa programistom Javy EE wiele nowych moliwoci. Nie jest ona
tylko prostym systemem szkieletowym wstrzykiwania zalenoci, lecz znacznie uatwia
implementowanie rnych wzorcw.
W kolejnych rozdziaach znajduje si szczegowy opis tych wzorcw projektowych.
Poniej zamiecilimy krtkie wprowadzenie na zaostrzenie apetytu.
W rozdziale 7., Wzorzec Dekorator, znajduje si opis wzorca Dekorator. Dekoratory opakowuj
obiekty docelowe, aby dynamicznie doda nowe obowizki. Kady dekorator mona opakowa
w inny dekorator, co teoretycznie umoliwia utworzenie nieskoczonej liczby dekorowanych
obiektw docelowych w czasie dziaania programu. Wzorzec Dekorator wykorzystuje adnotacje
@Decorator i @Delegate. Kolejno dekorowania okrela si w pliku bean.xml.
W rozdziale 6. opisany jest wzorzec Fabryka. Fabryki ograniczaj do minimum wykorzystanie
sowa kluczowego new i mog zawiera proces inicjacji oraz rne konkretne implementacje.
Wzorzec Fabryka wykorzystuje adnotacj @Produces do oznaczania metod producenckich.
Obiekt docelowy moe wstrzykn lub obserwowa wyprodukowane obiekty.

Kup ksik

Pole ksik

Podsumowanie

83

W rozdziale 11. znajduje si opis wzorca Obserwator i zdarze. Wzorzec ten zmienia kierunek
przepywu wiadomoci, czyli kolejno wywoujcego i wywoywanego. Przy uyciu tego wzorca
nie trzeba agresywnie sprawdza zasobu, tylko mona subskrybowa zmiany zachodzce w zasobie.
Wzorzec Obserwator w Javie EE wykorzystuje adnotacj @Observes i zdarzenia. Obserwatory
docelowe mog obserwowa wszystkie zdarzenia.
Tematem rozdziau 8. s aspekty i interceptory. Przy ich uyciu mona zmieni sposb
wykonywania kodu w czasie dziaania programu. Kady aspekt lub interceptor moe zatrzyma
wykonywanie i wczy si w wybranym miejscu. Umoliwia to dynamiczne wprowadzanie zmian
nawet w duych programach.

Podsumowanie
W tym rozdziale przedstawilimy techniki wstrzykiwania zalenoci w Javie EE. Koncepcja ta
umoliwia rozlunienie wizi midzy skadnikami systemu atwiej, ni mona by si byo spodziewa.
Pokazalimy, jak wstrzykiwanie zalenoci umoliwia pozbycie si sowa kluczowego new, a wic
uniknicie rcznego tworzenia obiektw.
Sporo miejsca powicilimy te technologii CDI, ktra dziki wykorzystaniu nowego kontenera
stwarza cakiem nowe moliwoci. Przy jej uyciu wstrzykiwanie zalenoci mona stosowa
do wszystkich obiektw, a implementacja innych wzorcw opisanych w tej ksice jest znacznie
atwiejsza.

WICZENIA
1.

Zaprojektuj klas usugow zwracajc do klienta dowolny acuch.

2.

Zaimplementuj czytnik plikw i wstrzyknij go do wczeniej utworzonej usugi.

3.

Zaimplementuj obiekt odczytujcy jako acuch tre HTML z okrelonego na stae adresu URL.

4.

Zastanw si, co musisz zmieni w klasie usugowej, aby mc wstrzykiwa obu dostawcw
danych przy uyciu tej samej referencji.

5.

Czy da si dynamicznie wstrzykn wybran implementacj w zalenoci od pewnych


warunkw? Na przykad czy mona sprawi, aby czytnik plikw by wstrzykiwany podczas
pracy nad programem, a czytnik HTTP w produkcji?

Kup ksik

Pole ksik

84

ROZDZIA 5. Wstrzykiwanie zalenoci i CDI

Kup ksik

Pole ksik

Skorowidz

A
abstrakcyjny dekorator, 107
adnotacja, 37
@DependsOn, 65
@GeneratedValue, 176
@Inject, 76, 79, 94
@Interceptor, 124
@Interceptors, 124
@Lock, 67
@MessageEvent, 166
@Named, 7680, 96, 207
@Observes, 166
@Path, 193
@Produce, 101
@RequestScope, 207
@Schedule, 150, 156
@Secure, 129
@Timeout, 151, 156
@Transient, 176
stereotypowa, 82
agencja informacyjna, 162
alternatywy, 81
antywzorce, 35, 220
AOP, aspect-oriented programming, 117
API JPA, 174
architektura
Lazani, 221
mikrousugowa, 215, 219
monolityczna, 215, 216, 220
wielowarstwowa, 38

Kup ksik

aspekty, 122
asynchroniczne
serwlety, 140
ziarna, 138
asynchroniczno, 133

B
baza danych typu NoSQL, 171
bezpieczestwo, 32
bezstanowo, 184

C
CDI, Context and Dependency Injection, 34, 43, 71, 77
CMP, Container-Managed Persistence, 174
cykl ycia interceptora, 125
czasomierz, 155
automatyczny, 150
programowy, 151
czas dostpu wspbienego, 68

D
DAO, data access object, 172
definicja filtru serwletu, 121
dekompozycja na usugi, 218
dekorator
BlackFridayDiscountDecorator, 111
dodajcy dodatki, 107
PriceDiscountDecorator, 110
dekoratory bez konfiguracji XML, 113
dekorowanie, 109
delegacja, 143

Pole ksik

232 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE


DI, Dependency Injection, 71
diagram klas
dziedziczenie, 28
wzorca
Dekorator, 105
Dostpu do Danych, 172
Fabryka Abstrakcyjna, 90
Fasady, 51
Obserwator, 162
Singleton, 59
diagram wzorca Model Widok Kontroler, 201
dugotrwae sondowanie, 212
dokument JSR, 41
dostp wspbieny do singletonu, 68
DTO, data transfer object, 172, 200

E
EJB, 78
EJB, Enterprise JavaBeans, 41
EL, 80
encja, entity, 174

F
fabryka, 85
Abstrakcyjna, 85, 89
DAO, 177
facelety, 206
filtr serwletu, 120
format JSON, 191

G
gniazda sieciowe, 212

H
HATEOAS, 182, 194

I
idempotencja, 187
implementacja
@Secure, 129
AOP, 120
asynchronicznoci, 136
automatycznego czasomierza, 151
bezstanowej fasady, 54
CoffeMachine, 88

Kup ksik

czasomierza programowego, 152


czasomierza w Javie EE, 150
DAO, 179
fabryki, 99
Fabryki Abstrakcyjnej, 90
filtru serwletu, 121
interceptora, 122
interceptorw klasowych, 123
interfejsu AbstractDrinksMachineFactory, 91
interfejsu DAO, 177, 179
interfejsu UserDataRepository, 73
LongMessage, 98
Metody Fabrycznej, 88, 91
publikacja-subskrypcja, 215
punkt do punktu, 214
rady docelowej, 123
REST w Javie EE, 191
REST-owego interfejsu API, 191
ShortMessage, 98
SoftDrinksMachine, 88
wstrzykiwania zalenoci, 72
wstrzykiwania zalenoci w Javie EE, 75
wzorca
DAO w Javie EE, 174
Dekorator, 106
Dekorator w Javie EE, 109
Fabryka w Javie EE, 91
Fasada, 52
Fasada w Javie EE, 53
MVC, 202, 206, 207
MVC w Javie EE, 206
Obserwator, 162
Obserwator w Javie EE, 164
Singleton, 59, 62
Singleton w Javie EE, 63
wzorcw projektowych, 47
informacje
o kontekcie, 124
o wzorcu DAO, 173
interceptor, 44, 117, 122, 125
interceptor dziennika, 45
interceptory
CDI, 128
na poziomie domylnym, 125
interfejs
AbstractDrinksMachineFactory, 91
API, 197
DAO, 176
dla fabryki abstrakcyjnej, 90

Pole ksik

Skorowidz 233

kwalifikacyjny adnotacji, 166


MessageType, 98
Observable, 164
Order, 106
Product, 109
Publisher, 163
Serializable, 176
Timer, 150
TimerService, 151, 152
UserDataRepository, 73

J
J2EE, 31
Java SE, Java Standard Edition, 31
jednostka utrwalania, 178
JPA, Java Persistence API, 174
JPE, 31
JSF, 80
JSR, Java Specification Request, 41

K
klasa
akcji, 205
DrinksMachine, 88
encyjna, 175
fabryczna, 204
ListUserAction, 206
Observable, 164
User, 73
UserService, 7376, 203
UserServiceFactory, 74
klient-serwer, 183
kolejka, 214
kolejno
interceptorw, 126
uruchamiania, 65
komponent sieciowy, 40
konfiguracja serwletu facesservlet, 206
konteksty, 44, 77, 79
kontener CDI, 97, 101
kontroler, 200
konwencja, 43
kwalifikator, 81, 95
LongMessage, 94
niestandardowy, 112
ShortMessage, 94

Kup ksik

L
LDAP, Lightweight Directory Access Protocol, 171
litera adnotacyjny, 99

M
mapowanie obiektowo-relacyjne, ORM, 174
metoda
DELETE, 188
GET, 187
executeTask, 150
Fabryczna, 85, 86
GET, 194
getInfo, 150
getNextTimeout, 153
getThirdChild, 168
isCalendarTimer, 153
POST, 188, 194
PUT, 188
serviceTrace, 165
setRollbackOnly, 169
setTimer, 151
startAsync(), 141
startService, 165
metody HTTP, 187
mikrousugi, 219
model
dojrzaoci Richardsona, 185
komponentowy, 42
programowania J2EE, 227
modyfikowanie czasomierza, 155
MVC, model-view-controller, 199
MVP, model, view, presenter, 202

N
nazewnictwo, 80
nazewnictwo zasobw, 186
niejednoznaczno, 95
niestandardowa adnotacja wiadomoci, 99
niestandardowy typ adnotacji, 95

O
obiekt
dostpu do danych, DAO, 172
DTO, 173
JSON, 192
transferu danych, DTO, 172

Pole ksik

234 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE


obiekt
typu ManagedThreadFactory, 142
typu ScheduleExpression, 153
obserwator, observer, 160
RadioChannel, 163
zdarze transakcji, 167
obserwowalne ziarno usugowe, 164
odbiornik, listener, 161
odmierzanie czasu, 147
okrelanie kolejnoci uruchamiania, 65, 66
operacje CRUD, 172
ORM, Object-Relational Mapping, 174

P
plik persistence.xml, 178
pliki EJB-JAR, 126
pobieranie informacji, 124
podczanie faz cyklu ycia, 125
podmiot, 160
POJO, 37
profil sieciowy Javy EE, 42
programowanie
aspektowe, AOP, 117
asynchroniczne, 133, 138
przekazywanie wiadomoci, 214
przenono, 32
publikacja-subskrypcja, 215
punkt
do punktu, 214
kocowy, 212
kocowy z adnotacjami, 213

R
repozytorium LDAP, 171
REST, 181, 182
bezstanowo, 184
jednolity interfejs, 184
klient-serwer, 183
kod na danie, 184
nazewnictwo zasobw, 186
posts, 189
system warstwowy, 184
topics, 189
users, 188
zapisywanie danych w buforze, 184
REST-owy interfejs API, 185, 188
rozrnianie ziaren, 96

Kup ksik

rozstrzyganie
niejednoznacznoci, 95, 96
wieloznacznoci, 77
rozwizania dla biznesu, 31

S
schemat implementacji MVC, 202
serwer Java EE, 41
serwlet, 140
serwlet FacesServlet, 206
skalowalno, 217
SOA, Service Oriented Architecture, 33, 215, 228
stereotypy, 82
synchronizacja singletonu, 60
system szkieletowy, 222
szecian AKF, 217

T
technika CDI, 77
technologia J2EE, 32
tematy, topics, 189, 214
transakcje, 32, 156
tworzenie
obiektu singletonowego, 60, 61
uytkownika, 189
typ wyliczeniowy, 62
typy wzorca MVC, 201

U
Uberklasa, 220
users, 188
usuga odmierzania czasu, 147
usugi sieciowe, 181
uytkownicy, users, 188
uywanie
interceptorw, 130
programowania asynchronicznego, 143
REST, 196
wzorca DAO, 180
wzorca Dekorator, 114
wzorca Fasada, 55
wzorca MVC, 208
wzorca Obserwator, 169
wzorca Singleton, 69
wzorcw, 227
wzorcw fabrycznych, 100

Pole ksik

Skorowidz 235

W
warstwa
EIS, 40
kliencka, 39
logiki biznesowej, 40
porednia, 214
warunki REST, 183
wizanie interceptora, 129
widok, 200
widok renderujcy dane, 208
wpisy, posts, 189
wspbieno, 67
wstrzykiwanie
acucha, 92
zalenoci, 44, 77
zalenoci, DI, 71
ziaren, 94, 96
wyjtek IndexOutOfBounds, 168
wykorzystywanie singletonw, 64
wykrywanie ziaren, 79
wyczanie interceptorw, 128
wyraenia
czasowe, 153
kalendarzowe, 154
wywoywanie singletonu, 64
wzorce
behawioralne, 30
biznesowe, 33
konstrukcyjne, 30
strukturalne, 30
zwizane z CDI, 82

Kup ksik

wzorzec
Asynchroniczno, 134
Dekorator, 103
Dostp do Danych, 171, 172
Fabryka, 85
Fasada, 49
Model Widok Kontroler, 199
MVC, 200
Obiekt Transferu Danych, 173
Obserwator, 159
projektowy, 28
Singleton, 57

Z
zakres, 79
zalety architektury mikrousugowej, 218
zarzdzanie wspbienoci, 67
zasada Hollywood, 160
zasady Javy EE, 42
zdarzenie transakcji, 167
ziarna
asynchroniczne, 138
bezstanowe, 53
CDI, 78, 80
obserwatora, 165
singletonowe, 63
stanowe, 55
usugowe, 164
wiadomoci, 93
wspierajce, 206
ziarno, 38
encyjne, entity bean, 174
MessageA, 92
MessageB, 93

Pole ksik

236 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE

Kup ksik

Pole ksik

You might also like