Java Enterprise Edition 6 (Java EE6) to nowa jakość w tworzeniu korporacyjnych, zaawansowanych aplikacji. Wyjątkowo łatwa konfiguracja, lekki profil internetowy oraz zdecydowanie prostsze pakowanie aplikacji to tylko niektóre z zalet tej platformy. Tempo, w jakim zdobywa ona popularność, zaskakuje niejednego specjalistę. Obecnie jest najczęściej wybierana jako fundament nowych projektów. To znak, że doskonale sprawdziły się założenia przyjęte przez jej twórców. Przyszłość projektów to właśnie platforma Java EE6!
Drugi tom tego rewelacyjnego podręcznika porusza zaawansowane tematy związane z platformą Java EE6. W trakcie lektury poznasz zagadnienia związane z JSF, JAX-RS oraz JAXB. Dowiesz się, jak tworzyć niezawodne ziarna sterowane komunikatami, wstrzykiwać zależności oraz korzystać z elementów programowania aspektowego. Najwięcej emocji wzbudza rozdział poświęcony Java Persistance API. Mapowanie obiektowo-relacyjne to wciąż gorący temat, a jego poprawne wykorzystanie bardzo korzystnie wpłynie na Twoją aplikację. Błąd w tym miejscu może Cię kosztować sporo nerwów, dlatego powinieneś zaznajomić się z mechanizmami bezpieczeństwa w Java EE6 oraz kontrolą poprawności danych. Książka ta jest kompletnym źródłem informacji o platformie Java EE6. Musisz ją przeczytać!
Dowiedz się:
jak wstrzykiwać zależności
jak wykorzystać potencjał JPA
do czego stosować ziarna sterowane komunikatami
jak stworzyć bezpieczną aplikację
Bezcenne źródło informacji!
Author(s): Eric Jendrock, Ricardo Cervera-Navarro, Ian Evans, Devika Gollapudi, Kim Haase, William Markito, Chinmayee Srivathsa
Edition: 4
Publisher: Helion
Year: 2013
Spis treści
Wstęp
Zanim przeczytasz tę książkę
Dokumentacja powiązana z książką
Konwencje typograficzne
Domyślnie ścieżki i nazwy plików
Inne witryny z dodatkowymi informacjami
Podziękowania
Część I. Wprowadzenie
Rozdział 1. Przegląd technologii
Najważniejsze cechy platformy Java EE 6
Model aplikacji Javy EE
Rozproszone, wielowarstwowe aplikacje
Bezpieczeństwo
Komponenty Javy EE
Klienty Javy EE
Komponenty webowe
Komponenty biznesowe
Warstwa danych
Kontenery Javy EE
Usługi kontenera
Typy kontenerów
Obsługa usług sieciowych
XML
Protokół transportowy SOAP
Standard formatu WSDL
Budowanie i wdrażanie aplikacji Javy EE
Pakowanie aplikacji
Role w procesie wytwarzania aplikacji
Dostawca oprogramowania Java EE
Dostawca narzędzi
Dostawca komponentów aplikacji
Budowniczy aplikacji
Wdrożeniowiec oraz administrator
API Javy EE 6
Technologia Enterprise JavaBeans
Technologia Java Servlet
Technologia JavaServer Faces
Technologia JavaServer Pages
Biblioteka JavaServer Pages Standard Tag Library
Java Persistence API
Java Transaction API
API Javy dla usług sieciowych typu REST
Managed Beans
Contexts and Dependency Injection for the Java EE Platform (JSR 299)
Dependency Injection for Java (JSR 330)
Bean Validation
Java Message Service API
Architektura Java EE Connector
JavaMail API
Java Authorization Contract for Containers
Java Authentication Service Provider Interface for Containers
API Javy EE 6 wchodzące w skład platformy Java Platform, Standard Edition 6 i 7
Java Database Connectivity API
Java Naming and Directory Interface API
JavaBeans Activation Framework
Java API for XML Processing
Java Architecture for XML Binding
SOAP with Attachments API for Java
Java API for XML Web Services
Java Authentication And Authorization Service
Narzędzia serwera GlassFish
Rozdział 2. Używanie przykładowych aplikacji z samouczka
Wymagane oprogramowanie
Java Platform, Standard Edition
Java EE 6 Software Development Kit
Komponent samouczka Javy EE 6
NetBeans IDE
Apache Ant
Uruchamianie i zatrzymywanie serwera GlassFish
Uruchamianie konsoli administracyjnej
Uruchamianie i zatrzymywanie serwera Java DB
Budowanie przykładowych aplikacji
Struktura katalogów z przykładami samouczka
Pobieranie najnowszych aktualizacji samouczka
Debugowanie aplikacji Javy EE
Używanie logów serwera
Używanie debuggera
Część II. Warstwa webowa
Rozdział 3. Technologia JavaServer Faces — tematy zaawansowane
Cykl życia aplikacji JavaServer Faces
Omówienie cyklu życia JavaServer Faces
Faza przywrócenia widoku
Faza zastosowania wartości zapytania
Faza przetwarzania walidacji
Faza aktualizacji wartości modelu
Faza wywołania aplikacji
Faza renderowania odpowiedzi
Częściowe przetwarzanie i rendering
Cykl życia aplikacji faceletów
Model komponentów interfejsu użytkownika
Klasy komponentów interfejsu użytkownika
Model renderingu komponentów
Model konwersji
Model zdarzeń i procesów ich obsługi
Model walidacji
Model nawigacji
Rozdział 4. Wykorzystanie technologii Ajax wraz z technologią JavaServer Faces
Technologia Ajax — wprowadzenie
Wykorzystanie technologii Ajax wraz z technologią JavaServer Faces
Wykorzystanie technologii Ajax wraz z faceletami
Użycie znacznika f:ajax
Wysłanie żądania Ajax
Użycie atrybutu event
Użycie atrybutu execute
Użycie atrybutu immediate
Użycie atrybutu listener
Monitorowanie zdarzeń po stronie klienta
Obsługa błędów
Otrzymywanie odpowiedzi Ajax
Cykl życia żądania Ajax
Grupowanie komponentów
Wczytywanie kodu JavaScript jako zasobu
Użycie API dla kodu JavaScript w aplikacji z faceletami
Użycie adnotacji @ResourceDependency w klasie ziarna
Przykładowa aplikacja ajaxguessnumber
Pliki źródłowe
Uruchomienie przykładu ajaxguessnumber
Dodatkowe informacje na temat użycia technologii Ajax wraz z technologią JavaServer Faces
Rozdział 5. Komponenty złożone — tematy zaawansowane i przykłady
Atrybuty komponentu złożonego
Wywoływanie zarządzanego ziarna
Walidacja wartości komponentu złożonego
Przykładowa aplikacja compositecomponentlogin
Plik komponentu złożonego
Strona wykorzystująca komponent
Zarządzane ziarno
Uruchomienie przykładu compositecomponentlogin
Rozdział 6. Tworzenie własnych komponentów UI i innych obiektów
Określanie, czy potrzebny jest własny komponent lub renderer
Kiedy użyć własnego komponentu?
Kiedy zastosować własny renderer?
Kombinacje komponentów, rendererów i znaczników
Analiza przykładu z mapą obrazu
Dlaczego mam korzystać z technologii JavaServer Faces do implementacji mapy obrazu?
Działanie zrenderowanego kodu HTML
Omówienie strony faceletu
Konfiguracja danych modelu
Podsumowanie klas mapy obrazu
Kroki niezbędne do utworzenia własnego komponentu
Tworzenie własnych klas komponentów
Określenie rodziny komponentu
Przeprowadzenie kodowania
Przeprowadzenie dekodowania
Umożliwienie właściwościom komponentu przyjmowania wyrażeń
Zapis i przywracanie stanu
Przekazanie renderowania do renderera
Tworzenie klasy renderera
Określenie rodzaju renderera
Implementacja klasy nasłuchiwania zdarzeń
Implementacja klasy nasłuchiwania zdarzeń zmiany wartości
Implementacja klas nasłuchujących akcji
Obsługa zdarzeń dla samodzielnie wykonanych komponentów
Definicja znacznika własnego komponentu w deskryptorze biblioteki znaczników
Użycie własnego komponentu
Utworzenie i użycie własnego konwertera
Tworzenie własnego konwertera
Użycie własnego konwertera
Utworzenie i użycie własnego walidatora
Implementacja interfejsu Validator
Określanie własnego znacznika
Użycie własnego walidatora
Wiązanie wartości i instancji komponentów z właściwościami zarządzanego ziarna
Powiązanie wartości komponentu z właściwością
Powiązanie wartości komponentu z niejawnym obiektem
Powiązanie instancji komponentu z właściwością ziarna
Wiązanie konwerterów, walidatorów i obsługi zdarzeń z właściwościami zarządzanego ziarna
Rozdział 7. Konfiguracja aplikacji JavaServer Faces
Wykorzystanie adnotacji do konfiguracji zarządzanych ziaren
Korzystanie z zasięgów zarządzanych ziaren
Plik zasobu konfiguracji aplikacji
Kolejność plików zasobów konfiguracji aplikacji
Konfiguracja zarządzanych ziaren
Użycie elementu managed-bean
Inicjalizacja właściwości przy użyciu elementu managed-property
Inicjalizacja odwzorowań i list
Rejestracja komunikatów aplikacji
Użycie FacesMessage do utworzenia komunikatu
Dostęp do komunikatów o błędach
Korzystanie z walidatorów domyślnych
Rejestracja własnego walidatora
Rejestracja własnego konwertera
Konfiguracja reguł nawigacyjnych
Niejawne reguły nawigacyjne
Rejestracja własnego renderera w zestawie rendererów
Rejestracja własnego komponentu
Podstawowe wymagania stawiane aplikacjom JavaServer Faces
Konfiguracja aplikacji przy użyciu deskryptora wdrożenia
Konfiguracja etapu projektu
Dołączanie klas, stron i innych zasobów
Rozdział 8. Przesył plików do serwera w technologii Java Servlet
Adnotacja @MultipartConfig
Metody getParts i getPart
Przykładowa aplikacja fileupload
Architektura przykładowej aplikacji
Uruchomienie przykładu fileupload
Rozdział 9. Umiędzynarodowienie i lokalizacja aplikacji webowych
Klasy umiędzynarodowienia platformy Javy
Lokalizacja komunikatów i etykiet
Określanie dostępnych języków i regionów
Określenie paczki zasobów
Pobranie komunikatów w odpowiednim języku
Formatowanie dat i czasu
Kodowanie i zestawy znaków
Zestawy znaków
Kodowanie znaków
Część III. Usługi sieciowe
Rozdział 10. JAX-RS — tematy zaawansowane oraz przykład
Adnotacje dla pól i właściwości ziarna w klasach zasobów
Wydobycie parametrów ścieżki
Wydobycie parametrów zapytania
Wydobycie danych formularza
Wydobycie typu Javy dla żądania lub odpowiedzi
Podzasoby i dobór zasobów w trakcie działania usługi
Metody podzasobów
Lokalizator podzasobu
Integracja JAX-RS z technologią EJB i CDI
Warunkowe żądania HTTP
Negocjacja treści w trakcie działania usługi
Użycie JAX-RS z JAXB
Wykorzystanie obiektów Javy do modelowania własnych danych
Rozpoczynanie pracy od definicji schematu XML
Użycie formatu JSON wraz z JAX-RS i JAXB
Przykładowa aplikacja customer
Omówienie elementów przykładowej aplikacji
Klasy encji Customer i Address
Klasa CustomerService
Klasy CustomerClientXML i CustomerClientJSON
Modyfikacja przykładu, by generował klasy encji z istniejącego schematu
Uruchomienie przykładu customer
Część IV. Komponenty EJB
Rozdział 11. Przykład ziarna sterowanego komunikatami
Omówienie przykładu simplemessage
Klient aplikacji simplemessage
Klasa ziarna sterowanego komunikatami
Metoda onMessage
Uruchomienie przykładu simplemessage
Obiekty administrowane związane z przykładem simplemessage
Usunięcie administrowanych obiektów z przykładu simplemessage
Rozdział 12. Korzystanie z osadzonego kontenera komponentów EJB
Omówienie osadzonego kontenera komponentów EJB
Tworzenie aplikacji z EJB z możliwością osadzania
Uruchamianie osadzonych aplikacji
Tworzenie kontenera EJB
Wyszukiwanie referencji do ziaren sesyjnych
Wyłączanie kontenera EJB
Przykładowa aplikacja standalone
Rozdział 13. Wywoływanie metod asynchronicznych ziaren sesyjnych
Wywoływanie metod asynchronicznych
Tworzenie asynchronicznych metod biznesowych
Wywoływanie metod asynchronicznych z poziomu klientów EJB
Przykładowa aplikacja async
Architektura przykładowej aplikacji async
Uruchomienie przykładu async
Część V. Konteksty oraz wstrzykiwanie zależności na platformie Java EE
Rozdział 14. Konteksty oraz wstrzykiwanie zależności na platformie Java EE — tematy zaawansowane
Wykorzystanie alternatyw w aplikacjach CDI
Specjalizacje
Wykorzystanie w aplikacjach CDI metod produkujących, pól produkujących i metod usuwających
Użycie metody produkującej
Użycie pól produkujących do generowania zasobów
Metody usuwające
Użycie predefiniowanych ziaren w aplikacjach CDI
Wykorzystanie zdarzeń w aplikacjach CDI
Definiowanie zdarzeń
Użycie metod obserwatorów do obsługi zdarzeń
Zgłaszanie zdarzeń
Użycie interceptorów w aplikacjach CDI
Użycie dekoratorów w aplikacjach CDI
Użycie stereotypów w aplikacjach CDI
Rozdział 15. Uruchamianie zaawansowanych przykładów dotyczących kontekstów i wstrzykiwania zależności
Przykład encoder — użycie alternatyw
Interfejs Coder i jego implementacje
Strona faceletu i zarządzane ziarno
Uruchomienie przykładowej aplikacji encoder
Przykład producermethods — użycie metody produkującej do wyboru implementacji ziarna
Składniki przykładu producermethods
Uruchomienie przykładowej aplikacji producermethods
Przykład producerfields — użycie pól produkujących do generowania zasobów
Pole produkujące w przykładzie producerfields
Ziarno sesyjne i encja producerfields
Zarządzane ziarno i strony faceletów
Uruchomienie przykładowej aplikacji producerfields
Przykład billpayment — zdarzenia i interceptory
Klasa zdarzenia PaymentEvent
Klasa nasłuchiwania zdarzeń PaymentHandler
Strony faceletów i zarządzane ziarno przykładu billpayment
Klasa interceptora LoggedInterceptor
Uruchomienie przykładowej aplikacji billpayment
Przykład decorators — dekorowanie ziarna
Elementy przykładu decorators
Uruchomienie przykładowej aplikacji decorators
Część VI. Java Persistence API
Rozdział 16. Tworzenie i używanie tekstowych zapytań z kryteriami
Wprowadzenie do zapytań tekstowych w Criteria API
Tworzenie zapytań tekstowych
Wykonywanie zapytań tekstowych
Rozdział 17. Sterowanie współbieżnym dostępem do danych encji przy użyciu blokad
Omówienie blokowania encji i współbieżności
Użycie blokad optymistycznych
Tryby blokad
Ustawienie trybu blokady
Użycie blokad pesymistycznych
Rozdział 18. Wykorzystanie pamięci cache drugiego poziomu w aplikacjach Java Persistence API
Wprowadzenie do pamięci cache drugiego poziomu
Określanie, czy encje można umieścić w cache
Określanie ustawień trybu cache w celu poprawy wydajności
Ustawienie trybu pobierania i zapisu w cache
Sterowanie cache drugiego poziomu w sposób programowy
Część VII. Bezpieczeństwo
Rozdział 19. Bezpieczeństwo w Javie EE — tematy zaawansowane
Korzystanie z certyfikatów cyfrowych
Tworzenie certyfikatu serwera
Dodanie użytkowników do dziedziny certyfikatu
Użycie innego certyfikatu serwera w serwerze GlassFish
Mechanizmy uwierzytelniania
Uwierzytelnianie klienta
Uwierzytelnianie wzajemne
Logowanie przy użyciu formularza w aplikacjach JavaServer Faces
Użycie j_security_check w formularzach JavaServer Faces
Użycie zarządzanego ziarna do uwierzytelniania w aplikacjach JavaServer Faces
Uwierzytelnianie za pomocą JDBC Realm
Zabezpieczanie zasobów HTTP
Zabezpieczenie klientów aplikacji
Użycie modułów logowania
Użycie logowania programowego
Zabezpieczanie aplikacji typu EIS
Logowanie zarządzane przez kontener
Logowanie zarządzane przez komponent
Konfiguracja bezpieczeństwa adapterów zasobów
Konfiguracja bezpieczeństwa przy użyciu deskryptorów wdrożenia
Określanie w deskryptorze wdrożenia zasad bezpieczeństwa dla prostego uwierzytelniania
Wskazanie w deskryptorze wdrożenia niedomyślnego odwzorowania zarządzającego na rolę
Dalsze informacje na temat bezpieczeństwa
Część VIII. Technologie wspomagające Javę EE
Rozdział 20. Zagadnienia technologii JMS
Wprowadzenie do JMS API
Czym jest przekazywanie komunikatów?
Czym jest JMS API?
Kiedy mogę użyć JMS API?
W jaki sposób JMS API współpracuje z platformą Javy EE?
Podstawowe koncepcje JMS API
Architektura JMS API
Dziedziny komunikatów
Konsumpcja komunikatów
Model programistyczny JMS API
Obiekty administracyjne JMS
Połączenia JMS
Sesje JMS
Producenty komunikatów JMS
Konsumenty komunikatów JMS
Komunikaty JMS
Przeglądarki kolejek JMS
Obsługa wyjątków JMS
Tworzenie wydajnych aplikacji JMS
Użycie prostych mechanizmów trwałości
Użycie zaawansowanych mechanizmów niezawodności
Wykorzystanie JMS API w aplikacjach Javy EE
Użycie adnotacji @Resource w komponentach webowych i EJB
Użycie ziaren sesyjnych do produkcji i synchronicznego otrzymywania komunikatów
Wykorzystanie ziaren sterowanych komunikatami do asynchronicznego otrzymywania komunikatów
Zarządzanie transakcjami rozproszonymi
Korzystanie z JMS API w klientach aplikacji i komponentach webowych
Dodatkowe informacje na temat JMS
Rozdział 21. Przykłady wykorzystania JMS
Tworzenie prostych aplikacji JMS
Prosty przykład synchronicznego otrzymywania komunikatów
Prosty przykład asynchronicznego otrzymywania komunikatów
Prosty przykład przeglądania komunikatów w kolejce
Uruchomienie klientów JMS na wielu systemach
Usunięcie wdrożenia i wyczyszczenie systemu po przykładach JMS
Tworzenie rozbudowanych aplikacji JMS
Przykład potwierdzania komunikatu
Przykład trwałej subskrypcji
Przykład transakcji lokalnej
Aplikacja stosująca JMS API w połączeniu z ziarnem sesyjnym
Tworzenie komponentów aplikacji dla przykładu clientsessionmdb
Tworzenie zasobów dla przykładu clientsessionmdb
Uruchomienie przykładu clientsessionmdb
Aplikacja stosująca JMS API w połączeniu z encją
Opis przykładowej aplikacji clientmdbentity
Tworzenie komponentów przykładowej aplikacji clientmdbentity
Tworzenie zasobów dla przykładu clientmdbentity
Uruchomienie przykładu clientmdbentity
Przykład aplikacji konsumującej komunikaty z zewnętrznego serwera
Opis modułów przykładu consumeremote
Tworzenie komponentów modułu dla przykładu consumeremote
Tworzenie zasobów dla przykładu consumeremote
Użycie dwóch serwerów aplikacji dla przykładu consumeremote
Uruchomienie przykładu consumeremote
Przykład aplikacji wdrażającej ziarno sterowane komunikatami na dwóch serwerach
Opis modułów przykładu sendremote
Tworzenie komponentów modułów dla przykładu sendremote
Tworzenie zasobów dla przykładu sendremote
Uruchomienie przykładu sendremote
Rozdział 22. Mechanizm Bean Validation — tematy zaawansowane
Tworzenie własnych ograniczeń
Użycie wbudowanych ograniczeń do tworzenia własnych ograniczeń
Dostosowywanie komunikatów walidatorów
Paczka zasobów ValidationMessages
Grupowanie ograniczeń
Dostosowanie kolejności walidacji grup
Rozdział 23. Wykorzystanie interceptorów Javy EE
Wprowadzenie do interceptorów
Klasy interceptorowe
Cykl życia interceptorów
Interceptory i CDI
Użycie interceptorów
Wywołania metod przechwytujących
Unknown
Użycie wielu interceptorów metod
Dostęp do parametrów metody celu z poziomu klasy interceptorowej
Przechwytywanie zdarzeń wywołań zwrotnych cyklu życia
Przechwytywanie zdarzeń upłynięcia czasu
Przykładowa aplikacja interceptor
Uruchomienie przykładu interceptor
Rozdział 24. Przykład z adapterem zasobów
Adapter zasobów
Ziarno sterowane komunikatami
Aplikacja webowa
Uruchomienie przykładu mailconnector
Część IX. Przykładowe scenariusze użycia
Rozdział 25. Przykładowy scenariusz użycia — księgarnia Duke’a
Projekt i architektura księgarni Duke’a
Interfejs aplikacji
Encja Book korzystająca z Java Persistence API
Komponenty EJB wykorzystywane w przykładzie
Strony faceletów i zarządzane ziarna używane w przykładowej aplikacji
Własne komponenty i inne własne obiekty wykorzystywane w księgarni Duke’a
Pliki właściwości używane przez aplikację
Deskryptory wdrożeń użyte w przykładowej aplikacji
Uruchomienie aplikacji księgarnia Duke’a
Rozdział 26. Przykładowy scenariusz użycia — ćwiczenia Duke’a
Projekt i architektura aplikacji
Interfejs główny
Encje Java Persistence API wykorzystywane przez interfejs główny
Komponenty EJB wykorzystywane w interfejsie głównym
Pliki faceletów wykorzystywane w interfejsie głównym
Klasy pomocnicze używane w interfejsie głównym
Pliki właściwości
Deskryptory wdrożenia wykorzystywane przez aplikację
Interfejs administracyjny
Komponenty EJB wykorzystywane przez interfejs administracyjny
Pliki faceletów wykorzystywane przez interfejs administracyjny
Uruchomienie przykładowej aplikacji ćwiczenia Duke’a
Konfiguracja serwera GlassFish
Uruchomienie aplikacji ćwiczenia Duke’a
Rozdział 27. Przykładowy scenariusz użycia — las Duke’a
Projekt i architektura aplikacji las Duke’a
Projekt events
Projekt entities
Projekt dukes-payment
Projekt dukes-resources
Projekt sklepu Duke’a
Projekt wysyłka Duke’a
Budowanie i wdrażanie aplikacji las Duke’a
Zadanie przygotowawcze
Uruchamianie aplikacji las Duke’a
Skorowidz