Java EE 6. Leksykon kieszonkowy [PDF]

Korporacyjna wersja Javy (JEE, od ang. Java Enterprise Edition) święci triumfy. Najświeższa odsłona tego języka, oznaczo

184 115 3MB

Polish Pages 183 Year 2013

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Konwencje stosowane w książce......Page 9
Podziękowania......Page 10
Wprowadzenie......Page 12
Elementy składowe......Page 15
Co nowego w wersji Java EE 6......Page 19
Definiowanie i stosowanie komponentów zarządzanych......Page 23
Wywołania zwrotne cyklu życia......Page 25
Serwlety......Page 26
Filtry serwletów......Page 32
Obiekty nasłuchujące zdarzeń......Page 33
Obsługa operacji asynchronicznych......Page 37
Fragmenty konfiguracji......Page 39
Bezpieczeństwo......Page 40
Pakowanie zasobów......Page 43
Obsługa żądań wieloczęściowych......Page 44
Encje......Page 46
Jednostka utrwalania, kontekst utrwalania i menedżer encji......Page 50
Tworzenie, odczytywanie, aktualizowanie i usuwanie encji......Page 52
Sprawdzanie poprawności encji......Page 56
Transakcje i blokowanie......Page 58
Buforowanie......Page 60
Stanowe komponenty sesyjne......Page 62
Bezstanowe komponenty sesyjne......Page 65
Singletonowe komponenty sesyjne......Page 66
Komponenty sterowane komunikatami......Page 68
Przenośne, globalne nazwy JNDI......Page 70
Transakcje......Page 71
Przetwarzanie asynchroniczne......Page 74
Liczniki czasu......Page 75
Interfejs Embeddable API......Page 79
EJB.Lite......Page 80
Rozdział 6. Konteksty i wstrzykiwanie zależności......Page 82
Punkty wstrzykiwania......Page 83
Kwalifikator i alternatywa......Page 84
Producent i dyspozytor......Page 86
Obiekty przechwytujące i dekoratory......Page 88
Zasięgi i konteksty......Page 92
Stereotypy......Page 94
Zdarzenia......Page 95
Przenośne rozszerzenia......Page 97
Rozdział 7. JavaServer Faces......Page 100
Facelety......Page 101
Komponenty złożone......Page 105
Ajax......Page 109
Żądanie HTTP GET......Page 113
Punkty rozszerzeń serwera i klienta......Page 115
Reguły nawigacji......Page 118
Rozdział 8. Usługi sieciowe na bazie protokołu SOAP......Page 119
Punkty końcowe usług sieciowych......Page 121
Dynamiczne punkty końcowe na bazie interfejsu Provider......Page 124
Punkty końcowe na bazie interfejsu Endpoint......Page 125
Klient usługi sieciowej......Page 127
Dynamiczny klient na bazie interfejsu Dispatch......Page 129
Obiekty obsługujące......Page 131
Rozdział 9. Usługi sieciowe zgodne ze stylem REST......Page 134
Proste usługi sieciowe zgodne z REST......Page 135
Wiązanie metod protokołu HTTP......Page 137
Wiele reprezentacji jednego zasobu......Page 140
Wiązanie żądania z zasobem......Page 141
Odwzorowywanie wyjątków......Page 143
Rozdział 10. Java Message Service......Page 144
Wysyłanie wiadomości......Page 147
Jakość usługi......Page 149
Synchroniczne odbieranie komunikatu......Page 150
Asynchroniczne odbieranie komunikatu......Page 152
Tymczasowe miejsca docelowe......Page 153
Ograniczenia wbudowane......Page 154
Definiowanie niestandardowych ograniczeń......Page 158
Grupy sprawdzania poprawności......Page 162
Integracja z technologią JPA......Page 164
Integracja z frameworkiem JSF......Page 166
Dodatek A Programowanie i wdrażanie aplikacji platformy Java EE 6 — pierwsze kroki......Page 168
Specyfikacje technologii korporacyjnych......Page 170
Technologie zarządzania i zabezpieczeń......Page 171
Kolofon......Page 0

