10 listopada 2006

Pierwsze kroki z Java EE z Glassfish i NetBeans IDE

1 komentarzy
Czyż to nie najwyższa pora zająć się Java EE 5 na poważnie? W zasadzie gdzieś tam trochę człowiek dotyka pewnych elementów tego wydania, ale brak w tym jakiegoś porządku. Postanowiłem ponownie przyjrzeć się technologii Java EE z perspektywy projektu Glassfish, który jest wolnodostępną, referencyjną implementacją specyfikacji.

Zabawę rozpoczynam od pobrania wersji instalacyjnej Glassfish V2 B19. Instalacja jest niezwykle prosta i polega na pobraniu odpowiedniej wersji i uruchomieniu instalera, który jest wykonywalnym plikiem jar (ang. executable jar). Dokładnie jak opisano na https://glassfish.dev.java.net/downloads/v2-b19.html, czyli

 java -Xmx256m -jar glassfish-installer-v2-b19.jar

Cała instalacja zabiera nie więcej niż 2-3 minuty (rozpakowanie paczki i uruchomienie anta). Wykonanie polecenia asadmin start-domain "podnosi" serwer i możemy zaczynać (dla pełnego obrazu dodam, że zatrzymanie serwera to wykonanie polecenia asadmin stop-domain). Komunikat na konsoli informuje o konsoli administracyjnej pod adresem http://localhost:4848 (dobrze, że Firefox zapamiętał hasło, bo nie dałbym rady dostać się do niej). W menu Application nie ma jeszcze żadnej aplikacji, więc koniecznie należałoby rozejrzeć się na stronie projektu w poszukiwaniu przykładowych aplikacji. Ale to już w kolejnych dniach...

Kolejny krok to właśnie uruchomienie przykładowych aplikacji, których spodziewam się, że w projekcie będzie kilka. Pisanie nowych będzie odbywać się w NetBeans IDE 5.5, który mówi się, że jest wielce pomocny przy tworzeniu rozwiązań z Java EE 5 (na codzień używam Eclipse/RAD i minęło już trochę czasu od momentu, kiedy kilkakrotnie w tygodniu otwierałem projekt w NetBeans, więc początek może być bolesny ;-)).

Jeśli udało Ci się stworzyć aplikację korzystając z Java EE napisz, co najbardziej podobało Ci się w nowej specyfikacji, a co najmniej i co sprawiło trudności. Chętnie wysłucham rad bardziej doświadczonych użytkowników Java EE.

Za miesiąc spotkanie Warszawa-JUG i chciałbym móc zaprezentować temat Java EE mając więcej doświadczeń. Wiem, że jest wielu, którzy korzystają z JBoss AS 4.0.5 (z EJB 3.0), czy JBoss Seam i to byłyby z pewnością chwytliwe tematy, ale sądzę, że możliwość porównania dwóch różnych środowisk - Glassfish vs JBoss - może być jeszcze ciekawsze. Powinienem tym samym z łatwością sprowokować ciekawą dyskusję na ten temat.

07 listopada 2006

1. inauguracyjne spotkanie Warszawa-JUG za nami

5 komentarzy
Dzisiaj miał być ten dzień, kiedy inicjatywa Warszawa-JUG miała być zweryfikowana - 1. spotkanie. Temat spotkania mógł okazać się równie chwytliwy jak nietrafiony, szczególnie, kiedy coraz częściej słyszy się o (podobno) ciekawszych rozwiązaniach, jak np. Ruby. Kto by chciał słuchać o kolejnym serwerze aplikacyjnym Java EE. Ale, szczęśliwie, spotkała mnie miła niespodzianka - na spotkaniu pojawiło się ponad 20 osób (!) Dla niektórych nie jest to zawrotna liczba, ale kiedy tworzy się grupę, ogłasza w forach programistów i w zasadzie nie ma żadnej informacji o tym, ilu ostatecznie będzie, przyjście 5-10 osób jest już wyczynem. A tu proszę było ponad 20.

