Tytuł oryginału: Professional Java® EE Design Patterns Tłumaczenie: Łukasz Piwko ISBN: 978-83-283-1318-7 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 zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/javeez_ebook Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Poleć książkę na Facebook.com Księgarnia internetowa Kup w wersji papierowej Lubię to! » Nasza społeczność Oceń książkę Dla Nilay i całej mojej rodziny (Semry i Mustafy Yenerów) za wsparcie i czas, których potrzebowałem do napisania tej książki — MURAT Dla Marii za wsparcie i dodawanie mi otuchy — ALEX Spis treści O autorach ......................................................................................................... 11 O korektorze merytorycznym ......................................................................... 13 Podziękowania ................................................................................................. 15 Przedmowa ....................................................................................................... 17 Wprowadzenie .................................................................................................. 19 CZĘŚĆ I WPROWADZENIE DO WZORCÓW PROJEKTOWYCH W JAVIE EE Rozdział 1. Krótki przegląd wzorców projektowych ........................................................ 27 Czym jest wzorzec projektowy ........................................................................................28 Jak odkryto wzorce i do czego są potrzebne ............................................................29 Wzorce w realnym świecie .........................................................................................30 Podstawy wzorców projektowych ...................................................................................31 Wzorce w rozwiązaniach dla biznesu .............................................................................31 Od Javy do Javy dla biznesu .......................................................................................31 Pojawienie się wzorców Javy dla przedsiębiorstw ...................................................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 6 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE Konwencja przed konfiguracją ........................................................................................43 CDI ......................................................................................................................................43 Interceptory ........................................................................................................................44 Podsumowanie ...................................................................................................................45 Ćwiczenia ............................................................................................................................45 CZĘŚĆ II IMPLEMENTACJA WZORCÓW PROJEKTOWYCH W JAVIE EE Rozdział 3. Wzorzec Fasada ................................................................................................ 49 Czym jest Fasada ................................................................................................................50 Diagram klas wzorca Fasady ......................................................................................51 Implementacja wzorca Fasada w zwykłym kodzie źródłowym ...................................52 Implementacja wzorca Fasada w Javie EE ......................................................................53 Fasada z ziarnami bezstanowymi ..............................................................................53 Fasada ze stanowym ziarnem ....................................................................................55 Gdzie i kiedy używać 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 zwykłym kodzie .............................................59 Implementacja wzorca Singleton w Javie EE .................................................................63 Ziarna singletonowe ....................................................................................................63 Wykorzystywanie singletonów przy uruchamianiu ...............................................64 Określanie kolejności uruchamiania ........................................................................65 Współbieżność .............................................................................................................67 Gdzie i kiedy używać wzorca Singleton ..........................................................................69 Podsumowanie ...................................................................................................................69 Ćwiczenia ............................................................................................................................70 Rozdział 5. Wstrzykiwanie zależności i CDI ....................................................................... 71 Na czym polega wstrzykiwanie zależności .....................................................................72 Implementacja wstrzykiwania zależności w zwykłym kodzie .....................................72 Implementacja wstrzykiwania zależności w Javie EE ...................................................75 Adnotacja @Named ....................................................................................................76 Wstrzykiwanie zależności 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 Spis treści 7 Stereotypy .....................................................................................................................82 Inne wzorce związane z CDI ......................................................................................82 Podsumowanie ...................................................................................................................83 Ćwiczenia ............................................................................................................................83 Rozdział 6. Wzorzec Fabryka .............................................................................................. 85 Czym jest Fabryka .............................................................................................................86 Metoda Fabryczna .............................................................................................................86 Implementacja Metody Fabrycznej w zwykłym kodzie .........................................88 Fabryka Abstrakcyjna .......................................................................................................89 Implementacja Fabryki Abstrakcyjnej w zwykłym kodzie ....................................90 Implementacja wzorca Fabryka w Javie EE ...................................................................91 Okiełznać moc kontenera CDI ..................................................................................97 Gdzie i kiedy używać wzorców 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 zwykłym kodzie ...............................................106 Implementacja wzorca Dekorator w Javie EE .............................................................109 Dekoratory bez konfiguracji XML .........................................................................113 Gdzie i kiedy używać wzorca Dekorator .....................................................................114 Podsumowanie ................................................................................................................115 Ćwiczenia .........................................................................................................................115 Rozdział 8. Programowanie aspektowe (interceptory) .................................................. 117 Co to jest programowanie aspektowe ...........................................................................118 Implementacja AOP w zwykłym kodzie ......................................................................120 Aspekty w Javie EE i interceptory .................................................................................122 Cykl życia interceptora .............................................................................................125 Interceptory na poziomie domyślnym ...................................................................125 Kolejność interceptorów ...........................................................................................126 Interceptory CDI .......................................................................................................128 Gdzie i kiedy używać interceptorów .............................................................................130 Podsumowanie .................................................................................................................131 Rozdział 9. Asynchroniczność .......................................................................................... 133 Co to jest programowanie asynchroniczne ..................................................................134 Wzorzec Asynchroniczność ....................................................................................134 Implementacja asynchroniczności w zwykłym 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 8 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE Rozdział 10. Usługa odmierzania czasu ............................................................................. 147 Czym jest usługa odmierzania czasu .............................................................................148 Implementacja czasomierza w Javie EE ........................................................................150 Czasomierze automatyczne ......................................................................................150 Czasomierze programowe ........................................................................................151 Wyrażenia 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 zwykłym kodzie .............................................162 Implementacja wzorca Obserwator w Javie EE ...........................................................164 Gdzie i kiedy używać wzorca Obserwator ...................................................................169 Podsumowanie ................................................................................................................170 Ćwiczenia .........................................................................................................................170 Rozdział 12. Wzorzec Dostęp do Danych ........................................................................... 171 Czym jest wzorzec Dostęp do Danych ..........................................................................172 Diagram klas Dostępu do Danych .........................................................................172 Ogólne informacje o wzorcu Dostęp do Danych .......................................................173 Wzorzec Obiekt Transferu Danych ........................................................................173 API JPA i ORM ..........................................................................................................174 Implementacja wzorca Dostęp do Danych w Javie EE ...............................................174 Implementacja DAO bezpieczna pod względem typów ......................................179 Gdzie i kiedy używać wzorca Dostęp do Danych ........................................................180 Podsumowanie .................................................................................................................180 Ćwiczenia ..........................................................................................................................180 Rozdział 13. REST-owe usługi sieciowe ............................................................................. 181 Co to jest REST ................................................................................................................182 Sześć warunków REST ....................................................................................................183 Klient-serwer ..............................................................................................................183 Jednolity interfejs .......................................................................................................184 Bezstanowość .............................................................................................................184 Możliwość zapisywania danych w buforze ............................................................184 System warstwowy .....................................................................................................184 Kod na żądanie ...........................................................................................................184 Model dojrzałości Richardsona .....................................................................................185 Poziom 0. — zwykły XML .......................................................................................185 Poziom 1. — zasoby .................................................................................................185 Poziom 2. — czasowniki HTTP .............................................................................185 Poziom 3. — kontrolki hipermedialne ..................................................................185 Spis treści 9 Projektowanie REST-owego interfejsu API .................................................................185 Nazewnictwo zasobów .............................................................................................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 używać 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 zwykłym kodzie ........................................................202 Implementacja wzorca MVC w Javie EE ......................................................................206 Serwlet FacesServlet .........................................................................................................206 Implementacja wzorca MVC przy użyciu serwletu FacesServlet ..............................206 Gdzie i kiedy używać 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 pośrednia do przekazywania wiadomości ..................................214 Co to jest architektura mikrousługowa .......................................................................215 Architektura monolityczna ......................................................................................215 Skalowalność ..............................................................................................................217 Dekompozycja na usługi ..........................................................................................218 Zalety architektury mikrousługowej .......................................................................218 Nie ma nic za darmo .................................................................................................219 Wnioski .......................................................................................................................220 Kilka antywzorców na zakończenie .............................................................................220 Uberklasa ....................................................................................................................220 Architektura Lazani ...................................................................................................221 Pan Kolumb ................................................................................................................221 Korzyści z przyjaźni ..................................................................................................221 Supernowoczesność ..................................................................................................222 Szwajcarski scyzoryk .................................................................................................222 10 JAVA EE. ZAAWANSOWANE WZORCE PROJEKTOWE CZĘŚĆ III PODSUMOWANIE Rozdział 16. Wzorce projektowe — dobre, złe i brzydkie ................................................ 225 Dobre — wzorce sukcesu ...............................................................................................225 Złe — nadużywanie i błędne stosowanie wzorców ....................................................227 Brzydkie ...........................................................................................................................228 Podsumowanie ................................................................................................................230 Skorowidz ....................................................................................................... 231