Java EE 6. Leksykon kieszonkowy [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Tytuł oryginału: Java EE 6 Pocket Guide TłUillaczenie: ivlikołaj Szczepaniak ISBN: 978-83-246-6643-0

© 2013 Helion S.A. Authorized Polish translation of the English edition Java EE 6 Pocket Guide, ISBN 9781449336684, © 2012 Arun Gupta. This translation is published and sold by permission of O'Reilly ivledia, Inc., which owns or controls all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. 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 le, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: WWW:

[email protected] 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/jee6lk_ebook

ivlożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland.



Poleć książkę na Facebook.com



Księgarnia internetowa



Kup w wersji papierowej



Lubię to!» Nasza społeczność



Oceń książkę

Dla Menki, mojej kochanej żony i najlepszego przyjaciela. Twoje wsparcie i zachęty sprawiają, że nasze życie jest pełne radości i wypełnione treścią. Dla Aditji i Mihira, moich dwóch roześmianych synów, za wspólne zabawy i za przekazywanie mi niezwyklej energii.

Spis treści

Słowo wstępne

9 12 12 15 19

1. Java Platform, Enterprise Edition Wprowadzenie Elementy składowe Co nowego w wersji Java EE 6

23

2. Komponenty zarządzane Definiowanie i stosowanie komponentów zarządzanych

23

Wywołania zwrotne cyklu życia

25

3. Serwlety

26

Serwlety

26

Filtry serwletów

32

Obiekty nasłuchujące zdarzeń

33

Obsługa operacji asynchronicznych

37

Fragmenty konfiguracji

39

Bezpieczeństwo

40

Pakowanie zasobów

43

Odwzorowywanie błędów

44

Obsługa żądań wieloczęściowych

44

4. Java Persistence API

46

Encje

46

Jednostka utrwalania, kontekst utrwalania i menedżer encji

50 52

Tworzenie, odczytywanie, aktualizowanie i usuwanie encji Sprawdzanie poprawności encji

56

Transakcje i blokowanie

58 60

Buforowanie

Spis treści

5

5. Enterprise JavaBeans

62

Bezstanowe komponenty sesyjne

65

Singletonowe komponenty sesyjne

66

Komponenty sterowane komunikatami

68

Przenośne, globalne nazwy JNDI

70

Transakcje

71

Przetwarzanie asynchroniczne

74

Liczniki czasu

75

Interfejs Embeddable API

79

EJB.Lite

80

6. Konteksty i wstrzykiwanie zależności

82

Punkty wstrzykiwania

83

Kwalifikator i alternatywa

84

Producent i dyspozytor

86

Obiekty przechwytujące i dekoratory

88

Zasięgi i konteksty

92

Stereotypy

94

Zdarzenia

95

Przenośne rozszerzenia

97

7. JavaServer Faces

100

Facelety

101

Obsługa zasobów

105

Komponenty złożone

105

Ajax

109

Żądanie HTTP GET

113

Punkty rozszerzeń serwera i klienta

115

Reguły nawigacji

118

8. Usługi sieciowe na bazie protokołu SOAP

6

62

Stanowe komponenty sesyjne

119

Punkty końcowe usług sieciowych

121

Dynamiczne punkty końcowe na bazie interfejsu Provider

124

Punkty końcowe na bazie interfejsu Endpoint

125

Klient usługi sieciowej

127

Dynamiczny klient na bazie interfejsu Dispatch

129

Obiekty obsługujące

131

Spis treści

9. Usługi sieciowe zgodne ze stylem REST

134

Proste usługi sieciowe zgodne z REST

135

Wiązanie metod protokołu HTTP

137

Wiele reprezentacji jednego zasobu

140

Wiązanie żądania z zasobem

141

Odwzorowywanie wyjątków

143

10. Java Message Service

144

Wysyłanie wiadomości

147

Jakość usługi

149

Synchroniczne odbieranie komunikatu

150

Asynchroniczne odbieranie komunikatu

152

Tymczasowe miejsca docelowe

153

154

11. Bean Validation Ograniczenia wbudowane

154

Definiowanie niestandardowych ograniczeń

158

Grupy sprawdzania poprawności

162

Integracja z technologią JPA

164

Integracja z frameworkiem JSF

166

A Programowanie i wdrażanie aplikacji platformy Java EE 6 - pierwsze kroki

168

B Dodatkowe materiały

170

Specyfikacje technologii internetowych

170

Specyfikacje technologii korporacyjnych

170

Technologie usług sieciowych

171

Technologie zarządzania i zabezpieczeń

171

Skorowidz

173

O autorze

183

Kolofon

184

Spis treści

7

8

Spis treści

Java EE 6 Leksykon kieszonkowy

Słowo wstępne Platforma Java EE 6 wyznacza nowe standardy łatwego wytwarzania aplikacji korporacyjnych Javy. Ta książka jest adresowana do wszystkich, którzy chcą szybko poznać elementy tej platformy i opanować podstawy ich stosowania. Książka zawiera przegląd najważniejszych specyfikacji składających się na platformę Java EE 6 (każda z tych specyfikacji została opisana w osobnym rozdziale) . Najważniejsze zagadnienia związane z poszcze­ gólnymi specyfikacjami zostały szczegółowo wyjaśnione i dodatkowo zilustrowane przykładami kodu źródłowego. Nie oczekuję od Czytelnika znajomości poprzednich wersji platformy. Rozumienie kodu wyma­ ga jednak podstawowej wiedzy na temat programowania w Javie .

Konwencje stosowane w książce W książce zastosowano następujące konwencje typograficzne:

Kursywa Kursywa jest stosowana dla adresów poczty elektronicznej oraz nazw i rozszerzeń plików . C z c i o n ka s tałej s z ero kośc i Czcionka stałej szerokości jest stosowana w listingach programów oraz w samym tekście, w odwołaniach do nazw zmiennych lub funkcji, baz danych, typów danych, zmiennych środowiskowych, wyrażeń i słów kluczowych. Czcionka stałej szerokości pisana kursywą

Kursywa służy do wyróżniania fragmentów, które należy zastąpić konkretnymi wartościami lub których wartość zależy od kontekstu.

9

Stosowanie przykładów kodu Ta książka ma ułatwić czytelnikowi realizację konkretnych zadań . Ogólnie kod źródłowy prezentowany w niej można swobodnie sto­ sować w programach i dokumentacji . Nie oczekuję wniosków o zgodę, chyba że czytelnik planuje ponowną publikację istotnych fragmentów tego kodu. Na przykład pisanie programów obejmujących wiele frag­ mentów kodu dołączonego do tej książki nie wymaga dodatkowych pozwoleń. Zgoda wydawcy jest natomiast wymagana w przypadku sprzedaży lub dystrybucji płyt CD-ROM z przykładami zaczerpnię­ tymi z tej książki . Zgoda wydawcy nie jest wymagana także w przy­ padku cytowania tekstu tej książki lub zawartych w niej przykładów kodu. Jest jednak niezbędna, jeśli istotna część przykładowego kodu z tej książki ma trafić do dokumentacji jakiegoś produktu . Będziemy wdzięczni za stosowne przypisy (które nie są wymagane) . Przypis zwykle obejmuje tytuł, autora, wydawcę i numer ISBN. Na przykład: „Java EE 6. Leksykon kieszonkowy, Arun Gupta, Helion 2013, ISBN: 978-83-246-6640-9" . Każdy, kto nie jest pewien, czy planowany sposób użycia przykłado­ wego kodu mieści się w granicach zastosowań, które nie wymagają dodatkowej zgody, może skontaktować się z wydawcą .

Podziękowania Napisanie tej książki nie byłoby możliwe bez wsparcia wielu osób . Chciałbym najpierw podziękować wydawnictwu O'Reilly za zaufanie, którym mnie obdarzyło, i za szansę napisania tej książki . Zespół pra­ cowników wydawnictwa zapewnił mi bezcenne wsparcie na wszystkich etapach redagowania, recenzowania, korekty i publikacji. Michael Loukides z wydawnictwa O'Reilly pomógł mi na początku prac nad tą książką. Meghan Blanchette pomogła mi w pracach redakcyjnych na wszystkich etapach - na bieżąco recenzowała tekst, sugerowała stosowanie właściwych stylów, organizowała korekty merytoryczne i koordynowała moją współpracę z pozostałymi członkami zespołu . Jessica Hosman pomogła mi na początku projektu i dawała wskazówki podczas prac nad właściwą treścią książki . Emily Quill i Kristen Borg dbały o poprawność językową tekstu i do­ kładały wszelkich starań, aby doprowadzić ten materiał do perfekcji.

10

Java EE 6. Leksykon kieszonkowy

Dziękuję także pozostałym członkom zespołu wydawnictwa O'Reilly, z którymi nie miałem bezpośredniego kontaktu i którzy pomagali pod­ czas prac nad książką na wiele różnych sposobów . Szczegółowa korekta i recenzja Markusa Eisele'a (@myfear, http://blog. eisele.net), Johna Yeary'ego (@jyeary, http://javaevangelist.blogspot.com) i Berta Ertmana (@BertErtman, http://bertertman.wordpress.com) to najlepsza gwarancja merytorycznej poprawności tego tekstu i uwzględnienia wszystkich ważnych aspektów. Ogromne doświadczenie i duża wiedza recenzentów przejawiały się chocby w liczbie uwag i komentarzy. Jestem wdzięczny także programistom z całego świata za liczne dys­ kusje, które bardzo pomogły mi w lepszym rozumieniu poszczegól­ nych technologii . Dziękuję swoim kolegom z firmy Oracle i liderom zespołów odpowiedzialnych za specyfikacje JSR, którzy cierpliwie wyja­ śniali mi przypadki użycia uzasadniające różne technologie. Dziękuję też wszystkim innym osobom, które miałem przyjemność spotkać na swojej drodze i które umilały mi tak potrzebne przerwy w pracach nad tą książką .

Słowo wstępne

11

Rozdział 1. Java Platform, Enterprise Edition

Wprowadzenie Java Platform, Enterprise Edition Oava EE) to platforma programowania stworzona na bazie przyjętych standardów i umożliwiająca tworzenie aplikacji internetowych i korporacyjnych. Aplikacje tego typu zwykle składają się z wielu warstw, w tym warstwy frontowej obejmującej fra­ meworki aplikacji internetowych, warstwy środkowej odpowiedzialnej za bezpieczeństwo i obsługę transakcji oraz warstwy wewnętrznej ob­ sługującej połączenia z bazą danych lub rozwiązaniami odziedziczonymi po starszych systemach. Platforma Java EE nie tylko definiuje interfejsy API dla rozmaitych komponentów każdej z tych warstw, ale też udo­ stępnia dodatkowe usługi umożliwiające zarządzanie nazwami, wstrzy­ kiwaniem kodu czy zasobami niezależnie od warstwy. Każdy komponent jest zdefiniowany w odrębnej specyfikacji opisującej odpowiedni interfejs API i oczekiwane zachowania oraz obejmującej dokumentację javadocs. Wydanie Java Platform, Enterprise Edition 6 Oava EE 6) z grudnia 2009 roku oferuje prosty, łatwy w użyciu i kompletny zbiór technologii i rozwiązań potrzebnych do budowy tego rodzaju aplikacji. Już w po­ przedniej wersji Oava EE 5) twórcy tej platformy podjęli pierwsze kroki na rzecz uproszczenia pracy programistów. Platforma Java EE 6 w jeszcze większym stopniu podnosi produktywność programistów i obejmuje wiele dodatkowych, niezwykle przydatnych mechanizmów . Poniżej opisano trzy najważniejsze cele przyświecające twórcom tej platformy: Łatwość stosowania