Temat prezentacji to Apache Geronimo w ogólności oraz jego integracja z Eclipse. Mimo, że chciałem zaprezentować Apache Geronimo w akcji to przez pierwszą godzinę gadałem jak nakręcony. Sam nie mogłem uwierzyć, że czas zleciał tak szybko. Postanowiłem przyspieszyć i zaprezentować wtyczkę Eclipse do pracy z Geronimo, uruchomiłem więc bardzo prostą aplikację internetową, zaprezentowałem konsolę Geronimo i kolejne 20 minut poszło w zapomnienie.

W międzyczasie wspomniałem o funkcjonalności Eclipse o nazwie Extension Locations, które pozwala na rozbudowę Eclipse o wtyczki bez modyfikacji katalogu głównego (w ten sposób uaktualnienie wtyczek, czy samego Eclipse jest trywialnie proste). Okazało się, że temat zyskał tyleż fanów, co sam temat główny i kolejne 20 minut przebiegło na jej omówieniu.

Kolejne, tym razem ostatnie, 20 minut poświęciliśmy na sesję pytań i odpowiedzi. Zakończyliśmy o godzinie 20:00.

Na moje pytanie kto nie zdecyduje się na przyjście kolejnym razem nikt się nie odezwał, co pozwala przypuszczać, że inicjatywa się podoba i będzie tym samym kontynuowana. Kolejne spotkanie za miesiąc!

Acha, zapomniałbym - spotkanie było nagrywane, więc oczekujcie publikacji nagrania niebawem. Będzie się z czego pośmiać, bo kilkakrotnie sala wybuchła śmiechem po moich próbach konstruowania inteligentnych odpowiedzi. A są one nierzadko okraszone zupełnie nietrafionymi w miejsce i porę moimi przemyśleniami. Warto chociażby z tego powodu zapoznać się z materiałem ;-)

IBM Rational Software Architect V7.0 Open Beta dostępna

0 komentarzy
Nie miałem wiele czasu ostatnio na rozpoznawanie narzędzi UML, o których pisałem poprzednio. Trochę zarzuciłem temat ze względu na inne obowiązki, ale również zbierając siły na odsłonę narzędzia, z którym od czasu do czasu przychodziło mi pracować - IBM Rational Software Architect (RSA) V7.0. Właściwie to nie z nim samym pracowałem, ale z jego krewnym - IBM Rational Application Developer (RAD) V6 i miałem kilka (może nawet wiele) zastrzeżeń do jego funkcjonalności. Tym samym krążyłem koło RSA bez większego przekonania. To sprawiało, że poszukując narzędzi UML wciąż z wielką nadzieją przysłuchiwałem się informacjom o kolejnej wersji produktów RSA oraz RAD i właśnie, kiedy nastąpił ten dzień, kiedy opublikowano wersję RSA BETA nie ukrywam, że z równie dużymi nadziejami jak i obawami ją uruchamiałem. Przede wszystkim bałem się zawodu z braku usprawnień w szybkości działania, co było dla mnie główną wadą. Szczęśliwie nie musiałem długo czekać, aż moje obawy zostaną rozwiane. Instalacja poszła jak burza z możliwością skrojenia narzędzia na miarę - na moją miarę, a nie producenta. Kolejne plusy dla RSA.

Wersja RSA V7 oparta jest o najnowsze dziecko projektu Eclipse.org - Eclipse 3.2.1 i w zasadzie ten trend powinien się utrzymać, tzn. podczas instalacji RSA możemy wybrać opcję doinstalowania wtyczek (ang. plugins) i rozszeżeń (ang. features) do własnej zainstalowanej wersji Eclipse. Oznacza to, że pod warunkiem braku niekompatybilnych zmian w samej architekturze wtyczek w Eclipse, RSA powinien działać również z kolejnymi wersjami (np. Eclipse 3.3).

