<?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>Dariusz Ludera Homepage &#187; vaadin</title>
	<atom:link href="http://ludera.info/tag/vaadin/feed" rel="self" type="application/rss+xml" />
	<link>http://ludera.info</link>
	<description>Dariusz Ludera oficjalna strona. Programista Java i JEE. Dariusz Ludera Homepage. Java and JEE developer.</description>
	<lastBuildDate>Sun, 27 Feb 2011 01:18:11 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Vaadin vs Richfaces i o tym co z tego wyszło [Java EE 6, Maven, Glassfish, Oracle]</title>
		<link>http://ludera.info/java/vaadin-vs-richfaces-i-o-tym-co-z-tego-wyszlo-java-ee-6-maven-glassfish-oracle</link>
		<comments>http://ludera.info/java/vaadin-vs-richfaces-i-o-tym-co-z-tego-wyszlo-java-ee-6-maven-glassfish-oracle#comments</comments>
		<pubDate>Tue, 13 Apr 2010 22:40:51 +0000</pubDate>
		<dc:creator>Dariusz Ludera</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[addressbook]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[java ee 6]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[richfaces]]></category>
		<category><![CDATA[vaadin]]></category>

		<guid isPermaLink="false">http://ludera.info/?p=529</guid>
		<description><![CDATA[Głośno ostatnio na DWorld i DZone zrobiło się o nowej odsłonie Vaadina &#8211; frameworku opartego na GWT. Nigdy wcześniej nie miałem styczności z GWT (prócz kilku tutoriali i paru hellowordów). Pracuję natomiast na codzień z JSF &#8211; najczęściej w implementacji Richfaces. Chciałem więc sprawdzić co potrafi ten rozchwalany na lewo i prawo Vaadin oraz jak [...]]]></description>
			<content:encoded><![CDATA[<p>Głośno ostatnio na<a title="Developers World" href="http://www.dworld.pl/" onclick="pageTracker._trackPageview('/outgoing/www.dworld.pl/?referer=');"> DWorld</a> i <a title="DZone" href="http://www.dzone.com/links/index.html" onclick="pageTracker._trackPageview('/outgoing/www.dzone.com/links/index.html?referer=');">DZone</a> zrobiło się o nowej odsłonie <a title="Vaadin" href="http://vaadin.com/home" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/home?referer=');">Vaadina</a> &#8211; frameworku <strong>opartego </strong>na GWT. Nigdy wcześniej nie miałem styczności z GWT (prócz kilku tutoriali i paru hellowordów). Pracuję natomiast na codzień z JSF &#8211; najczęściej w implementacji <a title="JBoss Richfaces" href="http://www.jboss.org/richfaces" onclick="pageTracker._trackPageview('/outgoing/www.jboss.org/richfaces?referer=');">Richfaces</a>. Chciałem więc sprawdzić co potrafi ten rozchwalany na lewo i prawo Vaadin oraz jak jego zestaw gotowych komponentów ma się do Richfaces w kontekście budowania interfejsu użytkownika dla aplikacji &#8216;biznesowych&#8217; (tabele, modalpanele, itp, itd) w konwencji podbierania gotowych komponentów ze stron frameworków (odpowiednio <a title="Komponenty Vaadin" href="http://demo.vaadin.com/sampler/" onclick="pageTracker._trackPageview('/outgoing/demo.vaadin.com/sampler/?referer=');">tej</a> i <a title="Komponenty Richfaces" href="http://livedemo.exadel.com/richfaces-demo/index.jsp" onclick="pageTracker._trackPageview('/outgoing/livedemo.exadel.com/richfaces-demo/index.jsp?referer=');">tej</a>). Mam świadomość tego, że porównywanie Vaadina do Richfaces to jak zestawianie arbuzów z dyniami &#8211; za jedyne kryterium porównawcze chciałem zatem przyjąć ogólną prostotę danego rozwiązania. Chodziło o to żeby zrobić (CRUDa, a jakże) a się nie narobić <img src='http://ludera.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Najprostszą metodą stworzenia działającego projektu Vaadin, jest <a title="Vaadin tutorial" href="http://vaadin.com/tutorial/-/page/project-setup.html" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/tutorial/-/page/project-setup.html?referer=');">wyklikanie</a> go z poziomu Eclipse (kreatory i edytor WYSIWYG). Najłatwiejszą, jaką znam, metodą zbudowania projektu opartego o Richfaces jest <a title="Richfaces Livedemo sources" href="http://anonsvn.jboss.org/repos/richfaces/branches/community/3.3.X/samples/richfaces-demo/" onclick="pageTracker._trackPageview('/outgoing/anonsvn.jboss.org/repos/richfaces/branches/community/3.3.X/samples/richfaces-demo/?referer=');">pobranie przykładowej aplikacji</a> i wyrzucenie niepotrzebnych plików albo&#8230; wygenerowanie Seamowego projektu seam-gen&#8217;em. Można również oczywiście w obu przypadkach bawić się w Mavena.</p>
<p>Poznawanie Vaadina rozpocząłem właśnie od napisania sobie <a title="Vaadin tutorial" href="http://vaadin.com/tutorial/-/page/project-setup.html" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/tutorial/-/page/project-setup.html?referer=');">AddressBook</a>&#8216;a &#8211; nic innego jak CRUD, który chciałem stworzyć samemu&#8230; Stwierdziłem więc, że może chociaż samemu dorzucę ORM (JPA) i zobaczę czy nadal wszystko będzie tak gładko chodzić, to też już ktoś wcześniej <a title="Vaadin AddressBook z JPA" href="http://vaadin.com/wiki/-/wiki/Main/Adding%20JPA%20to%20the%20Address%20Book%20Demo" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/wiki/-/wiki/Main/Adding_20JPA_20to_20the_20Address_20Book_20Demo?referer=');">zrobił</a> <img src='http://ludera.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Pomyślałem więc, że zbiorę chociaż wszystko to do kupy i sprawdzę czy się nie &#8216;gryzie&#8217;. Napisałem zatem mavenowy AddressBook z JPA, pracujący na Glassfish 3.1 z Oracle 10g Express Edition w tle &#8211; zadziałało. Poniżej listing jak wygenerować szablon <a title="Integracja Vaadin z Maven" href="http://vaadin.com/wiki/-/wiki/Main/Using%20Vaadin%20with%20Maven" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/wiki/-/wiki/Main/Using_20Vaadin_20with_20Maven?referer=');">projektu Vaadina w mavenie</a>, oraz gotowy projekt do pobrania plus kilka podpowiedzi jak coś takiego uruchomić tudzież &#8216;napisać&#8217; samemu.</p>
<p>0) instalujemy i konfigurujemy Oracle 10g Express Edition</p>
<p>1) pobieramy najnowszego <a title="Latest NB Glassfish 3.1" href="http://download.java.net/glassfish/v3.1/nightly/latest-glassfish.zip" onclick="pageTracker._trackPageview('/outgoing/download.java.net/glassfish/v3.1/nightly/latest-glassfish.zip?referer=');">glassfisha 3.1</a> (wersja 3 zawiera bug niepozwalający na swobodne korzystanie z Vaadin &#8211; chodzi o ładowanie klas)</p>
<p>2) do $GLASSFISH_HOME/glassfish/lib dorzucamy sterownik ojdbc14.jar</p>
<p>3) z $GLASSFISH_HOME/bin uruchamiamy asadmin start domain &#8211; startujemy domyślną (domain1) domenę serwera wszystkorobiącym skryptem asadmin</p>
<p>4) otwieramy konsolę administracyjną Glassfisha (http://localhost:4848) i wybieramy z menu Resources-&gt;JDBC-&gt;JDBC Connection Pools</p>
<p>5) dodajemy pulę połączeń do naszej bazy</p>
<p style="text-align: center;"><a href="http://ludera.info/wp-content/uploads/2010/04/1.png"><img class="aligncenter size-full wp-image-534" title="Konfiguracja puli połączeń 1" src="http://ludera.info/wp-content/uploads/2010/04/1.png" alt="" width="337" height="113" /></a><a href="http://ludera.info/wp-content/uploads/2010/04/2.png"></a></p>
<p style="text-align: center;">
<p style="text-align: center;"><a href="../wp-content/uploads/2010/04/2.png"><img class="aligncenter" title="Konfiguracja puli połączeń 2" src="../wp-content/uploads/2010/04/2.png" alt="" width="367" height="95" /></a></p>
<p style="text-align: center;">
<p>6) dodajemy JDBC Recource (o nazwie jdbc/sample) dla skonfigurowanej przed chwilą puli połączeń &#8211; będziemy się do tego źródła danych odwoływać z poziomu aplikacji (w persistance.xml)</p>
<p>7) restartujemy serwer (asadmin stop-domain; asadmin start-domain)</p>
<p>8 ) generujemy projekt skryptem mvnAddressBook.sh:</p>
<pre class="brush: xml;">
#!/bin/bash
if [ &quot;$#&quot; -gt 2 ]
then
	groupId=$1
	artifactId=$2
else
	artifactId=AddressBook
	groupId=com.vaadin.demo.tutorial.addressbook
fi
mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-clean -DarchetypeVersion=LATEST -DgroupId=&quot;$groupId&quot; -DartifactId=&quot;$artifactId&quot; -Dversion=1.0 -Dpackaging=war
cd $artifactId; mvn eclipse:eclipse
</pre>
<p>9) importujemy projekt do Eclipse z zainstalowanym pluginem do Vaadina (dzięki temu będziemy mieć edytor WYSIWYG do składania GUI z klocków)</p>
<p>10) rozwiązanie zależności z Glassfish w pom.xml (po pobraniu projektu dołączonego do tego wpisu ustaw własną ścieżkę!)</p>
<p>11) teraz najważniejsze. według uznania, przechodzimy przez tutorial AddressBook i AddressBook+JPA pamiętając o hierarchii projektu narzuconej przez Maven lub <a title="Vaadin AddressBook z JPA - źródła" href="http://vaadin.com/c/wiki/get_page_attachment?p_l_id=35405&amp;nodeId=10674&amp;title=Adding+JPA+to+the+Address+Book+Demo&amp;fileName=Adding+JPA+to+the+Address+Book+Demo%2Faddressbook.tar.gz" onclick="pageTracker._trackPageview('/outgoing/vaadin.com/c/wiki/get_page_attachment?p_l_id=35405_amp_nodeId=10674_amp_title=Adding+JPA+to+the+Address+Book+Demo_amp_fileName=Adding+JPA+to+the+Address+Book+Demo_2Faddressbook.tar.gz&amp;referer=');">ściągamy</a> gotowy projekt i przerzucamy kod do naszego. Dodajemy również web.xml z pustą deklaracją &#8211; korzystamy z Java EE6, więc konfigurujemy serwlety adnotacjami &#8211; patrz AddressBookApplication (jak widać konfiguracja Vaadina jest właściwie zerowa,w odróżnieniu od JSF gdzie skazani jesteśmy na klepanie kilometrowych plików typu faces-config.xml)</p>
<p>12) dorzucamy katalogi src/test/resources i implementujemy testy jednostkowe! <img src='http://ludera.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>13) mvn compile war:war</p>
<p>14) delpoy aplikacji z poziomu konsoli administracyjnej Glassfish (pozycja menu Applications), z Eclipsa lub <a href="https://maven-glassfish-plugin.dev.java.net/" onclick="pageTracker._trackPageview('/outgoing/maven-glassfish-plugin.dev.java.net/?referer=');">Mavenem</a>.</p>
<p style="text-align: center;"><a href="http://ludera.info/wp-content/uploads/2010/04/3.png"><img class="aligncenter size-full wp-image-536" title="AddressBook [Vaadin, Java EE6 (Servlets, EJB 3, JPA), Glassfish, Oracle DB]" src="http://ludera.info/wp-content/uploads/2010/04/3.png" alt="" width="380" height="552" /></a></p>
<p>Podsumowanie.</p>
<p>Nie pisałem ostatecznie analogicznej aplikacji w Seam (z Richfaces). Wiem bowiem jak coś takiego zrobić i jak świetnym narzędziem do generowania CRUDów jest seam-gen. Jeśli chodzi o Vaadin to muszę powiedzieć, że ten framework przegania pod względem prostoty JSF (nawet z tak świetnym zestawem komponentów jak Richfaces). Pisząc w Vaadin ani razu nie musimy zaglądać do web.xml, czy innych charakterystycznych dla frameworku xmli &#8211; i to jest świetne. Kuleje mocno edytor WYSIWYG &#8211; obecnie w fazie testów. Jak widać Vaadin da się zaprząc całokowicie bezboleśnie do współpracy z Java EE. Ciekaw natomiast jestem, czy da się (i czy jest sens) pożenić Vaadina z Seamem &#8211; ktoś próbował?</p>
<p>Wnioski.</p>
<p>Koniecznie zmienić skórkę dla bloga, bo się nie mieszczę!</p>
<p>PS. Jeszcze taka jedna obserwacja. Dzięki temu, że JSF podzielony jest na widok (jsp lub facelets) i kontroler (managed beans), ciężej niż w Vaadin jest napisać śmietnik zamiast kodu. Jedyne ryzyko, to to że nasze beany zamiast obiektowych będą kodem proceduralnym. Vaadin jest badzo podobny do Swinga, wypada więc <a href="http://en.wikipedia.org/wiki/Strategy_pattern" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Strategy_pattern?referer=');">strategicznie</a> <a href="http://en.wikipedia.org/wiki/Object_composition" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Object_composition?referer=');">komponować</a> kod zamiast uwailić całe GUI w metodzie init() <img src='http://ludera.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Sugestie jak pisać czysty kod w Vaadin znaleźć można w samej aplikacji AddressBook oraz w Book of Vaadin (<a rel="nofollow" href="http://en.wikipedia.org/wiki/Book_of_Mormon" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Book_of_Mormon?referer=');">nie mylić z tym</a>) <img src='http://ludera.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS2. Zapowiada się świetna okazja, by już <a href="http://groups.google.com/group/warszawa-jug/web/harmonogram-spotka-i-ich-tematy" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/warszawa-jug/web/harmonogram-spotka-i-ich-tematy?referer=');">20.04.2010</a> posłuchać paru <a title="KoziołekWeb" href="http://koziolekweb.pl/2010/03/28/songs-of-vaadin/" onclick="pageTracker._trackPageview('/outgoing/koziolekweb.pl/2010/03/28/songs-of-vaadin/?referer=');">mądrych</a> słów o Vaadin. Ja z przyczyn obiektywnych niestety nie będę mógł skorzystać, niemniej jednak zapraszam bo na pewno warto!</p>
<p>Kompletny projekt do <a title="VaadinAddressbookWithJpaAndMaven.zip" href="http://ludera.info/files/VaadinAddressbookWithJpaAndMaven.zip">pobrania</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ludera.info/java/vaadin-vs-richfaces-i-o-tym-co-z-tego-wyszlo-java-ee-6-maven-glassfish-oracle/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