Platforma Java EE 6 to zupełnie nowa jakość w kwestii prostoty programowania. Zastosowano tutaj na niespotykaną wcześniej skalę koncepcję konwencji ponad konfiguracją oraz mechanizm adnotacji używanych do oznaczania obiektów POJO (Plain Old Java Object- dosł. zwykłych, starych obiektów Javy) . Wystarczy dodać adnotację @Statel ess, @Stateful lub @S i ng l eton, aby przekształcić obiekt POJO w komponent Enterprise JavaBean . Co więcej, tak przygotowany obiekt można łatwo umieścić w pliku WAR, zamiast stosować specjalne techniki pakowania plików JAR czy EAR. Także serwlety mają teraz postać obiektów POJO, tyle że ozna­ czonych adnotacją @WebServl et. Deskryptory wdrożenia, jak web.xml czy faces-config.xml, w większości przypadków są opcjonalne 12

Java EE 6. Leksykon kieszonkowy

informacje, które wcześniej definiowano w tych deskryptorach, znajdują się teraz w odpowiednich adnotacjach. Istnieją też do­ myślne reguły nawigacji pomiędzy stronami JSF . Publikowanie obiektu jako usługi sieciowej zgodnej z REST sprowadza się teraz do umieszczenia adnotacji @Path w zwykłym obiekcie POJO. Opcjonalne deskryptory wdrożenia, konwencja ponad konfiguracją i powszechne stosowanie adnotacji powoduje, że platforma Java EE 6 jest łatwa w użyciu i - co równie ważne - nie wymaga takich ilości kodu jak starsze wersje. Lekkość

Platforma Java EE 6 obejmuje 31 specyfikacji komponentów (patrz dodatek EE .6 specyfikacji tej platformy) . Wspomniane komponenty obejmują Enterprise JavaBeans (EJB), serwlety, JavaSe­ rver Faces OSF), usługi Java API for RESTful Web Services OAX-RS) i wiele innych. Budowa typowych aplikacji korporacyjnych zwy­ kle nie wymaga wszystkich tych komponentów. Co więcej, nie­ które spośród tych technologii, na przykład Java API for XML Registries (JAXR) oraz Java API for XML-based RPC (JAX-RPC) mają czasy świetności za sobą (cieszyły się dużą popularnością w czasie wprowadzania do platformy Javy) . Od tamtej pory zo­ stały albo zastąpione przez lepsze komponenty, jak Java API for XML Web Services (JAX-WS), albo w ogóle nie są używane. Zespół Java SE Expert zdefiniował dwuetapowy proces usuwania niepotrzebnych rozwiązań z platformy. W ramach tego procesu (określanego mianem przycinania - ang . pruning) wybrany element jest w jednym wydaniu oznaczany jako opcjonalny (a kon­ kretnie proponowany jako opcjonalny - ang. proposed optional), a następnie, w kolejnym wydaniu, jest ostatecznie usuwany, pozo­ stawiany jako niezbędny komponent lub zachowuje status kom­ ponentu opcjonalnego. Zespół Java EE Expert Group zastosował już opisaną procedurę do wskazania kilku mechanizmów jako kandydatów do przycięcia. Proces eliminowania zbędnych kom­ ponentów przypomina trochę przycinanie krzewów róży, aby umożliwić swobodny wzrost świeżych kwiatów. Przycinanie nie­ używanych mechanizmów daje nam pewność, że nawet wprowa­ dzanie do platformy nowych elementów nie będzie miało nega­ tywnego wpływu na prostotę i lekkość tej technologii . W platformie Java EE wprowadzono też pojęcie profilów. Profil reprezentuje konfigurację platformy przystosowaną do określonej klasy aplikacji. Profil może obejmować podzbiór lub nadzbiór Rozdział 1. Java Platform, Enterprise Edition