Po instalacji zabrałem się za stworzenie przykładowej aplikacji J2EE. Uruchomienie jej na IBM WebSphere Application Server (WAS) v6.1 nie stanowiło żadnego problemu (przypominam, że moje doświadczenie w tym zakresie mogłoby przez wielu być nazwane porażająco niskim, więc można sobie wyobrazić jak prosty musi być ten krok). Szybkość reakcji narzędzi jest imponująca (nawet podczas działania WASa), więc główny mankament RSA (a właściwie RAD V6) został wyeliminowany.

Na uwagę zasługuje również fakt, że wersja beta produktu RSA V7 to jednocześnie pełna nowa wersja RAD V7. Podczas instalacji możemy wybrać te funkcjonalności, które nas interesują, co pozwala na wykluczenie tych rozszeżeń RADa, które nie są w zakresie naszych zainteresowań, dodatkowo odchudzając narzędzie (zostawiając jedynie narzędzia wokół UML), ale nie idzie się oprzeć pokusie zainstalowania wszystkiego. Prostota instalacji zniewala ;-) A na prawdę warto. Ilość narzędzi i komfort pracy z RSA jest imponująca. Zresztą, co tu wiele pisać - jest to po prostu Eclipse 3.2.1, więc chociażby to wprowadza wiele dobrego. Reszta jest równie warta poświęcenia czasu szczególnie, że mamy do czynienia z wersją darmową (przynajmniej na czas trwania dostępności wersji beta).

Nie miałem niestety wiele czasu na zabawę z możliwościami RSA w zakresie UML, więc niewiele mogę napisać. Z niecierpliwością jednakże oczekuję chwili, kiedy będę mógł wrócić do niego i popróbować swoich sił. Reszta, co tu dużo ukrywać pójdzie najprawdopodobniej w odstawkę (cóż, może następnym razem bliżej się im przyjrzę - na pewno nie tym razem).

Chętnych do dyskusji na temat możliwości narzędzia zapraszam na strony produktu - https://www14.software.ibm.com/iwm/web/cc/earlyprograms/rational/desktop70O/, gdzie można pobrać wersję beta oraz uczestniczyć w rozmowach o produkcie na jego forum. Sam zamierzam zarzucić inne produkty UML na jego rzecz i przyjrzeć się (czytaj: przetestować na własnej skórze) możliwości narzędzi UML w RSA. Jeśli masz jakiekolwiek uwagi o jego funkcjonowaniu, chętnie ich wysłucham i być może tym samym zapobiegnę doznaniu nieprzyjemnego uczucia niespełnienia moich oczekiwań... ;-)

03 listopada 2006

I spotkanie Warszawskiej Grupy Użytkowników Technologii Java (Warszawa-JUG)

1 komentarzy

Witajcie!

Warszawska Grupa Użytkowników Technologii Java (Warszawa-JUG) zaprasza na inauguracyjne spotkanie, które odbędzie się we wtorek 07.11.2006 o godzinie 18:00 w sali 5820 Wydziału MiMUW przy ul. Banacha 2 w Warszawie.

Temat prezentacji: Apache Geronimo

Wielu z nas śledzących rynek rozwiązań Java EE spotkała się już zapewne z projektem Apache Geronimo. Celem projektu jest stworzenie serwera aplikacyjnego zgodnego ze specyfikacją Java EE 5, po tym jak cel główny - zgodność z J2EE 1.4 - został spełniony w wersji 1.0. Kolejna wersja 1.2 ma już być częściową implementacją specyfikacji Java EE 5 i jej wydanie planowane jest na ten rok. Prezentacja będzie miała na celu zademonstrowanie możliwości serwera, sposób jego działania, konfigurację i jego elementy składowe. Na prezentacji spróbuję dodatkowo odpowiedzieć na najczęściej zadawane pytania odnośnie serwera oraz przedstawię elementy, które niejednemu nasuną kontrowersyjną tezę o niebywałym podobieństwu między nim a...Spring Framework (!)

W projekcie rozwijana jest również wtyczka do Eclipse IDE, która pozwala na tworzenie aplikacji Java EE w Eclipse i uruchamianie jej na serwerze, o której będzie również mowa na prezentacji. Z jej pomocą, stworzymy demonstracyjną aplikację, którą następnie uruchomimy na serwerze.

