<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>j2ee.pl - związani z javą &#187; JSF</title>
	<atom:link href="http://j2ee.pl/tag/jsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://j2ee.pl</link>
	<description>związani z Javą</description>
	<lastBuildDate>Mon, 24 Aug 2009 11:45:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JBoss® Seam: Simplicity and Power Beyond Java EE</title>
		<link>http://j2ee.pl/2007/09/15/jboss%c2%ae-seam-simplicity-and-power-beyond-java-ee/</link>
		<comments>http://j2ee.pl/2007/09/15/jboss%c2%ae-seam-simplicity-and-power-beyond-java-ee/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 11:15:58 +0000</pubDate>
		<dc:creator>Michał Porzożyński</dc:creator>
				<category><![CDATA[Książki (lub Czasopisma)]]></category>
		<category><![CDATA[jboss seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[recenzja]]></category>

		<guid isPermaLink="false">http://j2ee.pl/2007/09/15/jboss%c2%ae-seam-simplicity-and-power-beyond-java-ee/</guid>
		<description><![CDATA[JBoss Seam jest stosunkowo nowym framework&#8217;iem, wspomagającym tworzenie aplikacji Web 2.0, który integruje ze sobą takie technologie jak: AJAX, JSF, EJB3, Portlety, BPM i wiele innych. Po przeczytaniu paru artykułów na temat Seam doszedłem do wniosku, że rzecz jest na tyle dla mnie ciekawa, że zastosuje ją w mojej pracy magisterskiej. Abym mógł to zrobić [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://j2ee.pl/wp-content/uploads/2007/09/41vcxc6lgul_aa240_.jpg" alt="JBoss Seam" /><a href="http://www.jboss.com/products/seam" target="_blank">JBoss Seam</a> jest stosunkowo nowym framework&#8217;iem, wspomagającym tworzenie aplikacji Web 2.0, który integruje ze sobą takie technologie jak: AJAX, JSF, EJB3, Portlety, BPM i wiele innych. Po przeczytaniu paru artykułów na temat Seam doszedłem do wniosku, że rzecz jest na tyle dla mnie ciekawa, że zastosuje ją w mojej pracy magisterskiej. Abym mógł to zrobić musiałem albo zagłębić się w dokumentację, albo pochłonąć odpowiednią książkę. Kilka miesięcy temu ilość publikacji na temat JBoss Seam w księgarni Amazon.com nie była zachwycająca (o polskich wydawnictwach nawet nie warto wspominać) &#8211; wyszukiwanie znalazło dwie książki:  Beginning JBoss® Seam: From Novice to Professional oraz JBoss® Seam: Simplicity and Power Beyond Java EE. Po przejrzeniu spisów treści, wybór padł na tę drugą i właśnie JBoss® Seam: Simplicity and Power Beyond Java EE postaram się w tym miejscu pokrótce zrecenzować.</p>
<p><span id="more-86"></span>JBoss® Seam: Simplicity and Power Beyond Java EE została wydana nakładem wydawnictwa Prentice Hall, 26 kwietnia 2007 roku. Autorami książki są <a href="http://www.michaelyuan.com/blog/about/">Michael Juntao Yuan</a> oraz <a href="http://www.blogger.com/profile/03126814940255643660" target="_blank">Thomas Heute</a> &#8211; obydwaj pracują w <em>JBoss division of Red Hat Inc</em>. Publikacja składa sie z 27 krótkich rozdziałów (mniej więcej po 15 stron każdy), posegregowanych w 6 części. Druk czytelny, marginesy małe, papier bardzo dobrej jakości. Język nie jest tak prosty jak w <a href="http://j2ee.pl/2007/08/07/ejb-3-in-action/">EJB3 in Action</a>, którą recenzowałem kilka tygodni temu, jednak jestem pewien, że większość programistów Java nie będzie miało z nim większych problemów.</p>
<p>Przejdźmy do krótkiego opisu poszczególnych części..</p>
<p>Część pierwsza, zatytułowana GETTING STARTED, jest oczywiście wstępem do framework&#8217;a. Przeczytamy tutaj czym tak na prawdę jest JBoss Seam i jakie są jego zalety (o wadach nic nie było ;). Jest parę słów na temat programu Seam Gen, który służy do generowania szkieletu aplikacji oraz o IDE, które wspomagają tworzenie aplikacji z wykorzystaniem JBoss Seam. Dodam tutaj tylko, że niedawno pojawiła się pierwsza beta, opartego na Eclipsie, IDE ze stajni Red Hata: <a href="www.redhat.com/developers/rhds/index.html" target="_blank">Red Hat Developer Studio</a>, który to sprawdza się znakomicie przy tworzeniu aplikacji JBoss Seam. Oczywiście, w tej części książki, znajdziemy także nieśmiertelny <em>Hello World</em>. W tym momencie omawiana publikacja po raz pierwszy i ostatni doprowadziła mnie do furii :) Autorzy zapomnieli (a przynajmniej tak mi się wydaje) o drobnym szczególe: plik jar z klasami EJB3 musi zawierać plik seam.properties (choćby pusty) aby Seam mógł z niego korzystać. To przeoczenie kosztowało mnie wiele godzin poszukiwań błędu. Sam przykład jest dość ciekawy i jest rozwijany w niektórych, późniejszych rozdziałach.</p>
<p>STATEFUL APPLICATIONS MADE EASY to tytuł drugiej części. Opisywana jest tutaj esencja i główna siła JBoss Seam &#8211; <strong>Stateful Framework</strong>. Autorzy omawiają zalety jego stosowania (konwersacje, lepsza wydajnoś, mniej wycieków pamięci i inne). Wydaje mi się, że dokładne zrozumienie tej części jest podstawą do tworzenia dobrych aplikacji z wykorzystaniem Seam. Same konwersacje są na tyle innowacyjnym rozwiązaniem w świecie aplikacji webowych JEE, że dla nich samych warto bliżej przyjrzeć się temu framework&#8217;owi. Dodatkowo w tej części dowiadujemy się czym są Workspace&#8217;y i jak wykorzystywać transakcje dostępne w EJB3.</p>
<p>Część trzecia &#8211; INTEGRATING  WEB AND DATA COMPONENTS &#8211; to opis kilku ciekawych funkcji JBoss Seam: walidacja danych wejściowych, &#8220;klikalne&#8221; tabele z danymi (trzeba pamiętać, że w czystym JSF stworzenie takiej klikalnej Data Table, to nie lada wyzwanie) czy obsługa błędów. Dodatkowo poznajmy możliwość tworzenia adresów, które można dodawać do Ulubionych/Zakładek &#8211; taka opcja w aplikacjach wykorzystujących technologie AJAX jest bardzo przydatna. Na koniec autorzy opisują <strong>Seam CRUD Application Framework</strong> &#8211; API dzięki któremu proste aplikacje bazodanowe mogą powstać w kilka minut.</p>
<p>W części czwartej, zatytułowanej AJAX SUPPORT, dowiadujemy się wszystkiego co niezbędne o wykorzystaniu AJAX w naszej aplikacji.  Co ciekawe opisana jest m.in. integracja z <a href="www.icefaces.org/">ICEFaces</a>, którego użycie razem z JBoss Seam, w momencie powstawania książki, mogło prowadzić do błędów działania aplikacji. Dobra wiadomość jest taka, że od kilku tygodni możemy działać na ICEFaces w wersji 1.6 (najnowsza wersja to 1.6.1), która jest już w pełni kompatybilna z framework&#8217;iem.</p>
<p>Część piąta (BUSINESS PROCESSES AND RULES) opisuje integracje JBoss Seam z <a href="www.jboss.com/products/jbpm">jBPM</a> oraz <strong>Rule-Based Security Framework</strong>. W obecnie realizowanym przeze mnie projekcie wykorzystywany jest jBPM wraz ze Springiem. Muszę przyznać, że rozwiązanie proponowane w Seam jest o niebo prostsze i bardziej intuicyjne niż to, które w tym momencie wykorzystuje. Developerzy stanęli na wysokości zadania i jestem pewien, że dzięki tej funkcjonalności, w połączeniu z szybko rosnącą popularnością jBPM, JBoss Seam stanie się w przyszłości standardem pisania aplikacji webowych dla biznesu. Rule-Based Security Framework jest natomiast bardzo dobrym narzędziem zastępującym mechanizmy bezpieczeństwa proponowane przez EJB3, które to nadają się tylko do prostych aplikacji i w praktyce są rzadko wykorzystywane.</p>
<p>Ostatnia część książki to PRODUCTION DEPLOYMENT. Autorzy opisują konfiguracje JBoss Seam na serwerach aplikacyjnych JBoss AS 4.0.5, 4.2.x i 5.x i GlassFish oraz kontenerze serwletów Tomcat (tak.. Seam może działać bez EJB3). Dodatkowo opisane są zagadnienia związane z wydajnością oraz tworzeniem klastrów.</p>
<p>Lektura książki  JBoss® Seam: Simplicity and Power Beyond Java EE to bardzo dobry sposób na dość wnikliwe poznanie JBoss Seam w wersji 1.2.x. Autorzy koncentrują sie na praktycznych aspektach stosowania framework&#8217;a, dzięki czemu na 402 stronach znajdziecie dużą dawkę wiedzy, która niewątpliwie przyda się w trakcie tworzenia aplikacji. Książkę można zakupić m.in. w księgarni internetowej <a href="http://www.amazon.com/JBoss-Seam-Simplicity-Beyond-Prentice/dp/0131347969/ref=pd_bbs_sr_1/002-7043991-1795203?ie=UTF8&amp;s=books&amp;qid=1189847848&amp;sr=8-1" target="_blank">amazon.com</a> już od $20</p>
]]></content:encoded>
			<wfw:commentRss>http://j2ee.pl/2007/09/15/jboss%c2%ae-seam-simplicity-and-power-beyond-java-ee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamiczne ID w komponentach JSF</title>
		<link>http://j2ee.pl/2007/02/01/dynamiczne-id-w-komponentach-jsf/</link>
		<comments>http://j2ee.pl/2007/02/01/dynamiczne-id-w-komponentach-jsf/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 13:22:59 +0000</pubDate>
		<dc:creator>Michał Porzożyński</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://j2ee.pl/2007/02/01/dynamiczne-id-w-komponentach-jsf/</guid>
		<description><![CDATA[Twórcy specyfikacji JSF nie  przewidzieli (chyba), że zdarzają się aplikacje webowe w których należy wykorzystać formularze dynamiczne, czyli takie w których liczba pól zmienia się w zależności od wcześniejszych poczynań użytkownika. W formularzach takich od czasu do czasu ktoś będzie chciał wykorzystać JavaScript. Znacznik html:inputText  w swoim atrybucie id przyjmuje tylko i wyłącznie [...]]]></description>
			<content:encoded><![CDATA[<p>Twórcy specyfikacji JSF nie  przewidzieli (chyba), że zdarzają się aplikacje webowe w których należy wykorzystać formularze dynamiczne, czyli takie w których liczba pól zmienia się w zależności od wcześniejszych poczynań użytkownika. W formularzach takich od czasu do czasu ktoś będzie chciał wykorzystać JavaScript. Znacznik <strong>html:inputText</strong>  w swoim atrybucie <strong>id</strong> przyjmuje tylko i wyłącznie statyczne stringi.. a więc możemy napisać coś takiego: <strong>html:inputText id=&#8221;bleble&#8221;</strong>  ale nie możemy już użyć takiej: <strong>html:inputText id=&#8221;#{bleble}&#8221; </strong> lub takiej: <strong>html:inputText id=&#8221;${bleble}&#8221;</strong><strong> </strong>formy zapisu. Jak w takim razie z poziomu funkcji JS dostać się do wartości takiego pola ???</p>
<p>Po kilku ładnych godzinach poszukiwań natrafiłem na projekt <a href="https://javascript4jsf.dev.java.net/" title="J4J" target="_blank">javascript4jsf</a>&#8230; i problem został rozwiązany :)</p>
<ol>
<li><a href="http://www.jsftutorials.net/download/j4j/0.3/j4j.jar">Ściągamy bibliotekę</a> i umieszczamy w odpowiednim folderze w naszej aplikacji (lib)</li>
<li>Do pliku faces-config.xml dodajemy:
<pre class="prettyprint">
&lt;component&gt;
  &lt;component-type&gt;org.j4j.idProxy&lt;/component-type&gt;
  &lt;component-class&gt;org.j4j.components.UIIDProxy&lt;/component-class&gt;
&lt;/component&gt;</pre>
</li>
<li>Do strony JSP w której chcemy użyć dodajemy definicje taglib:
<pre class="prettyprint">&lt;%@ taglib uri="http://javascript4jsf.dev.java.net/" prefix="j4j" %&gt;</pre>
</li>
<li>Następnie do ciała znacznika  wstawiamy nasz znacznik proxy
<pre class="prettyprint">
&lt;h:inputText id="firstName" value="#{GetNameBean.firstName}"&gt;
  &lt;j4j:idProxy id="firstName_" /&gt;
&lt;/h:inputText&gt;</pre>
</li>
<li>Z poziomu JavaScript odwołujemy się do interesującego nas pola w nastepujący sposób (tutaj przykład uaktywnienia pola)
<pre class="prettyprint">
&lt;script language="javascript"&gt;
  var iid=document.getElementById("firstName_").title;
  document.getElementById(iid).focus();
&lt;/script&gt;</pre>
</li>
</ol>
<p>Jak to działa ? Biblioteka J4J wstawia znacznik <strong>span</strong>, który posiada odpowiednie ID, przed komponent JSF.  Wspomnę jeszcze tylko na koniec, że atrybut ID znacznika  przyjmuje dynamiczne wartości !</p>
]]></content:encoded>
			<wfw:commentRss>http://j2ee.pl/2007/02/01/dynamiczne-id-w-komponentach-jsf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dostęp do springowych beanów z poziomu klasy validatora JSF</title>
		<link>http://j2ee.pl/2007/01/13/dostep-do-springowych-beanow-z-poziomu-klasy-validatora-jsf/</link>
		<comments>http://j2ee.pl/2007/01/13/dostep-do-springowych-beanow-z-poziomu-klasy-validatora-jsf/#comments</comments>
		<pubDate>Sat, 13 Jan 2007 13:58:20 +0000</pubDate>
		<dc:creator>Michał Porzożyński</dc:creator>
				<category><![CDATA[JSF]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://j2ee.pl/2007/01/13/dostep-do-springowych-beanow-z-poziomu-klasy-validatora-jsf/</guid>
		<description><![CDATA[Od pewnego czasu wykonujemy w dwuosobowym zespole projekt w oparciu o Spring, Hibernate i JSF. Po drodze napotykamy dość często na różnego rodzaju problemy. Jednym z nich był dostęp z poziomu klasy implementującej jsf&#8217;owy interfejs Validator do zdefiniowanych w kontekście springowym beanów.  Początkowo chciałem zadeklarować klasę walidatora w faces-config oraz w applicationContext ale tym [...]]]></description>
			<content:encoded><![CDATA[<p>Od pewnego czasu wykonujemy w dwuosobowym zespole projekt w oparciu o Spring, Hibernate i JSF. Po drodze napotykamy dość często na różnego rodzaju problemy. Jednym z nich był dostęp z poziomu klasy implementującej jsf&#8217;owy interfejs Validator do zdefiniowanych w kontekście springowym beanów.  Początkowo chciałem zadeklarować klasę walidatora w faces-config oraz w applicationContext ale tym sposobem tworzone są dwie niemające nic ze sobą wspólnego instancje interesującej mnie klasy. Drugie rozwiązanie okazało się już lepsze: standardowo korzystamy z <em>org.springframework.web.jsf.DelegatingVariableResolver</em> (którego deklarujemy w faces-config). W metodzie validate(..) natomiast korzystamy z takiej oto mniej więcej linijki w celu dostępu do beana:</p>
<pre class="prettyprint">
ServiceLocator serviceLocator =
  (ServiceLocator) facesContext.getApplication().
    createValueBinding("#{serviceLocator}").getValue(facesContext);</pre>
<p>Gdzie  <em>ServiceLocator</em> to nazwa klasy a <em>serviceLocator to nazwa springowego bean&#8217;a.</em></p>
<p>Bardzo możliwe, że da się to zrobić w bardziej elegancki sposób za pomocą biblioteki <a href="http://jsf-spring.sourceforge.net/" target="_blank">jsf-spring</a>. Niestety projekt ten w tym momencie właściwie nie posiada dokumentacji, a ja nie posiadam czasu na wnioskowanie co i jak z api. Jeśli ktoś używał tego dzieła, proszę o jakieś info.</p>
]]></content:encoded>
			<wfw:commentRss>http://j2ee.pl/2007/01/13/dostep-do-springowych-beanow-z-poziomu-klasy-validatora-jsf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