13

technologii składających się na tę platformę. Na przykład profil Java EE 6 Web Profile definiuje odrębną specyfikację w ramach platformy Java EE obejmującą podzbiór technologii używanych przez programistów współczesnych aplikacji internetowych. Profile naruszają zasadę jednego rozwiązania pasującego do wszystkich zastosowań (ang. one size fits all), która obowiązywala w starszych wydaniach. Mimo że wspomniany profil jest podzbiorem elemen­ tów oryginalnej platformy, stanowi kompletny zbiór standardo­ wych interfejsów API i jako taki jest gotowym pakietem umoż­ liwiającym budowę najróżniejszych aplikacji internetowych. Profil aplikacji internetowych umożliwia programistom szybką budowę potrzebnych rozwiązań bez konieczności samodzielnego konstru­ owania niezbędnych stosów technologii . Istnieje też możliwość definiowania dodatkowych profili zgodnie z zaleceniami i regu­ łami Java Community Process (JCP) . Właśnie procedurze przycinania i koncepcji profili platforma Java EE 6 zawdzięcza swoją lekkość i łatwość konserwacji. Rozszerzalność

Platforma oferuje bogaty zbiór funkcji przydatnych podczas two­ rzenia aplikacji korporacyjnych. Okazuje się jednak, że spora część programistów stosuje zewnętrzne frarneworki, które uzupełniają lub dopełniają oryginalną ofertę platformy. Wspomniane frarneworki wymagają rejestrowania dodatkowego komponentu Serv l et Li sten er, Serv l et F i l ter lub dowolnego innego, który umożliwi prawidłowe rozpoznawanie odpowiednich mechanizmów w czasie wykony­ wania. Specyfikacja serwletów definiuje mechanizm części (frag­ mentów) konfiguracji aplikacji internetowych (ang. web fragment), umożliwiający definiowanie wspomnianych punktów wejścia fra­ meworków w ramach biblioteki . Ponieważ framework jest reje­ strowany przez kontenery serwletów, programista nie musi sarn wszystkiego konfigurować. Dzięki temu dodatkowe frameworki są traktowane jako obywatele pierwszej kategorii na platformie Java EE . Co więcej, specyfikacja kontekstów i wstrzykiwania zależności (ang. Contexts and Dependenci} Injection - CDJ) definiuje przenośny mechanizm rozszerzeń, który umożliwia rozszerzanie możliwości tej platformy na wiele różnych sposobów, na przykład poprzez udostępnianie predefiniowanych zasięgów. Nowy zasięg można łatwo zdefiniować i dołączyć na dowolnym serwerze aplikacji zgodnym ze specyfikacją Java EE 6 - wystarczy użyć mecha­ nizmu przenośnych rozszerzeń . 14

Java EE 6. Leksykon kieszonkowy

O potencjale platformy Java EE 6 decydują też takie specyfikacje jak CDI, JavaServer Faces 2, Java API for RESTful Services, Java Persistence API 2 czy Servlets 3. W tej książce omówię najważniejsze technologie tej platformy. Zaprezentuję też czytelne, łatwe do opanowania przykłady kodu, które dobrze ilustrują udoskonalenia wprowadzone w wydaniu Java EE 6.