Prezentacja prowadzona będzie przez Jacka Laskowskiego, który jest członkiem zespołu koordynującego i programistą w projekcie Apache Geronimo.

Planowany czas prezentacji to 1 godzina z kolejnymi 30 minutami na dyskusję.

Zapraszam w imieniu Warszawa-JUG!

Jacek Laskowski

29 października 2006

Moje poszukiwania (darmowych) narzędzi UML

5 komentarzy
Próbuję okiełznać kilka projektów wolnodostępnych (w tym przede wszystkim Apache OpenEJB) i pomyślałem sobie, że warto zwrócić uwagę na dostępne narzędzia UML do rozrysowania zależności ich klas. Najbardziej zależy mi na diagramie przepływu (ang. sequence diagram), więc postanowiłem sprawdzić co mamy dostępnego na rynku...za darmo. Rozważam jedynie produkty niekomercyjne, bądź wersje dla społeczności - community edition - czy wersje przeznaczone dla projektów wolnodostępnych (ang. open source license), bo w końcu właśnie dla takich projektów zamierzam je wykorzystać.

Jest kilka kryteriów jakim poddaję te narzędzia:
  • wsparcie dla diagramów przepływu
  • wymagania środowiska (najlepiej jeśli jest to rozszerzenie dla Eclipse IDE 3.2+)
  • prostota użycia (ma być intuicyjne i intuicyjność nie ma być czymś co nabędę po przeczytaniu sterty dokumentacji)
  • cena (a właściwie jej brak)
  • prostota instalacji (preferuję wersje bez instalatora, których proces instalacji składa się z jednego kroku - rozpakowania do wybranego katalogu)
  • sposób aktualizacji do nowszej wersji
  • wsparcie dla UML 2.0 (chociaż nie mam bladego pojęcia dlaczego mi na tym tak zależy, więc nie takie ważne :-))