Elementy składowe Platformę Java EE 6 opracowano jako Java Specification Request 316 (JSR 316 patrz http://jcp.org/en/jsr/detail?id=316) zgodnie z regułami procesu Java Community Process (JCP) 2.7 . Proces JCP definiuje trzy najważniejsze elementy składowe każdej specyfikacji JSR: -

Specyfikacja

Formalny dokument opisujący zaproponowany komponent i jego możliwości . Implementacja referencyjna (RI)

Binarna implementacja zaproponowanej specyfikacji. Implementacja RI (od ang. Rejerence Implementation) dowodzi, że zaproponowana specyfikacja może zostać zaimplementowana w formie binarnej, i jednocześnie stanowi cenne źródło wskazówek dla autorów specyfikacji. Pakiet zgodności technologicznej (TCK)

Pakiet TCK (od ang. Technology Compliance Kit) jest w istocie zbio­ rem testów sprawdzających zgodność implementacji RI ze spe­ cyfikacją. Dzięki temu pakietowi niezależni producenci mogą tworzyć własne implementacje i weryfikować ich poprawność. Platforma Java EE 6 składa się ze specyfikacji definiującej wymagania, które obowiązują wszystkie komponenty. Platforma obejmuje też specy­ fikacje następujących komponentów: Technologie internetowe •

JSR 45 obsługa mechanizmów diagnostycznych dla pozo­ stałych języków programowania



JSR 52 biblioteka standardowych znaczników (JSTL) dla JavaServer Pages 1 .2



JSR 245 (EL) 1 .2

-

-

-

JavaServer Pages (JSP) 2.2 i Expression Language

Rozdział 1. Java Platform, Enterprise Edition

15



JSR 314 - JavaServer Faces (JSF) 2.0



JSR 315 - Servlet 3 .0

Technologie korporacyjne •

JSR 250- standardowe adnotacje dla platformy Javy (wersja 1.1)



JSR 299 - Contexts and Dependency Injection (CDI) dla platformy Java EE (wersja 1 .0)



JSR 303- sprawdzanie poprawności komponentów (wersja 1.0)



JSR 316- komponenty zarządzane (wersja 1 .0)



JSR 317- Java Persistence API (JPA) 2.0



JSR 318 - Enterprise JavaBeans (EJB) 3 .1



JSR 318 - obiekty przechwytujące (wersja 1 .1)



JSR 322 - Java EE Connector Architecture 1.6



JSR 330 - wstrzykiwanie zależności w Javie (wersja 1.0)



JSR 907 - Java Transaction API (JTA) 1.1



JSR 914 - Java Message Server (JMS) 1.1



JSR 919 - JavaMail 1.4

Technologie usług sieciowych

16

I



JSR 67 - Java APls for XML Messaging (JAXM) 1 .3



JSR 93 - Java API for XML Registries (JAXR) 1.0



JSR 101 - Java API for XML-based RPC (JAXRPC) 1.1



JSR 109 - implementacje korporacyjnych usług sieciowych (wersja 1.3)



JSR 173 - Streaming API for XML (StAX) 1.0



JSR 181 - metadane usług sieciowych dla platformy Javy (wersja 2.0)



JSR 222- Java Architecture for XML Binding (JAXB) 2.2



JSR 224 - Java API for XML Web Services (JAXWS) 2.2



JSR 311 - Java API for RESTful Web Services (JAXRS) 1.1

Java EE 6. Leksykon kieszonkowy

Technologie zarządzania i zabezpieczeń • JSR 77 — interfejs API do zarządzania J2EE (wersja 1.1) • JSR 88 — interfejs API do wdrażania aplikacji platformy Java EE (wersja 1.2) • JSR 115 — Java Authorization Contract and Containers (JACC) 1.3 • JSR 196 — Java Authentication Service Provider Interface for Containers (JASPIC) 1.0 Poszczególne komponenty współpracują ze sobą, tworząc zintegrowany stos technologii (patrz rysunek 1.1).

Rysunek 1.1. Architektura platformy Java EE 6

Wyjaśnienie rysunku 1.1: • Technologie JPA, JTA i JMS oferują tak podstawowe usługi jak dostęp do bazy danych, obsługa transakcji czy przesyłanie komunikatów. • Komponenty zarządzane i EJB tworzą uproszczony model programowania prostych usług przy użyciu obiektów POJO. • CDI, obiekty przechwytujące i standardowe adnotacje to rozwiązania, które można z powodzeniem stosować w wielu różnych komponentach — tak jest na przykład w przypadku wstrzykiwania zależności z zachowaniem bezpieczeństwa za pomocą obiektów przechwytujących i wspólnego zbioru adnotacji.

Rozdział 1. Java Platform, Enterprise Edition

|

17



Rozszerzenia CDI umożliwiają rozbudowę istniejących mechani­ zmów platformy przy użyciu standardowych rozwiązań.



Usługi sieciowe tworzone za pomocą technologii JAX-RS i JAX-WS, JSF, JSP oraz języka wyrażeń EL wyznaczają pewien model pro­ gramowania aplikacji internetowych. Technologia dzielenia konfi­ guracji (Web Fragrnents) umożliwia automatyczną rejestrację ze­ wnętrznych frameworków aplikacji internetowych w naturalny sposób .



Mechanizm sprawdzania poprawności komponentów (Bean Vali­ dation) oferuje standardowe rozwiązania w zakresie deklarowania i weryfikacji ograniczeń dla komponentów budowanych na bazie różnych technologii .

JAX-RPC OSR 101), JAXR OSR 93), komponenty encyjne EJB (fragment specyfikacji JSR 153) oraz wdrażanie aplikacji Java EE OSR 88) oznaczono jako technologie obcinane w tej wersji platformy Java EE. Implementację referencyjną (RI) platformy Java EE 6 zbudowano przy użyciu serwera GlassFish Community. GlassFish Server Open Source Edition to pełnoprawny, darmowy, w pełni zgodny ze specyfikacją Java EE 6 serwer aplikacji open source. Produkt jest dostępny także w formie dystrybucji Web Profile, którą można pobrać ze strony internetowej http://glassfish.org. Wspomniany serwer aplikacji jest łatwy w użyciu (ma postać instalatora w pliku zip i oferuje integrację ze środowiskami NetBeans, Eclipse oraz IntelliJ), jest lekki (najmniejsze wersje dostęp­ ne do pobrania zajmują zaledwie 30 MB na dysku) oraz ma modułową konstrukcję (serwer zbudowano na bazie frameworku OSGi; kontenery są uruchamiane według bieżących potrzeb) . Serwer GlassFish oferuje też mechanizmy podziału na klastry i scentralizowaną administrację na bazie interfejsu CLI, konsoli administracyjnej WWW i interfejsów REST API umożliwiających zarządzanie i monitorowanie aplikacji. Oracle GlassFish Server, czyli dystrybucję serwera GlassFish, dla której firma Oracle oferuje komercyjne usługi wsparcia, można pobrać ze strony http://oracle.com/goto/glassfish. W czasie gdy pisałem tę książkę, było dostępnych 17 serwerów aplikacji zgodnych ze specyfikacją Java EE 6. Kompletną listę serwerów można znaleźć na stronie http://w.ww oracle.com/

technetwork/java/javaee/overview/compatibility-jsp-136984 .html. Pakiety TCK dostępne dla wszystkich licencji platformy Java EE umożli­ wiają łatwe testowanie odpowiednich implementacji.

18

Java EE 6. Leksykon kieszonkowy

Co nowego w wersji Java EE 6 Potencjał i bogactwo platformy Java EE 6 zostały poszerzone poprzez wprowadzenie kilku zupełnie nowych specyfikacji . Także wiele istnieją­ cych specyfikacji komponentów zostało udoskonalonych przede wszyst­ kim w celu ich uproszczenia i ułatwienia pracy programistów . Poniżej wymieniono najważniejsze spośród nowych i zmodyfikowanych elementów specyfikacji. Komponenty zarządzane •

Komponenty zarządzane na bazie obiektów POJO.



Zbiór standardowych usług, w tym wstrzykiwanie zasobów na czas całego cyklu życia, wywołania zwrotne oraz obiekty prze­ chwytujące.

Enterprise JavaBeans •

Komponent EJB można teraz utworzyć za pomocą pojedynczego pliku kodu źródłowego - wystarczy użyć adnotacji @State l ess, @Stateful lub @S i ng l eto n .



Komponenty EJB można umieszczać w pliku .war z myślą o do­ stępie lokalnym (za pomocą adnotacji @Loca l ) lub w pliku ejb-jar z myślą o dostępie lokalnym i zdalnym.



Dostęp do komponentów EJB można uzyskiwać za pomocą przenośnych, globalnych nazw JNDI .



Metodę komponentu sesyjnego można oznaczyć jako wywoły­ waną asynchronicznie. Metody tego typu umożliwiają klientowi uzyskiwanie wartości wynikowych jakiś czas po wywołaniu lub stosowanie wzorca „odpal i zapomnij" (ang. fire-and-forget).



Zdarzenia czasowe można planować, stosując składnię podobną do tej znanej z narzędzia cron - wystarczy oznaczyć wybrane metody komponentu adnotacją @Sched u l e .



Interfejs API Embeddable EJB umożliwia uruchamianie kodu klienckiego i odpowiednich komponentów EJB w ramach tej samej wirtualnej maszyny Javy OVM) i tego samego mechanizmu ładowania klas.

Rozdział 1 . Java Platform, Enterprise Edition

19

SerwI ety •

Serwlety sterowane adnotacjami (@WebServl et), filtry sterowane adnotacjami (@WebFi 1 ter) oraz obiekty nasłuchujące sterowane adnotacjami (@Webli stener) . W większości przypadków deskryp­ tor web.xml ma teraz charakter opcjonalny.



Serwlety, filtry i obiekty nasłuchujące można programowo reje­ strować za pomocą obiektu Serv l etContext .



Serwlety asynchroniczne umożliwiają zwracanie sterowania (lub wątku) do kontenera, tak aby było możliwe wykonywanie innych zadań w czasie oczekiwania na zakończenie czasochłon­ nego procesu.



Biblioteki frameworków można integrować, stosując techniki modułowe (za pomocą pliku web-fragment.xml).



Zabezpieczenia serwletów można konfigurować za pomocą adnotacji @Serv 1 etSecu ri ty, @Ht t pCons tra i nt i @Ht tpMet hodCons tra i nt oraz przy użyciu tradycyjnego elementu .

Java API for RESTful Web Services (JAXRS) •

Możliwość publikacji usług sieciowych REST przy użyciu zwy­ kłych obiektów POJO sterowanych adnotacjami .



Obsługa standardowego zbioru metod protokołu HITP, jak GET, POST, PUT czy D E L E T E .



Każdy zasób może być reprezentowany w wielu formatach; istnieje też możliwość stosowania typów niestandardowych .



Obsługa negocjacji rodzaju treści ze stroną kliencką za po­ mocą nagłówka Accept : protokołu HTTP .

Usługi sieciowe na bazie protokołu SOAP

20



Możliwość publikacji usług sieciowych na bazie protokołu SOAP implementowanych w formie obiektów POJO oznaczonych ad­ notacjami . Lepsza kontrola nad przesyłanymi komunikatami dzięki obiektom Sou rce, DataSource i SOAPMessage.



Interfejs API umożliwiający klientom wywoływanie usług sieciowych na bazie protokołu SOAP .



Precyzyjnie zdefiniowane punkty rozszerzeń na potrzeby przetwarzania wstępnego i końcowego komunikatów żądań i odpowiedzi zarówno po stronie klienta, jak i serwera.



Standardowe odwzorowania Java-WSDL oraz WSDL-Java . Java EE 6. Leksykon kieszonkowy

JavaServer Faces (JSF) •

Facelety stanowią teraz zalecany język szablonów stron. Takie rozwiązanie umożliwia łatwe definiowanie komponentów kom­ pozytowych, co z kolei ułatwia wprowadzanie prawdziwej abstrakcji.



Obsługa technologii Ajax za pośrednictwem interfejsów API JavaScriptu i możliwość deklaratywnego stosowania tej technologii za pomocą elementu f : aj ax .



D l a większości elementów stosowanych wcześniej w pliku faces-config.xml istnieją teraz odpowiednie adnotacje. Domyślne reguły nawigacji są teraz definiowane zgodnie z zasadą kon­ wencji ponad konfiguracją.



Obsługa żądań GET protokołu HTTP i powtarzalne adresy URL (ang. bookmarkable URL).



Integracja z mechanizmem sprawdzania poprawności kom­ ponentów .

Java Persistence API •

Udoskonalone odwzorowania obiektowo-relacyjne znacznie podnoszą intuicyjność kodu odwzorowań w Javie. Rozsze­ rzony, bogatszy język JPQL umożliwia obsługę bardziej za­ awansowanych odwzorowań i wprowadza pewne nowe elementy.



Interfejs Metamodel reprezentuje metamodel stanu utrwalania i relacje klas zarządzanych jednostki utrwalania. Ten abstrak­ cyjny schemat utrwalania jest następnie używany do genero­ wania zapytań (gwarantujących bezpieczeństwo typów) przy użyciu interfejsu Criteria API .



Dodano nowe tryby blokowania, w tym obsługę pesymistycz­ nego modelu blokowania (obok istniejącego wcześniej optymi­ stycznego modelu blokowania) .



Standardowe opcje konfiguracyjne określane za pośrednictwem właściwości j avax . pers i stence.

Obiekty przechwytujące •

Możliwość ingerowania w wywołania i zdarzenia cyklu życia dotyczące powiązanej klasy docelowej .

Rozdział 1. Java Platform, Enterprise Edition

21



Obiekty przechwytujące można stosować za pomocą takich ad­ notacji jak @ I nterceptors lub przy użyciu deskryptora wdrożenia (na przykład beans.xml) gwarantującego bezpieczeństwo typów .

Konteksty i wstrzykiwanie zależności •

Wstrzykiwanie zależności według standardów i z zachowaniem bezpieczeństwa typów .



Zapewnia ścisłą kontrolę typów, ponieważ wszystkie zależności podlegają systemowi typów Javy. Nowe mechanizmy nie wy­ magają przy tym ścisłych związków ze zdarzeniami, obiektami przechwytującymi ani dekoratorami .



Zapewnia integrację z językiem wyrażeń (Expression Language) .



Definiuje mechanizm rozszerzalnego zasięgu i zarządzania kontekstem.



Stanowi most łączący warstwę transakcyjną (EJB) z warstwą prezentacji (JSF) w ramach platformy Java EE .

Sprawdzanie poprawności komponentów

22

I



Możliwość deklarowania i weryfikacji ograniczeń na poziomie klas dla zwykłych obiektów POJO.



Wbudowany zbiór definicji ograniczeń reprezentowanych przez adnotacje @NotN u l l , @Mi n, @Max i @Si z e .



Oprócz adnotacji programista m a do dyspozycji ograniczenia niestandardowe deklarowane w pliku META-INF/validation.xml.

Java EE 6. Leksykon kieszonkowy

Więcej

na; W\>\'W

..

ebook4all . pl