Rozpocząłem od starego znajomego ArgoUML (http://argouml.tigris.org) w wersji 0.22. Był już taki czas, że miałem możliwość korzystania z niego, ale było tak dawno temu, że jedyne co pamiętam to westchnienie i nadanie projektowi statusu "do następnego razu" ;-) Przystąpiłem do instalacji, która sprowadziła się do rozpakowania paczki do odpowiedniego katalogu. Punkt dla ArgoUML. Cena również właściwa, więc kolejny punkt. Utworzyłem pierwszy diagram przepływów i po kilku godzinach okazało się, że nie można grupować wywołań (tak, aby można było je pokazywać/chować dla uproszczenia prezentacji). Dodatkowo nie było możliwości narysowania wywołań z obiektu do niego samego. Po kilku dniach przekonywania siebie samego, że to właściwe narzędzie poddałem się - muszę mieć coś lepszego.

Zabrałem się za poszukiwanie innego. Wpisałem w Google - Eclipse UML - i...dostałem odnośnik do Omondo EclipseUML (http://www.omondo.com). Słyszałem o nim już wcześniej, więc przejrzawszy stronę domową i dowiedziawszy się, że jest to wersja rozszerzająca Eclipse postanowiłem sprawdzić to cudeńko. Nie zastanawiając się długo pobrałem darmową wersję 3.2.20061006 i zainstalowałem ją w osobnym Extension Location w Eclipse. Rozpocząłem ewaluację. Pierwsze wrażenia całkiem pozytywne, szczególnie po tych nieprzyjemnych z ArgoUML. Darmowy, wspiera Eclipse 3.2.1, można zainstalować w osobnym katalogu bez ryzyka zniszczenia Eclipse i w końcu ma wsparcie dla wywołań metod własnych obiektu, który jest jednocześnie wywołującym i odbierającym włącznie z możliwością rozrysowania podwywołań. Wszystkie ładnie się układało, aż do momentu, kiedy po dodaniu kolejnej klasy i metody diagram zaczął robić się zbyt wysoki, tzn. każde dodanie nowej metody (a było ich nie więcej niż 10!) powodowało, że diagram rozszerzał się w pionie do niezarządzalnych rozmiarów. Dodatkowo linie reprezentujące czas życia obiektów nie były dopasowywane do nowych rozmiarów, więc przyszło mi "bawić się" z rozciąganiem i układaniem obiektów zamiast skupić się na ich wprowadzaniu, gdzie resztę powinno obsłużyć samo narzędzie (pamiętałem, że w którymś z narzędzi widziałem kiedyś możliwość upiększenia rozmieszczenia obiektów na diagramie). Po kilku godzinach zniechęcony, stwierdziłem, że na rynku musi być ciekawsza oferta.

Przypomniałem sobie, że bodajże 5 lat temu byłem na szkoleniu o Bluestone Application Server (nota bene, ciekaw jestem, komu w Polsce przyszło z nim pracować - ciekawe, niszowe rozwiązanie, które po zakupie przez HP i transformacji do HP Application Server - HPAS - zostało ostatecznie zasypane i rozwój całkowicie zamilkł. Ciekawostką jest fakt, że ludzie z działu rozwoju zasilili działy rozwoju Oracle Application Server oraz JBoss Application Server)...Ale o czym to ja? Acha, ewaluacja. Przypomniałem sobie o MagicDraw (http://www.magicdraw.com). Okazało się nawet, że miałem go juz zainstalowanego na swoim komputerze (prawdopodobnie po tym, kiedy otrzymałem wiadomość do skrzynki o tym jaki jest wspaniały i darmowy i takie tam, skuszony zainstalowałem po to, aby...mieć). Na stronie domowej doczytałem o najświeższej wersji 11.6 i że uaktualnienia instaluje się za pomocą mechanizmu wbudowanego w narzędzie (co sprowadza się jedynie na sprawdzeniu, czy one istnieją i potwierdzenie ich instalacji). Kilka punktów dla niego. Na razie wciąż ewaluuję, więc niewiele napiszę o nim tym razem, ale sam sposób instalacji jest bardzo obiecujący. Przejrzałem kilka filmów instruktorzowych o tworzeniu diagramów (w tym i diagramu sekwencji) i nie ukrywam, że oczekuję samych dobroci ;-)

W międzyczasie uaktualniania MagicDraw przypomniałem sobie o innym narzędziu - mojej referencji dla NetBeans RCP - Visual Paradigm for UML (http://www.visual-paradigm.com/product/vpuml). Ostatnia wersja 5.3 ma możliwość instalacji jako produkt samodzielny, bądź jako wtyczka do różnych IDE, w tym i Eclipse IDE. Niestety musiałbym zainstalować narzędzie w domyślnym katalogu Eclipse, bez możliwości skorzystania z Extension Location, więc zaniechałem tego sposobu i pobrałem wersję samodzielną. Nadal oczekiwałem na dokończenie instalacji uaktualnienia MagicDraw, kiedy po pobraniu i instalacji (co przypominam sprowadza się do rozpakowania odpwiedniej paczki instalacyjnej) uruchomiłem w końcu narzędzie i...moim oczom ukazało się zapierające dech w piersiach narzędzie (to są odpowiednie słowa, aby wyrazić mój zachwyt tym co zobaczyłem). Panel startowy wbił mnie w krzesło - kompletnie zdębiałem - mnogość opcji tworzenia różnorodnych diagramów i różnorodność kolorów, w jakich zostało to zaprezentowane. Prawie kompletnie zapomniałem o instalowaniu MagicDraw ;-) Mimo wyłącznie pozytywnych opinii o MagicDraw, postanowiłem kontynuować moją ewaluację od Visual Paradigm for UML. W końcu przyjazność użytkowniowi (co składa się na intuicyjność) ma duże znaczenie dla mnie.

Dla zainteresowanych i tych wytrwałych w lekturze moich doświadczeń ewaluacyjnych (kolejność przypadkowa) napiszę, że na rynku około października ma pojawić się najnowsza wersja IBM Rational Software Architect 7.0 (o nazwie kodowej Caspian). Dlaczego dodałem informację o komercyjnym produkcie? Jak mówi się za kulisami, ma być dostępna wersja darmowa dla społeczności (ang. community edition) i oparta o Eclipse 3.2. W końcy prace nad IBM RSA są kontynuowane pod nadzorem osób, które miały duży wpływ na ostateczny kształ UMLa, więc oczekiwania w stosunku do tego produktu muszą być odpowiednio wysokie również. Z niecierpliwością oczekuję momentu, w którym będę mógł podzielić się moimi doświadczeniami z produktem. Nie ma co pisać o wersji pre-BETA teraz, lepiej poczekać na pełną odsłonę, nieprawdaż?

Wracam do ewaluacji. Visual Paradigm i MagicDraw czekają już gotowe!

17 października 2006

Tabele w JavaServer Faces - znacznik h:dataTable

1 komentarzy
Wciąż szukam swojego miejsca na publikację artykułów. Blog nie wydaje się być optymalnym rozwiązaniem, więc po kilku krótkich ewaluacjach stanęło na MediaWiki. Prosty w instalacji i dodatkowo wiki.eclipse.org pracuje na tym.

Przeniosłem więc swoją działalność na Wiki - http://www.laskowski.net.pl/wiki. Nadal nie jestem pewien, czy na tym poprzestanę, ale z pewnością blog powróci do łask jako miejsce krótkich edycji.

Najnowszy artykuł z serii artykułów o JSF w nowym miejscu to Tabele w JavaServer Faces - znacznik h:dataTable.

13 września 2006

Zgłębianie tajników działania środowiska JavaServer Faces (JSF)

0 komentarzy
UWAGA: Przez środowisko JSF rozumie się implementację JavaServer Faces, której środowiskiem uruchomieniowym jest kontener servletów, ewentualnie kontener portletów.

JSF działa w ramach kontenera servletów. Innymi słowy JSF jest aplikacją internetową ze wszystkimi jej konsekwencjami i niewątliwie znajomość technologii Java Servlets znacznie ułatwia zrozumienie działania mechanizmów JSF. Podstawową konsekwencją wykorzystania kontenera servletów jako fundamentu jest sposób uruchamiania aplikacji opartej o JSF. Punktem początkowym obsługującym zlecenia aplikacji JSF jest odpowiednie mapowanie javax.faces.webapp.FacesServlet w deskryptorze rozmieszczenia aplikacji internetowej (ang. deployment descriptor - /WEB-INF/web.xml). Najczęściej wykorzystywanym mapowaniem jest mapowanie per ścieżka (/faces/*) albo per rozszeżenie (*.faces i/lub *.jsf). Wyzwolenie servletu FacesServlet to tak na prawdę uruchomienie środowiska JSF. FacesServlet jest punktem wejścia do JSF - spoiwem łączącym dwie technologie Java Servlets i JavaServer Faces. Jak każdy servlet tak i FacesServlet wczytuje swoją konfigurację z deskryptora instalacji. Jest kilka elementów fundamentalnych dla działania FacesServlet (a tym samym i JSF). Są nimi:

  • fabryka obiektów FacesContext, które dostarczają informacji o aktualnie przetwarzanym zleceniu i odpowiedzi.
  • fabryka obiektów Lifecycle, które odpowiedzialne są za przetwarzanie zleceń według ustalonych etapów.

Parametrów konfiguracyjnych może być znacznie więcej i zależą od implementacji specyfikacji JSF. Konfiguracja obu fabryk obsługiwana jest przez implementację, z której korzystamy i zazwyczaj nie potrzeba się o nią martwić. Najczęściej wymieniane implementacje (środowiska uruchomieniowe) specyfikacji JSF to implementacja referencyjna JSF (ang. JSF Reference Implementation) oraz Apache MyFaces.

Każde zlecenie obsługiwane przez FacesServlet może uczestniczyć w 6 etapach, podczas których wykonywane są odpowiednie czynności związane z przetwarzanym zleceniem. Ważne jest, aby pamiętać, że przejście wszystkich etapów nie jest obowiązkowe i co istotne może być kontrolowane przez samego autora aplikacji JSF. Dodatkowo środowisko JSF może dostarczać własne etapy poza tymi wymienionymi w specyfikacji. Nie można zmienić kolejności wykonywania etapów. Dodać należy również, że lista etapów jest uporządkowana i ominięcie pojedyńczego implikuje zaniechanie wykonania następnych poza ostatnim.

Etapy w życiu zlecenia obsługiwanego przez JSF to:

  1. Restore View
  2. Apply Request Values
  3. Process Validations
  4. Update Model Values
  5. Invoke Application
  6. Render Response

Praca FacesServlet zaczyna się (i jednocześnie kończy) po odebraniu zlecenia i przekazaniu do obiektu implementującego interfejs javax.faces.lifecycle.Lifecycle. Referencyjna implementacja JSF udostępnia go jako obiekt typu com.sun.faces.lifecycle.LifecycleImpl. Po utworzeniu obiektu FacesContext (przy pomocy fabryki FacesContext) przekazuje się go kolejno do metod Lifecycle.execute(FacesContext) i Lifecycle.render(FacesContext). Zakończenie pracy serwletu kończy przetwarzanie zlecenia przez JSF.

Z każdym etapem można związać słuchacza (ang. listener), który jest uruchamiany przy wejściu do i wyjściu z wybranego etapu. Słuchacz implementuje interfejs javax.faces.event.PhaseListener. Domyślnie, konfiguracja słuchacza odbywa się w pliku konfiguracyjnym JSF - faces-config.xml przy pomocy znacznika faces-config/lifecycle/phase-listener (wartością znacznika jest nazwa klasy).

Wywołanie etapu poprzedza sprawdzenie, czy wywołano metodę FacesContext.renderResponse() na obiekcie typu FacesContext związanym z przetwarzanym zleceniem. Wywołanie metody FacesContext.renderResponse() jest sygnałem dla JSF, że zakończenie aktualnie przetwarzanego etapu powinno przekazać kontrolę zlecenia do ostatniego etapu - Render Response - omijając jakiekolwiek etapy pośrednie.

Poza sprawdzeniem stanu związanego z wywołaniem FacesContext.renderResponse(), następuje sprawdzenie, czy wywołano metodę FacesContext.responseComplete() na bieżącym obiekcie typu FacesContext. Informuje ona JSF, że należy zakończyć przetwarzanie zlecenia omijając jakiekolwiek etapy pośrednie. Jest to moment, w którym odpowiedź HTTP została już wysłana do klienta i zakończenie etapu to całkowite zakończenie przetwarzania zlecenia. Możliwym przykładem mogłoby być przekierowanie żądania (ang. HTTP redirect), albo wysłanie strumienia binarnego, np. obrazka.

Każdorazowo przed uruchomieniem etapu następuje wzbudzenie słuchaczy (jeśli takowe zostały zarejestrowane w faces-config.xml). Jeśli słuchacz wykona dowolną z w/w metod (FacesContext.responseComplete() albo FacesContext.renderResponse() w innym etapie niż Render Response) następuje zaniechanie wykonania etapu i zakończenie obsługi żądania, albo przejście do etapu Render Response. Wywołanie słuchaczy odbywa się poprzez wywołanie metod javax.faces.event.PhaseListener.beforePhase(PhaseEvent) bądź javax.faces.event.PhaseListener.afterPhase(PhaseEvent), odpowiednio przed i po etapie. Słuchacz rejestruje swoje zainteresowanie obsługą wejścia do i wyjścia z etapu implementując odpowiednią metodę, a same etapy poprzez metodę javax.faces.event.PhaseListener.getPhaseId().

Jak opisano wyżej, obie metody FacesContext.renderResponse() oraz FacesContext.responseComplete() mogą być wywołane przez elementy stworzone przez programistę w ramach aplikacji JSF (np. słuchacze) i w ten sposób wpływać na przebieg obsługi żądania.