Rozdział 2. Komponenty zarządzane Komponenty zarządzane (Managed Beans) zdefiniowano w ramach do­ kumentu JSR 316. Kompletną specyfikację można pobrać ze strony inter­ netowej http://jcp.org/aboutfava/communityprocesslfinal/jsr 316/index.html. Komponent zarządzany jest w istocie obiektem POJO, tyle że traktowa­ nym przez kontener platformy Java EE jako byt zarządzany. Kompo­ nenty zarządzane stanowią naturalną podstawę dla różnych rodzajów komponentów na platformie Java EE . Wspomniana specyfikacja dodat­ kowo definiuje niewielki zbiór podstawowych usług Qak wstrzykiwanie zasobów, wywołania zwrotne związane z cyklem życia czy obiekty przechwytujące) dostępnych dla komponentów tego typu. Specyfikacje innych komponentów mogą uzupełniać komponenty za­ rządzane o dodatkowe cechy. Oryginalna specyfikacja komponentów zarządzanych definiuje nawet precyzyjnie opisane punkty rozszerzeń, które umożliwiają modyfikację niektórych aspektów . Na przykład technologia kontekstów i wstrzykiwania zależności (ang. Contexts and Dependency Injection - CDI) eliminuje konieczność definiowania bezar­ gumentowego konstruktora obiektu POJO i dopuszcza możliwość stosowania konstruktorów z bardziej złożonymi sygnaturami . Tech­ nologia CDI wprowadza też obsługę zasięgów i zdarzeń cyklu życia. Podobnie komponenty Enterprise JavaBeans (EJB) mają postać kom­ ponentów zarządzanych, które dodatkowo oferują obsługę transakcji i innych usług. Dzięki temu programista może zacząć od prostszych, lżejszych komponentów, aby w przyszłości (w razie takiej potrzeby) zastosować bardziej rozbudowane komponenty EJB lub CDI . Komponenty zarządzane zwykle nie są używane przez zwykłe apli­ kacje platformy Java EE . Okazuje się jednak, że rozwiązania opisane w tej specyfikacji wprost idealnie pasują do koncepcji platformy Java EE i jako takie mogą stanowić podstawę dla pozostałych specyfikacji komponentów .

Definiowanie i stosowanie komponentów zarządzanych Komponent zarządzany jest obiektem POJO udostępniającym bezargu­ mentowy konstruktor i zawierającym adnotację j avax . annotat i o n . Managed addNumbers ( i n t n l , i n t n 2 ) { I n teger res u l t ; res u l t n l + n2 ; li symulac;a czasoch/onnego zapytania =

return n ew AsyncResu l t {res u l t ) ;

Sygnatura metody wskazuje, że zwracana wartość jest instancją typu Future, zaś w ciele metody jest zwracany obiekt typu AsyncResu l t future = asyncBean . addN umbers ( l O , 20) ;

Metody interfejsu API Future umożliwiają sprawdzanie dostępności wy­ ników (metoda i sDone) oraz anulowanie wykonywania asynchronicznego wywołania (metoda cancel (bool ean may i n terrupt i fRu n n i ng) ) . Kontekst transakcji klienta nie jest propagowany d o asynchronicznej metody biznesowej . Oznacza to, że w przypadku metod asynchronicz­ nych atrybut transakcji REQU I RED ma dokładnie takie samo znaczenie jak atrybut REQU I RES_N EW. Tzw. podmiot zabezpieczeń (ang. security principal) klienta jest propa­ gowany do asynchronicznej metody biznesowej . Oznacza to, że kontekst zabezpieczeń jest propagowany dokładnie tak samo w przypadku metod synchronicznych i asynchronicznych .

Liczniki czasu EJB Timer Service to usługa zarządzana przez kontener, która umożli­ wia planowanie przyszłych wywołań zwrotnych (wykonywanych w odpowiedzi na zdarzenia czasowe) . Odpowiednie zdarzenia są pla­ nowane w kalendarzu (na określoną datę i godzinę), po upływie okre­ ślonego czasu lub w wybranych odstępach czasu. Istnieje wiele możliwych sposobów planowania zdarzeń czasowych: •

automatyczne liczniki czasu na bazie metadanych zdefiniowanych w adnotacji @Sched u l e;



zdarzenia zdefiniowane programowo za pomocą usługi Timer Service;



metody oznaczone adnotacją @Ti meout;



deskryptory wdrożenia.

Najbardziej popularnym sposobem wywoływania metod komponentu według zdarzeń czasowych jest oznaczanie tych metod adnotacją @Sched u l e: @State l es s publ i c c l a s s MyT i mer { @Sched ul e (hour= " * " , mi nute= " * " , second = " * / I O " ) , publ i c voi d pri n tT i me ( ) { //...

Rozdział 5. Enterprise JavaBeans

75

W powyższym kodzie metoda pri ntTi me jest wywoływana co 10 sekund w każdej minucie i w każdej godzinie. W adnotacji @Sched u l e można dodatkowo określić pola year i mon t h, które domyślnie mają wartość * (oznacza to, że metoda jest domyślnie wywoływana we wszystkich miesiącach i latach) . Kontener EJB odczytuje adnotacje @Schedul e i na ich podstawie automa­ tycznie tworzy potrzebne liczniki czasowe. W tabeli 5 .3 pokazano kilka przykładów adnotacji @Schedu 1 e wraz z opi­ sem ich znaczenia. Tabela 5.3 . Znaczenie wyrażeń w ramach adnotacji @Schedule @Sched ule

Znaczenie

hour= 11 1 , 2 , 2011

Godziny 1, 2 i 20 we wszystkie d n i roku

dayOfWee k= " Mon- Fri "

Poniedz iałe k, wtorek, środa, czwa rte k i piątek o pólnocy (z uwzględnieniem domyślnych wartości dla godzin, m i n ut i se kund)

mi n ute= 11 30 11 , hour= 11 411 , t i mezone= " Ameri c a/ Los_Angel e s " dayOfMon t h = " - 1 , Last"

Codziennie, godzina 4:30 rano czasu pacyficznego Północ dnia poprzedzającego ostatni dzień miesiąca oraz północ samego ostatn iego d n ia m iesiąca

Adnotacja @Schedul es umożliwia określanie wielu liczników czasowych. Warto pamiętać, że adnotacja @Startup nie jest wymagana, ponieważ nie we wszystkich przypadkach stosowanie metod zwrotnych cyklu życia jest konieczne. Każde ponowne wdrożenie aplikacji spowoduje auto­ matyczne usunięcie i odtworzenie wszystkich zastosowanych liczników czasowych. Okresowe liczniki czasu można łatwo tworzyć za pomocą metod Schedul eExpres s i on . s t art ( ) i end ( ) . Jednorazowy licznik czasu można łatwo utworzyć, definiując stałe wartości w każdym polu: @Schedu l e ( year= " A " , mon t h = " B " , dayOfMon t h = " C " , hour= " O " , mi nute= " E " , second = " F " )

Liczniki czasowe nie są mechanizmem stworzonym z myślą o przetwa­ rzaniu w czasie rzeczywistym, ponieważ kontener przeplata wywoła­ nia metod zwrotnych w związku z upływającymi limitami czasowymi, 76

Java EE 6. Leksykon kieszonkowy

wywołania właściwych metod biznesowych oraz metody zwrotne cy­ klu życia komponentu. Oznacza to, że metody, których wywołanie za­ planowano na określoną godzinę, mogą zostać wywołane z pewnym opóźnieniem. Usługa Timer Service oferuje możliwość programowego tworzenia i anu­ lowania liczników czasu. Programowe liczniki czasu można tworzyć za pomocą metody createXXX klasy Ti merServ i ce. W roli metody, której wy­ wołanie zostanie zaplanowane na określony moment, można użyć me­ tody ej bTi meo ut interfejsu T i medObj ect: pac kage org . s amp l e ; @S i n g l eton @Startup publ i c c l a s s MyT i mer i mp l ements T i medObj ect @Resource T i merServ i ce t i merServ i c e ; @PostConstruct publ i c voi d i n i tTi mer ( ) { i f ( t i merServ i ce . getTi mers () ! = n u l l ) { for (Ti mer t i mer : t i merServ i ce . getTi mers ( ) ) t i me r . cancel ( ) ; t i merServi ce . createCa l endarTi mer ( new Schedul eExpre s s i on ( ) . hour { " * " ) . mi nute { " * " ) . second { " */ 1 0 " ) , new T i merCon fi g ( " myT i mer " , true) ); @Overri de pub 1 i c v01d ejbT!meout(Timer timer) { li . . . }

i n i tTimer jest metodą zwrotną cyklu życia, która zeruje wszystkie utwo­ rzone wcześniej liczniki czasu, po czym tworzy nowy licznik wywoły­ wany co 10 sekund . Metoda ej bT i meout (czyli implementacja metody interfejsu T i medObj ect) jest wywoływana po każdym wyczerpaniu limitu czasowego. Parametr t i mer metody ej bTi meout można wykorzystać do anulowania licznika czasu, uzyskania informacji o następnym zdarzeniu upłynięcia czasu licznika, uzyskania informacji o samym liczniku czasu lub pobrania innych, pokrewnych danych.

Rozdział 5. Enterprise JavaBeans

77

Łatwo zauważyć, że liczniki czasu są tworzone w metodach zwrotnych cyklu życia komponentu, zatem możemy być pewni, że te liczniki będą gotowe przed wywołaniem jakiejkolwiek metody biznesowej kom­ ponentu . Trzecim sposobem tworzenia liczników czasu dla metody jest stoso­ wanie następujących sygnatur: voi d { ) { li... } voi d (Ti mer t i mer) li „.

Metodę należy oznaczyć adnotacją @T i meout: publ i c c l a s s MyT i mer li. . .

@Ti meout publ i c voi d t i meou t (Ti mer t i mer) { li„.

Czwartym sposobem tworzenia liczników czasu jest oznaczenie odpo­ wiedniej metody jako wywoływanej w wyniku wyczerpania limitu cza­ sowego w pliku ejb-jar.xml. Przyjmijmy, że definicja metody ma nastę­ pującą postać: publ i c c l a s s MyT i mer { publ i e voi d t i meou t (Ti mer t i mer) li„.

Limit czasowy metody można przekonwertować na metodę licznika czasu - wystarczy dodać do pliku ejb-jar.xml następujący fragment:

MyTi mer org . sampl e . My Ti mer State l ess < t i mer>

* / 1 0 * * * *

78

Java EE 6. Leksykon kieszonkowy

t i meout

j avax . ej b . T i mer





Liczniki czasu można tworzyć w bezstanowych komponentach sesyj­ nych, singletonowych komponentach sesyjnych oraz komponentach sterowanych komunikatami, ale nie w stanowych komponentach sesyj­ nych. Brakujące rozwiązanie być może zostanie dodane w przyszłych wersjach specyfikacji EJB . Liczniki czasu są domyślnie utrwalane; ich utrwalanie można wyłączyć albo programowo (za pomocą wywołania T i merConfi g . set Pers i stent '+ ( fal se) ), albo na poziomie adnotacji @Schedu l e (wystarczy dodać atry­ but pers i stent=fal s e) . Zdarzenia czasowe można planować tylko w bezstanowych kompo­ nentach sesyjnych i singletonowych komponentach sesyjnych .

Interfejs Embeddable API Interfejs API Embeddable EJB umożliwia uruchamianie kodu klienckiego i odpowiednich komponentów EJB w ramach tej samej wirtualnej ma­ szyny Javy (JVM) i tego samego mechanizmu ładowania klas . Klient używa startowego interfejsu API dostępnego w pakiecie j avax . ej b do uruchomienia kontenera i identyfikacji dostępnych komponentów EJB. Takie rozwiązanie ułatwia testy, próbne przetwarzanie żądań i urucha­ mianie komponentów EJB w środowisku Java SE . Poniższy przykład kodu dobrze pokazuje, jak napisać test uruchamiający kontener EJB z możliwością wbudowania, jak odnaleźć załadowany komponent EJB przy użyciu przenośnej, globalnej nazwy JNDI i jak wywołać metodę tego komponentu: publ i e voi d testEJ B ( ) t h rows Nami n g Except i on { EJBContai ner ej bC EJBContai n e r . createEJ BContai ner ( ) ; Context ctx ej bC . getCon text ( ) ; MyBean bean (MyBean) ctx . l oo kup ( " j ava : g l obal / c l asse s/org/ s amp l e/MyBean " ) ; assertNotNul l (bean ) ; //... =

=

=

Rozdział 5. Enterprise JavaBeans

79

ej bC . c l os e ( ) ;

Kontener EJB z możliwością wbudowania przeszukuje ścieżkę do klas maszyny JVM pod kątem modułów EJB, które będzie można załadować. Klient może zmienić to zachowanie, wskazując na etapie konfiguracji alternatywny zbiór modułów docelowych: Propert i es props new Propert i es ( ) ; props . setProperty ( EJBContai n e r . EMB EDDAB L E MODU LES PRO P E RTY , " bar " ) ; EJBContai ner ej bC EJBContai ner . createEJBContai ner (props) ; =

=

Powyższy kod załaduje w kontenerze z możliwością wbudowania tylko moduł EJB nazwany bar. Właściwości, których można używać do konfigurowania kontenera EJB, opisano w tabeli 5 .4 . Tabela 5.4. Właściwości inicjalizacji kontenera EJB z możliwością wbudowania Nazwa

Typ

Zadanie

j avax . ej b . embeddab 1 e .

< h l > Facel ety są super !



Jeśli w powyższym kodzie z wyrażeniem # { user . name ) zostanie powiązana wartość " Jacek", przytoczony fragment zostanie przetłumaczony na na­ stępujący znacznik HTML-a: Za 1 oguj

Podobnie, istnieje możliwość określenia wyniku za pomocą elementu h : button:

Kod w tej formie wygeneruje następujący znacznik języka HTML: