<?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>KoziołekWeb &#187; Maven</title>
	<atom:link href="http://koziolekweb.pl/category/java/maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://koziolekweb.pl</link>
	<description>Sięgam tam gdzie wzrok nie sięga, a tam NullPointerException</description>
	<lastBuildDate>Tue, 22 May 2012 11:25:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<image>\n<url>http://koziolekweb.pl/icon.png</url>\n<title>KoziołekWeb</title>\n<link>http://koziolekweb.pl</link>\n<width></width>\n<height></height>\n</image>\n		<item>
		<title>Eclipse, Maven i JasperReports</title>
		<link>http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/</link>
		<comments>http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/#comments</comments>
		<pubDate>Sun, 20 May 2012 21:32:43 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[JasperReports]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2558</guid>
		<description><![CDATA[      
      Mamy sobie projekt zarządzany za pomocą Mavena, edytowany w Eclipse w którym to projekcie jesteśmy zmuszeni korzystać z Jasper Reports. Sam silnik JR jest bardzo fajny i mi osobiście strasznie się podoba. W połączeniu z Eclipsem wychodzą niestety wszystkie wady tego ostatniego. Eclipse nie ma dobrego edytora wizualnego. Nigdy nie miał i jest to jego [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Mamy sobie projekt zarządzany za pomocą Mavena, edytowany w Eclipse w którym to projekcie jesteśmy zmuszeni korzystać z Jasper Reports. Sam silnik JR jest bardzo fajny i mi osobiście strasznie się podoba. W połączeniu z Eclipsem wychodzą niestety wszystkie wady tego ostatniego.<br />
Eclipse nie ma dobrego edytora wizualnego. Nigdy nie miał i jest to jego poważna przypadłość. Plugin JR kontynuuje tą złą tradycję. Zaczyna dodawać swoje atrybuty, jakieś cuda z edycją szablonów&#8230; generalnie ssie. Jeżeli nie chcemy użerać się z tym pluginem wystarczy użyć zwykłego edytora xml, który jest w Eclipse. No nie do końca&#8230; Pliki szablonów JR mają rozszerzenie <samp>jrxml</samp>, które jest traktowane w edytorze jako niewłaściwe. Nic nie pomaga kojarzenie plików z edytorem w konfiguracji. Po prostu edytor XML po załadowaniu pliku z rozszerzeniem innym niż xml zachowuje się jak zwykły notatnik.</p>
<p>Mamy jednak do dyspozycji Mavena i jego mechanizm pluginów:</p>
<p class="listing">Listing 1. Konfiguracja pluginu kompilatora JR</p>
<pre class="xml" name="code">
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>jasperreports-maven-plugin</artifactId>
	<version>1.0-beta-2</version>
	<configuration>
		<outputDirectory>target/jasperreports/compiled</outputDirectory>
		<xmlValidation>true</xmlValidation>
		<sourceDirectory>src/main/resources/jasperreports</sourceDirectory>
		<sourceFileExt>xml</sourceFileExt>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>compile-reports</goal>
			</goals>                                                       
<phase>compile</phase>
		</execution>
	</executions>
</plugin></pre>
<p>Nas interesuje opcja <samp>sourceFileExt</samp>, która pozwala na określenie jakie rozszerzenie ma plik z szablonem raportu. Dzięki temu można użyć plików z rozszerzeniem xml, które są prawidłowo edytowane w Eclipse.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;title=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Eclipse, Maven i JasperReports' do Del.icio.us" alt="dodaj 'Eclipse, Maven i JasperReports' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;title=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Eclipse, Maven i JasperReports' do digg" alt="dodaj 'Eclipse, Maven i JasperReports' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/" title="dodaj 'Eclipse, Maven i JasperReports' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Eclipse, Maven i JasperReports' do Technorati" alt="dodaj 'Eclipse, Maven i JasperReports' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;title=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Eclipse, Maven i JasperReports' do Stumble Upon" alt="dodaj 'Eclipse, Maven i JasperReports' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;title=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Eclipse, Maven i JasperReports' do Google Bookmarks" alt="dodaj 'Eclipse, Maven i JasperReports' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;t=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Eclipse, Maven i JasperReports' do FaceBook" alt="dodaj 'Eclipse, Maven i JasperReports' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/&amp;title=Eclipse%2C+Maven+i+JasperReports" title="dodaj 'Eclipse, Maven i JasperReports' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Eclipse, Maven i JasperReports' do wykop.pl" alt="dodaj 'Eclipse, Maven i JasperReports' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2012/05/20/eclipse-maven-i-jasperreports/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Własny archetyp ważna rzecz</title>
		<link>http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/</link>
		<comments>http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 20:00:54 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Inżynieria Oprogramowania]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2483</guid>
		<description><![CDATA[      
      Jeżeli często używasz jakiegoś stosu technologicznego warto zamienić konfigurację mavena na archetyp. Najprościej można to osiągnąć za pomocą wywołania mvn archetype:create-from-project. Postaram się przez najbliższych kilka dni przygotować i udostępnić archetyp zawierający: Vaadin JSR-303 JPA2 Shiro Guice Całość przetestowana za pomocą testng. Dodaj do]]></description>
			<content:encoded><![CDATA[      
      <p>Jeżeli często używasz jakiegoś stosu technologicznego warto zamienić konfigurację mavena na archetyp. Najprościej można to osiągnąć za pomocą wywołania <samp>mvn archetype:create-from-project</samp>.</p>
<p>Postaram się przez najbliższych kilka dni przygotować i udostępnić archetyp zawierający:</p>
<ul>
<li>Vaadin</li>
<li>JSR-303</li>
<li>JPA2</li>
<li>Shiro</li>
<li>Guice</li>
</ul>
<p>Całość przetestowana za pomocą testng.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;title=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Własny archetyp ważna rzecz' do Del.icio.us" alt="dodaj 'Własny archetyp ważna rzecz' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;title=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Własny archetyp ważna rzecz' do digg" alt="dodaj 'Własny archetyp ważna rzecz' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/" title="dodaj 'Własny archetyp ważna rzecz' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Własny archetyp ważna rzecz' do Technorati" alt="dodaj 'Własny archetyp ważna rzecz' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;title=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Własny archetyp ważna rzecz' do Stumble Upon" alt="dodaj 'Własny archetyp ważna rzecz' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;title=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Własny archetyp ważna rzecz' do Google Bookmarks" alt="dodaj 'Własny archetyp ważna rzecz' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;t=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Własny archetyp ważna rzecz' do FaceBook" alt="dodaj 'Własny archetyp ważna rzecz' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/&amp;title=W%C5%82asny+archetyp+wa%C5%BCna+rzecz" title="dodaj 'Własny archetyp ważna rzecz' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Własny archetyp ważna rzecz' do wykop.pl" alt="dodaj 'Własny archetyp ważna rzecz' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2012/04/27/wlasny-archetyp-wazna-rzecz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Różne wersje JVM a sprawa mavena</title>
		<link>http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/</link>
		<comments>http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 19:44:42 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[maven3]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2472</guid>
		<description><![CDATA[      
      Krzysiek Piwoński w komentarzu do poprzedniego wpisu zamieścił wycinek ze swojego env. To spowodowało, że przypomniałem sobie dlaczego jeszcze nie zmigrowalem na maven3 w pracy. W maven 3 jest trochę zmian. Jedną z bardziej bolesnych jest kompletna zmiana sposobu zarządzania profilami w ramach pliku settings.xml. W maven 2 było tak, że w tagu profile dało [...]]]></description>
			<content:encoded><![CDATA[      
      <p><a href="http://piwonski.pl/">Krzysiek Piwoński</a> w komentarzu do poprzedniego wpisu zamieścił wycinek ze swojego <samp>env</samp>. To spowodowało, że przypomniałem sobie dlaczego jeszcze nie zmigrowalem na maven3 w pracy.</p>
<p>W maven 3 jest trochę zmian. Jedną z bardziej bolesnych jest kompletna zmiana sposobu zarządzania profilami w ramach pliku <samp>settings.xml</samp>. W maven 2 było tak, że w tagu <samp>profile</samp> dało się upchnąć m.n. domyślną konfigurację pluginów. W maven 3 nie jest to możliwe, bo o ile jeszcze po umieszczeniu np. tagu <samp>build</samp> w definicji profilu maven strzeli tylko delikatnego focha w trakcie gry wstępnej i poinformuje nas, że ten tak jest wybitnie nie na miejscu:</p>
<p class="listing">Listing 1. Komunikat o niedozwolonym tagu</p>
<pre class="bash" name="code">$ mvn clean
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'build' (position: START_TAG seen ...<id>j7</id>\n\t\t\t<build>... @140:11)  @ /home/koziolek/maven3/conf/settings.xml, line 140, column 11
</pre>
<p>To już znacznie większym problemem może okazać się stosowanie takiej metody konfiguracji jako domyślnej np. na serwerze CI. W takim przypadku informacje zawarte w pliku <sapmp>settings.xml</samp> zostają olane, a jakaś niewinna duszyczka musi nosić <a href="http://nerdoza.cupsell.pl/produkty/63783-I-broke-a-Build.html">koszulkę z wyznaniem winy</a>, bo akurat to po jej commicie się posypało.</p>
<h4>Jak sobie z tym poradzić?</h4>
<p>W mavenie 2 mało kto korzystał z expressions do konfiguracji projektu. Zazwyczaj ograniczało się to do użycia ich w celu oznaczanie wersji Springa/Guice czy jakiegoś nietypowego ustawienia dziedziczonego przez kilka pluginów.<br />
Ja wykorzystam je tutaj do eleganckiego zdefiniowania ustawień związanych z różnymi wersjami JVM. </p>
<h4>Dodanie konfiguracji do <samp>settings.xml</samp></h4>
<p>Otwieramy odpowiedni plik <samp>settings.xml</samp>. Odpowiedni to znaczy:</p>
<ul>
<li>plik umieszczony w <samp>$MAVEN_HOME/conf</samp> jeżeli chcemy zastosować konfigurację do wszystkich wywołań mavena niezależnie od użytkownika.</li>
<li>plik umieszczony w <samp>~/.m2</samp> jeżeli chcemy zastosować konfigurację tylko do konkretnego użytkownika.</li>
</ul>
<p>W sekcji <samp>settings/profiles</samp> dodajemy:</p>
<p class="listing">Listing 2. konfiguracja profili</p>
<pre class="xml" name="code">
<profile>
			<id>j6</id>
<properties>
				<maven.compiler.executable>/home/koziolek/java/bin/javac</maven.compiler.executable>
				<maven.compiler.fork>true</maven.compiler.fork>
				<maven.compiler.source>1.6</maven.compiler.source>
				<maven.compiler.target>1.6</maven.compiler.target>
			</properties>
		</profile>
<profile>
			<id>j7</id>
<properties>
				<maven.compiler.executable>/home/koziolek/java7/bin/javac</maven.compiler.executable>
				<maven.compiler.fork>true</maven.compiler.fork>
				<maven.compiler.source>1.7</maven.compiler.source>
				<maven.compiler.target>1.7</maven.compiler.target>
			</properties>
		</profile>
</pre>
<p>i więcej jak mamy taką potrzebę. </p>
<p>Następnie w sekcji <samp>settings/activeProfiles</samp> dodajemy</p>
<p class="listing">Listing 3. wybór profilu domyślnego</p>
<pre class="xml" name="code"><activeProfile>j6</activeProfile>
</pre>
<p>Lub jakikolwiek inny, który chcemy używać jako domyślny. Brak wskazania domyślnego profilu skutkuje uruchomieniem każdego builda z konfiguracją domyślną co oznacza m.n. użycie javy w wersji 1.5 (z dokładnością do tego jak działa flaga <samp>-target</samp> w javac, ale to <a href="http://koziolekweb.pl/2011/10/07/o-kompatybilnosci-wstecznej-javac-slow-kilka/">innsza inszość</a>).</p>
<p>Co oznaczają poszczególne flagi?</p>
<ul>
<li><samp>maven.compiler.source</samp> &#8211; tak jak <samp>source</samp> w specyfikacji kompilatora.</li>
<li><samp>maven.compiler.target</samp> &#8211; tak jak <samp>target</samp> w specyfikacji kompilatora.</li>
<li><samp>maven.compiler.executable</samp> &#8211; pełna ścieżka do pliku kompilatora.</li>
<li><samp>maven.compiler.fork</samp> &#8211; najważniejsza z flag. Powoduje, że proces kompilacji jest uruchamiany jako osobny proces w systemie dzięki czemu można użyć zewnętrznego kompilatora.</li>
</ul>
<p>Jak widać ostatnia flaga steruje całą magią konfiguracji. Jeżeli przestawimy ją na <samp>false</samp> to możemy spodziewać się różnych ciekawych efektów ubocznych. Począwszy od kompilacji projektu pod javę 5, poprzez kompilację z użyciem np. Hot-Spot zamiast JRockit, a kończąc na błędach samego kompilatora mówiących, że &#8220;sorry cie bardzo nie ta wersja javy&#8221;.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;title=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do Del.icio.us" alt="dodaj 'Różne wersje JVM a sprawa mavena' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;title=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do digg" alt="dodaj 'Różne wersje JVM a sprawa mavena' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/" title="dodaj 'Różne wersje JVM a sprawa mavena' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do Technorati" alt="dodaj 'Różne wersje JVM a sprawa mavena' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;title=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do Stumble Upon" alt="dodaj 'Różne wersje JVM a sprawa mavena' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;title=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do Google Bookmarks" alt="dodaj 'Różne wersje JVM a sprawa mavena' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;t=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do FaceBook" alt="dodaj 'Różne wersje JVM a sprawa mavena' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/&amp;title=R%C3%B3%C5%BCne+wersje+JVM+a+sprawa+mavena" title="dodaj 'Różne wersje JVM a sprawa mavena' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Różne wersje JVM a sprawa mavena' do wykop.pl" alt="dodaj 'Różne wersje JVM a sprawa mavena' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2012/04/23/rozne-wersje-jvm-a-sprawa-mavena/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalacja maven 3 w wyjedubudntu</title>
		<link>http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/</link>
		<comments>http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 19:41:08 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[maven3]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2470</guid>
		<description><![CDATA[      
      Lubię Ubuntu. Naprawdę. Jest to taka dystrybucja linuxa w której ciężko jest coś zepsuć o ile oczywiście klika się po GUI dostarczonym przez Canonical. Problem z Ubuntu polega na tym, że jak zaczniemy używać konsoli zamiast klikać to można naciąć się na kilka ciekawych problemów vide moja zachcianka na dodatkowy ekran i problemy z modułem [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Lubię Ubuntu. Naprawdę. Jest to taka dystrybucja linuxa w której ciężko jest coś zepsuć o ile oczywiście klika się po GUI dostarczonym przez Canonical. Problem z Ubuntu polega na tym, że jak zaczniemy używać konsoli zamiast klikać to można naciąć się na kilka ciekawych problemów vide moja zachcianka na dodatkowy ekran i problemy z modułem RandR, ale o tym innym razem.<br />
Innym problemem jest to, że w repozytorium pakietów nie ma wielu interesujących i nie takich znowuż nowych m.n. brakuje pakietu z mavenem 3. </p>
<p>Ten tutorial jest przeznaczony na n00bów.</p>
<p>Ważną rzeczą jest zachowanie odpowiedniej kolejności działań. Inaczej trzeba będzie niektóre z nich powtórzyć. </p>
<ul>
<li>Usuń z systemu mavena 2 za pomocą polecenia:
<p class="listing">Listing 1. Usuwanie mavena 2</p>
<pre class="bash" name="code">$ sudo apt-get remove maven2; sudo apt-get autoremove</pre>
</li>
<li>Ściągnij i rozpakuj paczkę z mavenem 3. Zakładam, że rozpakowałeś ją do ~/maven3</li>
<li>Wykonaj:
<p class="listing">Listing 2. Konfiguracja mavena 3</p>
<pre class="bash" name="code">$ sudo ln -s ~/maven3/bin/mvn /usr/bin/mvn</pre>
</li>
</ul>
<p>I tak oto masz Maven 3 na pokładzie.</p>
<p>I oto przykład na to, że motywator w postaci 50euro działa. Ponad rok od podjęcia decyzji o przejściu na Mavena 3 w końcu to zrobiłem ;D Od dziś wszystkie wpisy na blogu będą budowane z wykorzystaniem mavena 3.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;title=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Del.icio.us" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;title=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do digg" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Technorati" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;title=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Stumble Upon" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;title=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do Google Bookmarks" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;t=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do FaceBook" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/&amp;title=Instalacja+maven+3+w+wyjedubudntu" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Instalacja maven 3 w wyjedubudntu' do wykop.pl" alt="dodaj 'Instalacja maven 3 w wyjedubudntu' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2012/04/22/instalacja-maven-3-w-wyjedubudntu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Scala i Selenium miłe złego początki&#8230; cz. I</title>
		<link>http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/</link>
		<comments>http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 14:06:58 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[maven-scala-plugin]]></category>
		<category><![CDATA[Selenium]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2077</guid>
		<description><![CDATA[      
      &#8230; a koniec średnio radosny. Na początek będzie trochę o zestawianiu środowiska, czyli o rzeczach, które trzeba niestety zrobić i nie są one zbyt przyjemne dla naszej psychiki. W moim przypadku mam za zadanie przygotować lekki i wygodny framework do testowania naszych aplikacji webowych. Ogólne założenia: Pozwala na testowanie wszystkich (naszych) aplikacji. Pozwala na pisanie [...]]]></description>
			<content:encoded><![CDATA[      
      <p>&#8230; a koniec średnio radosny.</p>
<p>Na początek będzie trochę o zestawianiu środowiska, czyli o rzeczach, które trzeba niestety zrobić i nie są one zbyt przyjemne dla naszej psychiki. </p>
<p>W moim przypadku mam za zadanie przygotować lekki i wygodny framework do testowania naszych aplikacji webowych. Ogólne założenia:</p>
<ul>
<li>Pozwala na testowanie wszystkich (naszych) aplikacji.</li>
<li>Pozwala na pisanie testów z zachowaniem języka domeny.</li>
<li>Jest stosunkowo nieskomplikowany i łatwy w użyciu.</li>
</ul>
<p>Ostatni punkt jest umowny o oznacza mniej więcej tyle, że API nie powinno mieć więcej niż kilka klas i odpowiadać mniej więcej elementom wizualnym w UI aplikacji oraz mapować akcje użytkownika na jakieś metody czy obiekty.</p>
<p>Kolejna rzecz to ten nieszczęsny &#8220;język domeny&#8221;, który w tym przypadku oznacza mniej więcej tyle co:<br />
Dla obiektów:</p>
<ul>
<li>Aplikacja dzieli się na ekrany.</li>
<li>Ekran jest formularzem <b>albo</b> listą.</li>
<li>Formularz zawiera pola.</li>
<li>Lista zawiera rekordy.</li>
</ul>
<p>Dla akcji:</p>
<ul>
<li>Do aplikacji można się zalogować i wylogować.</li>
<li>Ekran można otworzyć lub wysłać.</li>
<li>Pole można odczytać i można w nim pisać.</li>
<li>Listę można odczytać.</li>
</ul>
<p>Czyli jest nieźle. Można sobie na tej podstawie wybudować jakieś ogólne wyobrażenie tego co będzie zawierać ta maszynka. </p>
<p>Czas na naszą narzędziownię. Będzie ona oparta o gotowe rozwiązania wspierające tworzenie testów aplikacji webowych. Zatem na pokładzie witamy:</p>
<ul>
<li><a href="http://seleniumhq.org/">Selenium</a> &#8211; framework testów webowych.</li>
<li><a href="http://seleniumhq.org/projects/ide/">Selenium IDE for FireFox</a> &#8211; plugin do FF.</li>
<li><a href="http://getfirebug.com/">Firebug</a> &#8211; kolejny plugin do FF ułatwia pracę z kodem HTML i ma m.n. obsługę xPath.</li>
<li><a href="http://testng.org/">TestNG</a> &#8211; silnik testów w javie, będzie nam to wszystko zbierał do kupy.</li>
<li><a href="http://www.scala-lang.org/">Scala</a> &#8211; język w jakim to wszystko napiszemy.</li>
<li><a href="http://www.eclipse.org/downloads/packages/release/indigo/m6">Eclipse Indigo</a> &#8211; nasze IDE.</li>
<li><a href="http://maven.apache.org/">Maven</a> &#8211; budowanie, zarządzanie, wkurwianie to jego domena</li>
</ul>
<p>Tu dochodzimy do głównej części dzisiejszego wpisu, czyli jak spiąć Eclipse ze Scalą (i Selenium). O ile integracja z Selenium polega w tym przypadku na podpięciu w <samp>pom.xml</samp>:</p>
<p class="listing">Listing 1. zależności od Selenium</p>
<pre class="xml" name="code">
<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium</artifactId>
	<version>LATEST</version>
	<type>pom</type>
</dependency></pre>
<p>i cierpliwym poczekaniu, aż wszystko się ściągnie to ze Scalą jest kilka wrzodów.</p>
<h4>Scala IDE</h4>
<p>Bardzo fajne rozwiązanie dla programistów pracujących w Eclipse, którzy chcą używać Scali. Tyle tylko, że w wersji stabilnej z obsługą Scali 2.8.0 jest moim skromnym zdaniem kompletnie nieprzydatne. Wynika to z dwóch rzeczy. Po pierwsze sam kompilator Scali wymaga dość dużo RAMu i Eclipse musi mieć w opcjach wpisane co najmniej 1024m. Trzeba pogrzebać w <samp>eclipse.ini</samp> i poustawiać <samp>-Xmx</samp> oraz <samp>-Xms</samp>. Po drugie plugin wykorzystuje swój weavering, który ma tendencję deadlocków. Rozwiązaniem jest znowuż edycja <samp>ecclipse.ini</samp>:</p>
<p class="listing">Listing 2. workaround do deadlocków Scala IDE</p>
<pre class="bash" name="code">
 -XX:+UnlockDiagnosticVMOptions
 -XX:+UnsyncloadClass
 -Dosgi.classloader.lock=classname
</pre>
<p>tyle tylko, że jest to rozwiązanie klasy &#8220;będzie się cięło rzadziej, ale będzie&#8221;.<br />
Rozwiązaniem pierwszego problemu jest za to wykorzystanie Scali 2.9.0RC2 i odpowiedniej wersji IDE, czyli bety 2.0.0. W celu oszczędzenia sobie ciężkiego urazu psychicznego polecam w tym przypadku instalację manualną przez rozpakowanie paczki z pluginem do <samp>dropins</samp> i olanie update site. W razie czego można się łatwo wrzodu pozbyć.</p>
<p>Na koniec konfiguracja pluginu scali do mavena, który pozwala na uniknięcie instalacji Scali w systemie (czasami przydatne):</p>
<p class="listing">Listing 3. Konfiguracja <samp>pom.xml</samp></p>
<pre class="xml" name="code">
<!-- w build.plugins -->
<plugin>
	<groupId>org.scala-tools</groupId>
	<artifactId>maven-scala-plugin</artifactId>
	<version>LATEST</version>
	<executions>
		<execution>
			<goals>
				<goal>compile</goal>
				<goal>testCompile</goal>
			</goals>
		</execution>
	</executions>
	<configuration>
		<scalaVersion>${scala.version}</scalaVersion>
	</configuration>
</plugin>
<!-- i dalej w depenedency -->
<dependency>
	<groupId>org.scala-lang</groupId>
	<artifactId>scala-library</artifactId>
	<version>${scala.version}</version>
</dependency>
<dependency>
	<groupId>org.scalatest</groupId>
	<artifactId>scalatest</artifactId>
	<version>1.3</version>
</dependency>
</pre>
<p>Tu mała uwaga na temat Eclipse. Pytanie jeżeli w projekcie definiujemy <samp>scala.version</samp> i mamy je też skonfigurowane w <samp>settings.xml</samp>, to które zostanie wykorzystane? Zdrowy rozsądek podpowiada, że to z <samp>pom.xml</samp> jak to ma miejsce w przypadku chociażby pluginów. No niestety zdrowy rozsądek należy odłożyć i dzięki temu odkrywamy, że zmienne w <samp>pom.xml</samp> są nadpisywane przez te z <samp>settings.xml</samp>.<br />
Mam tu jeszcze Scala Test, czyli takiego DSLa do testów. Przyda się.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;title=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Del.icio.us" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;title=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do digg" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Technorati" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;title=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Stumble Upon" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;title=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Google Bookmarks" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;t=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do FaceBook" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/&amp;title=Scala+i+Selenium+mi%C5%82e+z%C5%82ego+pocz%C4%85tki%26%238230%3B+cz.+I" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do wykop.pl" alt="dodaj 'Scala i Selenium miłe złego początki&#8230; cz. I' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/04/27/scala-i-selenium-mile-zlego-poczatki-cz-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Przykłady z java4people</title>
		<link>http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/</link>
		<comments>http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 19:20:35 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Java4People 2011]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Vaadin]]></category>
		<category><![CDATA[Guice]]></category>
		<category><![CDATA[Java4People]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2072</guid>
		<description><![CDATA[      
      Udostępnione na githubie pod adresem git://github.com/Koziolek/java4people-vaadin-examples.git. Można ściągnąć opędzić mavenem i gotowe. vaadin-clean Zawiera kod różnych komponentów. W przypadku uruchomienia profilu gwt udostępniona zostanie funkcjonalność związana z menu kontekstowym w zakładce &#8220;własne komponenty&#8221;. Kod z dokumentacją! vaadin-guice Przykładowy projekt integracyjny Vaadin i guice. Brak komentarzy. vaadin-scala Durnostojka demonstrująca, że da się użyć scali. Brak komentarzy. [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Udostępnione na githubie pod adresem <a href="https://github.com/Koziolek/java4people-vaadin-examples">git://github.com/Koziolek/java4people-vaadin-examples.git</a>. Można ściągnąć opędzić mavenem i gotowe.</p>
<h5>vaadin-clean</h5>
<p>Zawiera kod różnych komponentów. W przypadku uruchomienia profilu gwt udostępniona zostanie funkcjonalność związana z menu kontekstowym w zakładce &#8220;własne komponenty&#8221;. Kod z dokumentacją!</p>
<h5>vaadin-guice</h5>
<p>Przykładowy projekt integracyjny Vaadin i guice. Brak komentarzy.</p>
<h5>vaadin-scala</h5>
<p>Durnostojka demonstrująca, że da się użyć scali. Brak komentarzy.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;title=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Przykłady z java4people' do Del.icio.us" alt="dodaj 'Przykłady z java4people' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;title=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Przykłady z java4people' do digg" alt="dodaj 'Przykłady z java4people' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/" title="dodaj 'Przykłady z java4people' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Przykłady z java4people' do Technorati" alt="dodaj 'Przykłady z java4people' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;title=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Przykłady z java4people' do Stumble Upon" alt="dodaj 'Przykłady z java4people' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;title=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Przykłady z java4people' do Google Bookmarks" alt="dodaj 'Przykłady z java4people' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;t=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Przykłady z java4people' do FaceBook" alt="dodaj 'Przykłady z java4people' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/&amp;title=Przyk%C5%82ady+z+java4people" title="dodaj 'Przykłady z java4people' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Przykłady z java4people' do wykop.pl" alt="dodaj 'Przykłady z java4people' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/04/20/przyklady-z-java4people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Walka z Mavenem 2.2.1</title>
		<link>http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/</link>
		<comments>http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 12:42:35 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2069</guid>
		<description><![CDATA[      
      Kiedyś wysypał mi się maven. Sprawę odpuściłem, bo jakoś mi to nie przeszkadzało. Do czasu&#8230; Jako, że plugin do Scali wymaga Mavena w wersji 2.2.1 zatem trzeba było zrobić mały update. Update tradycyjny poprzez podmianę jarów nic nie dał. Błąd ten sam co wtedy. Mały wkurw&#8230; bo nie zrobiłem backupa, ale w sumie nie ma [...]]]></description>
			<content:encoded><![CDATA[      
      <p><a href="http://koziolekweb.pl/2009/03/25/maven-210-wydany/">Kiedyś wysypał mi się maven</a>. Sprawę odpuściłem, bo jakoś mi to nie przeszkadzało. Do czasu&#8230; Jako, że <a href="http://scala-tools.org/mvnsites/maven-scala-plugin/">plugin do Scali</a> wymaga Mavena w wersji 2.2.1 zatem trzeba było zrobić mały update. Update tradycyjny poprzez podmianę jarów nic nie dał. Błąd ten sam co wtedy.</p>
<p>Mały wkurw&#8230; bo nie zrobiłem backupa, ale w sumie nie ma o co, bo mam starą wersję gdzieś na backup-dysku.</p>
<p>Wywaliłem wszystko do cna zachowując tylko konfigurację &#8211; plik <samp>settings.xml</samp>. Rozpakowałem na świeżo i działa.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;title=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Walka z Mavenem 2.2.1' do Del.icio.us" alt="dodaj 'Walka z Mavenem 2.2.1' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;title=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Walka z Mavenem 2.2.1' do digg" alt="dodaj 'Walka z Mavenem 2.2.1' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/" title="dodaj 'Walka z Mavenem 2.2.1' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Walka z Mavenem 2.2.1' do Technorati" alt="dodaj 'Walka z Mavenem 2.2.1' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;title=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Walka z Mavenem 2.2.1' do Stumble Upon" alt="dodaj 'Walka z Mavenem 2.2.1' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;title=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Walka z Mavenem 2.2.1' do Google Bookmarks" alt="dodaj 'Walka z Mavenem 2.2.1' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;t=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Walka z Mavenem 2.2.1' do FaceBook" alt="dodaj 'Walka z Mavenem 2.2.1' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/&amp;title=Walka+z+Mavenem+2.2.1" title="dodaj 'Walka z Mavenem 2.2.1' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Walka z Mavenem 2.2.1' do wykop.pl" alt="dodaj 'Walka z Mavenem 2.2.1' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/04/19/walka-z-mavenem-2-2-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Integracja Vaadin + Guice z ICEPush</title>
		<link>http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/</link>
		<comments>http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 14:11:50 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Vaadin]]></category>
		<category><![CDATA[Guice]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=2047</guid>
		<description><![CDATA[      
      Wczoraj osiągnąłem niewielki sukces integrując zestaw Vaadin + Guice z IcePush. Celem takiego połączenia jest uzyskanie możliwości aktualizacji UI przez zdarzenia generowane na serwerze, a nie tylko dzięki interakcji po stronie klienta. Jest to o tyle ważne, że w klasycznych rozwiązaniach (nawet AJAX) można aktualizować GUI tylko w wyniku akcji po stronie klienta. Jest to [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Wczoraj osiągnąłem niewielki sukces integrując zestaw Vaadin + Guice z IcePush. Celem takiego połączenia jest uzyskanie możliwości aktualizacji UI przez zdarzenia generowane na serwerze, a nie tylko dzięki interakcji po stronie klienta. Jest to o tyle ważne, że w klasycznych rozwiązaniach (nawet AJAX) można aktualizować GUI tylko w wyniku akcji po stronie klienta. Jest to wyjątkowo upierdliwe jeżeli chcemy stworzyć rozwiązanie zbliżone funkcjonalnością do klasycznych okienek.<br />
Dodatkowym problemem jest nietypowy sposób zarządzania modułami przez Google Guice Servlet Extension. Rozwiązanie to działa w oparciu o filtr i w praktyce wymaga wyeliminowania mapowania serwletów z pliku <samp>web.xml</samp>. Jednocześnie ICEPush wymaga podłączenia specjalnego serwletu, który będzie podtrzymywał połączenie klient-serwer.</p>
<h4>Przygotowania i konfiguracja środowiska</h4>
<p>Konfiguracja środowiska będzie przebiegać w kilku krokach. Ważną rzeczą jest by dodanie funkcjonalności ICEPush nastąpiło w momencie gdy będzie to już naprawdę niezbędne. Wynika to z konieczności każdorazowego kompilowania kodu za pomocą kompilatora GWT. To powoduje, że proces wydłuża się i to na tyle, że można spokojnie pójść na kawę. Jeżeli jednak chcecie dodać ICEPush już na obecnym etapie to warto zastosować pewien trik, który za chwilę omówię. </p>
<p>Pierwszym krokiem w konfiguracji środowiska jest stworzenie pakietu <samp>org.icepush.gwt</samp> i umieszczenie w nim pliku <samp>ICEpush.gwt.xml</samp>.</p>
<p class="listing">Listing 1. <samp>ICEpush.gwt.xml</samp>
<pre name="code" class="xml"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module>
    <inherits name="com.vaadin.terminal.gwt.DefaultWidgetSet" />
    <inherits name="org.vaadin.artur.icepush.IcepushaddonWidgetset" />
    <inherits name="pl.koziolekweb.vaadin.guice.widgetset.MyAppWidgetSet" />
</module></pre>
<p>Następnie musimy stworzyć pakiet <samp>pl.koziolekweb.vaadin.guice.widgetset</samp> zawierający plik <samp>MyAppWidgetSet.gwt.xml</samp>.</p>
<p class="listing">Listing 2. <samp>MyAppWidgetSet.gwt.xml</samp>
<pre name="code" class="xml"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
    "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN"
    "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module>
	<inherits name="com.vaadin.terminal.gwt.DefaultWidgetSet" />
	<inherits name="org.vaadin.artur.icepush.IcepushaddonWidgetset" />
	<inherits name="org.icepush.gwt.ICEpush" />
</module></pre>
<p>Na tym kończy się pierwszy standardowy etap konfiguracji. Drugi etap to edycja pliku <samp>pom.xml</samp> w celu dodania zależności zarówno do ICEPush jak i pluginów kompilatora GWT oraz managera widgetsetów Vaadin. </p>
<p class="listing">Listing 3. <samp>pom.xml</samp> &#8211; pluginy
<pre name="code" class="xml">
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>gwt-maven-plugin</artifactId>
	<version>2.1.0-1</version>
	<configuration>
		<webappDirectory>${project.build.directory}/${project.build.finalName}/VAADIN/widgetsets</webappDirectory>
		<extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
		<runTarget>test</runTarget>
		<hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp>
		<noServer>true</noServer>                                                                                 
<port>8080</port>
		<soyc>false</soyc>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>resources</goal>
				<goal>compile</goal>
			</goals>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>com.vaadin</groupId>
	<artifactId>vaadin-maven-plugin</artifactId>
	<version>1.0.1</version>
	<executions>
		<execution>
			<configuration>
			</configuration>
			<goals>
				<goal>update-widgetset</goal>
			</goals>
		</execution>
	</executions>
</plugin></pre>
<p class="listing">Listing 4. <samp>pom.xml</samp> &#8211; zależności ICEPush
<pre name="code" class="xml"><dependency>
	<groupId>org.vaadin.addons</groupId>
	<artifactId>icepush</artifactId>
	<version>0.2.1</version>
</dependency>
<dependency>
	<groupId>org.icepush</groupId>
	<artifactId>icepush</artifactId>
	<version>2.0</version>
</dependency>
<dependency>
	<groupId>org.icepush</groupId>
	<artifactId>icepush-gwt</artifactId>
	<version>2.0</version>
</dependency>
<dependency>
	<groupId>com.google.gwt</groupId>
	<artifactId>gwt-user</artifactId>
	<version>2.1.1</version>
	<scope>provided</scope>
</dependency></pre>
<p>Z taką konfiguracją możemy już działać z ICEPush w zwykłej aplikacji Vaadin. Należy co prawda dodać jeszcze odpowiedni serwlet do naszego <samp>web.xml</samp>, ale o tym na <a href="http://vaadin.com/directory#addon/icepush">stronie dodatku</a>.</p>
<p>Czas na dodanie konfiguracji Guice. Jest to kolejny przyjemny etap prac konfiguracyjnych. Tu sprawa zaczyna się jednak komplikować, bo i ile konfiguracja w pliku <samp>pom.xml</samp></p>
<p class="listing">Listing 5. <samp>pom.xml</samp> &#8211; zależności Guice
<pre name="code" class="xml"><dependency>
	<groupId>com.google.inject</groupId>
	<artifactId>guice</artifactId>
	<version>2.0</version>
</dependency>
<dependency>
	<groupId>com.google.inject.extensions</groupId>
	<artifactId>guice-servlet</artifactId>
	<version>2.0</version>
</dependency>
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
</dependency></pre>
<p>to dalej zaczynają się drobne schody.<br />
Po pierwsze Guice przejmuje zarządzanie serwletami od kontenera. To oznacza usunięcie z <samp>web.xml</samp> mapowania serwletów i zastąpienie ich konfiguracją filtra z Guice.</p>
<p class="listing">Listing 6. <samp>web.xml</samp> &#8211; konfiguracja Guice
<pre name="code" class="xml"><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>Vaadin-Guice-ICEPush application</display-name>
	<context-param>
		<description>Vaadin production mode</description>
<param-name>productionMode</param-name>
<param-value>false</param-value>
	</context-param>

	<filter>
		<filter-name>guiceFilter</filter-name>
		<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>guiceFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<listener>
<listener-class>pl.koziolekweb.vaadin.guice.servlet.VaadinGuiceConfiguration</listener-class>
	</listener>
</web-app></pre>
<p>Następnie należy samodzielnie zaimplementować listener, który utworzy nam injector Guice:</p>
<p class="listing">Listing 7. Implementacja listenera Guice
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice.servlet;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;

public class VaadinGuiceConfiguration extends GuiceServletContextListener {

	@Override
	protected Injector getInjector() {
		return Guice.createInjector(new MyServletModule());
	}

}
</pre>
<p>Na koniec trzeba utworzyć moduł Guice:</p>
<p class="listing">Listing 8. Implementacja modułu Guice
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice.servlet;

import java.util.HashMap;
import java.util.Map;

import pl.koziolekweb.vaadin.guice.ApplicationRoot;
import pl.koziolekweb.vaadin.guice.modules.books.model.dao.BookDao;
import pl.koziolekweb.vaadin.guice.modules.books.model.dao.SimpleBookDao;
import pl.koziolekweb.vaadin.guice.modules.books.presenter.ListBookPresenter;
import pl.koziolekweb.vaadin.guice.modules.books.presenter.ListBookPresenterImpl;
import pl.koziolekweb.vaadin.guice.modules.books.view.ListBookView;
import pl.koziolekweb.vaadin.guice.modules.books.view.ListBookViewImpl;

import com.google.inject.servlet.ServletModule;
import com.google.inject.servlet.ServletScopes;
import com.vaadin.Application;

public class MyServletModule extends ServletModule {

	@Override
	protected void configureServlets() {
		Map<String, String> params = new HashMap<String, String>();

		serve("/*").with(GuiceApplicationServlet.class, params);

		bind(Application.class).to(ApplicationRoot.class).in(ServletScopes.SESSION);

		bind(ListBookView.class).to(ListBookViewImpl.class);
		bind(BookDao.class).to(SimpleBookDao.class);
		bind(ListBookPresenter.class).to(ListBookPresenterImpl.class);

	}
}</pre>
<p>Na tym etapie należy chwilę się zatrzymać i zastanowić co tu się dzieje. W momencie nadejścia żądania uruchamiany jest filtr guice, który wyszukuje sobie istniejące injectory zawierające <samp>ServletModule</samp> i w zależności co mu skonfigurujemy w ramach takiego modułu oraz w zależności od ścieżki z żądania zostanie odpalony odpowiedni serwlet. Injectory są trzymane w ramach kontekstu aplikacji, a dodaje je tam implementacja <samp>GuiceServletContextListener</samp>.</p>
<p>No właśnie tu dochodzimy do najciekawszego elementu czyli spinania Guice z ICEPush. Jeżeli chcemy korzystać z samego Guice w Vaadin to tworzymy własny serwlet rozszerzający <samp>AbstractApplicationServlet</samp> i tyle.</p>
<p class="listing">Listing 9. Implementacja <samp>AbstractApplicationServlet</samp> dla Guice
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice.servlet;

import java.io.IOException;

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;

import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;

@SuppressWarnings("serial")
@Singleton
public class GuiceApplicationServlet extends AbstractApplicationServlet {

	private final Provider<Application> applicationProvider;

	@Inject
	public GuiceApplicationServlet(Provider<Application> applicationProvider) {
		this.applicationProvider = applicationProvider;
	}

	@Override
	protected Class<? extends Application> getApplicationClass() throws ClassNotFoundException {
		return Application.class;
	}

	@Override
	protected Application getNewApplication(HttpServletRequest request) throws ServletException {
		return applicationProvider.get();
	}
}</pre>
<p>Jednak jeżeli chcemy dodać obsługę ICEPush to musimy jakość ją włączyć do naszego serwletu. Metoda najprostsza i jednocześnie nie najlepsza to skopiowanie zawartości oryginalnego serwletu do naszego serwletu Guice. Inaczej się niestety nie da. Zatem po zmianach nasz serwlet będzie wyglądał tak:</p>
<p class="listing">Listing 10. Implementacja <samp>AbstractApplicationServlet</samp> dla Guice z ICEPush
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.icepush.servlet.MainServlet;
import org.vaadin.artur.icepush.ICEPush;
import org.vaadin.artur.icepush.JavascriptProvider;

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;

import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;

@SuppressWarnings("serial")
@Singleton
public class GuiceApplicationServlet extends AbstractApplicationServlet {

	private final Provider<Application> applicationProvider;

	private MainServlet ICEPushServlet;

	private JavascriptProvider javascriptProvider;

	@Inject
	public GuiceApplicationServlet(Provider<Application> applicationProvider) {
		this.applicationProvider = applicationProvider;
	}

	@Override
	public void destroy() {
		super.destroy();
		ICEPushServlet.shutdown();
	}

	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		try {
			super.init(servletConfig);
		} catch (ServletException e) {
			if (e.getMessage().equals(
					"Application not specified in servlet parameters")) {
				// Ignore if application is not specified to allow the same
				// servlet to be used for only push in portals
			} else {
				throw e;
			}
		}
		ICEPushServlet = new MainServlet(servletConfig.getServletContext());

		try {
			javascriptProvider = new JavascriptProvider(getServletContext().getContextPath());
			ICEPush.setCodeJavascriptLocation(javascriptProvider.getCodeLocation());
		} catch (IOException e) {
			throw new ServletException("Error initializing JavascriptProvider",e);
		}
	}

	@Override
	protected Class<? extends Application> getApplicationClass()
			throws ClassNotFoundException {
		return Application.class;
	}

	@Override
	protected Application getNewApplication(HttpServletRequest request)
			throws ServletException {
		return applicationProvider.get();
	}

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String pathInfo = request.getPathInfo();
		if (pathInfo != null
				&#038;&#038; pathInfo.equals("/" + javascriptProvider.getCodeName())) {
			// Serve icepush.js
			serveIcePushCode(request, response);
			return;
		}

		if (request.getRequestURI().endsWith(".icepush")) {
			// Push request
			try {
				ICEPushServlet.service(request, response);
			} catch (Exception e) {
				throw new ServletException(e);
			}
		} else {
			// Vaadin request
			super.service(request, response);
		}
	}

	private void serveIcePushCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
		String icepushJavscript = javascriptProvider.getJavaScript();
		response.setHeader("Content-Type", "text/javascript");
		response.getOutputStream().write(icepushJavscript.getBytes());
	}
}
</pre>
<h4>Użycie ICEPush oraz sztuczki i kruczki</h4>
<p>Jeżeli koniecznie potrzebujesz używać w kodzie ICEPush, ale nie chesz mieć na karku kompilatora GWT można zrobić mały bypass. Po co? Czasami jest tak, że po zakodowaniu modułu ciężko jest dokonywac jakiś zmian. Łatwo za to jest zmienić konfigurację. Co też i zrobimy.<br />
Na początek przygotujemy sobie mały interfejsik, który posłuży nam jako adapter do usługi comet.</p>
<p class="listing">Listing 11. Interfejs <samp>CometService</samp>
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice;

import com.vaadin.ui.ComponentContainer;

public interface CometService {

	public void addToContainer(ComponentContainer componentContainer);

	public void push();

}</pre>
<p>O ile znaczenie metody <samp>push()</samp> jest oczywiste, to metoda <samp>addToContainer</samp> może być trochę tajemnicza. Otoż by móc używać ICEPush należy dodać go do okna aplikacji. My odwrócimy ten schemat dzięki czemu będziemy mieć kontrolę nad tym co dodajemy do aplikacji. Jest to szczególnie wygodne jeżeli chcemy dodać pseudo usługę, bo wtedy można umieścić na stronie info, że ICEPush jest, ale go nie ma.<br />
Zaimplementujmy zatem nasz mock serwis:</p>
<p class="listing">Listing 12. Klasa <samp>FakeCometService</samp>
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice;

import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Label;

public class FakeCometService implements CometService {

	public void addToContainer(ComponentContainer componentContainer) {
		componentContainer.addComponent(new Label("Fake CometService in use"));
	}

	public void push() {
		System.out.println("call push");
	}
}</pre>
<p>Pamiętaj by przenieść konfigurację kompilatora GWT do osobnego profilu mavena. Inaczej i tak będziesz pijał kilka kaw ekstra w oczekiwaniu na zakończenie kompilacji.<br />
Oczywiście przyda się też i właściwa implementacja:</p>
<p class="listing">Listing 13. Klasa <samp>ICEPushCometService</samp>
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice;

import org.vaadin.artur.icepush.ICEPush;

import com.vaadin.ui.ComponentContainer;

public class IcePushCometService implements CometService {

	private ICEPush icePush;

	public IcePushCometService() {
		icePush = new ICEPush();
	}

	public void addToContainer(ComponentContainer componentContainer) {
		componentContainer.addComponent(icePush);
	}

	public void push() {
		icePush.push();
	}

}</pre>
<p>Użycie jest bardzo proste. Przykładowa konfiguracja modułu:</p>
<p class="listing">Listing 13. <samp>MyServletModule</samp>
<pre name="code" class="java">package pl.koziolekweb.vaadin.guice.servlet;

import java.util.HashMap;
import java.util.Map;

import pl.koziolekweb.vaadin.guice.ApplicationRoot;
import pl.koziolekweb.vaadin.guice.CometService;
import pl.koziolekweb.vaadin.guice.IcePushCometService;
import pl.koziolekweb.vaadin.guice.modules.books.model.dao.BookDao;
import pl.koziolekweb.vaadin.guice.modules.books.model.dao.SimpleBookDao;
import pl.koziolekweb.vaadin.guice.modules.books.presenter.ListBookPresenter;
import pl.koziolekweb.vaadin.guice.modules.books.presenter.ListBookPresenterImpl;
import pl.koziolekweb.vaadin.guice.modules.books.view.ListBookView;
import pl.koziolekweb.vaadin.guice.modules.books.view.ListBookViewImpl;

import com.google.inject.servlet.ServletModule;
import com.google.inject.servlet.ServletScopes;
import com.vaadin.Application;

public class MyServletModule extends ServletModule {

	@Override
	protected void configureServlets() {
		Map<String, String> params = new HashMap<String, String>();
		params.put("widgetset",	"pl.koziolekweb.vaadin.guice.widgetset.MyAppWidgetSet");
		serve("/*").with(GuiceApplicationServlet.class, params);

		bind(Application.class).to(ApplicationRoot.class).in(
				ServletScopes.SESSION);

		//bind(CometService.class).to(FakeCometService.class);
		bind(CometService.class).to(IcePushCometService.class).in(ServletScopes.SESSION);
		bind(ListBookView.class).to(ListBookViewImpl.class);
		bind(BookDao.class).to(SimpleBookDao.class);
		bind(ListBookPresenter.class).to(ListBookPresenterImpl.class);

	}
}</pre>
<p>Trzeba tylko dodać parametr z nazwą naszego widgetseta do konfiguracji serwletu. Zakres sesyjny dla rzeczywistego serwisu uchroni nas przed zapchaniem łącza w przypadku kilku aktualizacji występujących na raz.</p>
<h4>Rozwinięcia twórcze</h4>
<p>Mam kilka pomysłów na twórcze rozwinięcie tego rozwiązania. Przede wszystkim można dodać kolejki by serwis pobierał nowe informacje z kolejki i w przypadku dużego natłoku wywołań metody <samp>push</samp> nie zaspamował łącza. Po drugie integracja z  GWTCanvas i tworzenie wykresów w czasie rzeczywistym. Po trzecie moja wersja JBisona, która będzie śledzić http różnych serwerów.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;title=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Del.icio.us" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;title=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do digg" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Technorati" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;title=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Stumble Upon" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;title=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do Google Bookmarks" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;t=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do FaceBook" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/&amp;title=Integracja+Vaadin+%2B+Guice+z+ICEPush" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Integracja Vaadin + Guice z ICEPush' do wykop.pl" alt="dodaj 'Integracja Vaadin + Guice z ICEPush' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/03/24/integracja-vaadin-guice-z-icepush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>V jak Vaadin rozdział 1 pre alpha 1</title>
		<link>http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/</link>
		<comments>http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 21:02:57 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Vaadin]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[scribd]]></category>
		<category><![CDATA[V jak Vaadin]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=1976</guid>
		<description><![CDATA[      
      Skupiłem się w sobie i tak oto można już przeczytać pierwszy rozdział mojej książki o Vaadin. Roboczy tytuł &#8220;V jak Vaadin&#8221;. Wersja pre alpha 1 oznacz ni mniej ni więcej, że nie jest to w żaden sposób sprawdzone. Mogą być orty, mogłem się zakałapućkać w opisach oraz, że szata graficzna jest delikatnie mówiąc o kant [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Skupiłem się w sobie i tak oto można już przeczytać pierwszy rozdział mojej książki o Vaadin. Roboczy tytuł &#8220;V jak Vaadin&#8221;. Wersja pre alpha 1 oznacz ni mniej ni więcej, że nie jest to w żaden sposób sprawdzone. Mogą być orty, mogłem się zakałapućkać w opisach oraz, że szata graficzna jest delikatnie mówiąc o kant dupy potłuc. Ale jest!</p>
<p>W tym rozdziale omawiam instalację Vaadin jako samodzielnego jara, archetypu Maven oraz jako pluginu dla Eclipse i NetBeans. </p>
<p><a title="View V jak Vaadin rozdział 1 pre alpha 1 on Scribd" href="http://www.scribd.com/doc/48180896/V-jak-Vaadin-rozdział-1-pre-alpha-1" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;">V jak Vaadin rozdział 1 pre alpha 1</a> <object id="doc_743971339977908" name="doc_743971339977908" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" ><param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"><param name="wmode" value="opaque"><param name="bgcolor" value="#ffffff"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><param name="FlashVars" value="document_id=48180896&#038;access_key=key-1inlljj23c9c1i9u5zn1&#038;page=1&#038;viewMode=list"><embed id="doc_743971339977908" name="doc_743971339977908" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=48180896&#038;access_key=key-1inlljj23c9c1i9u5zn1&#038;page=1&#038;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"></embed></object></p>
<p>Całość jest hostowana na http://www.scribd.com/</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;title=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Del.icio.us" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;title=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do digg" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Technorati" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;title=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Stumble Upon" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;title=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Google Bookmarks" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;t=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do FaceBook" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/&amp;title=V+jak+Vaadin+rozdzia%C5%82+1+pre+alpha+1" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do wykop.pl" alt="dodaj 'V jak Vaadin rozdział 1 pre alpha 1' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/02/04/v-jak-vaadin-rozdzial-1-pre-alpha-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami</title>
		<link>http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/</link>
		<comments>http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 18:11:23 +0000</pubDate>
		<dc:creator>Koziolek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[chakierowanie]]></category>

		<guid isPermaLink="false">http://koziolekweb.pl/?p=1959</guid>
		<description><![CDATA[      
      Pewien czas temu natknąłem się na tekst poświęcony sposobom komunikacji klient-bank w mBanku. Autorka słusznie wykazuje, że obsługa w mBanku jest co najmniej upierdliwa, a narzędzie jakim jest korespondencja wewnętrzna nie jest odpowiednio wykorzystane, ale też wysuwa niesłuszną moim zdaniem tezę co do komunikacji za pomocą emaila. Specjalnie dla niej króciutka prezentacja możliwości manipulowania nagłówkami [...]]]></description>
			<content:encoded><![CDATA[      
      <p>Pewien czas temu natknąłem się na <a href="http://betweenblankpages.wordpress.com/2011/01/13/jest-sposob-na-bank/">tekst</a> poświęcony sposobom komunikacji klient-bank w mBanku. Autorka słusznie wykazuje, że obsługa w mBanku jest co najmniej upierdliwa, a narzędzie jakim jest korespondencja wewnętrzna nie jest odpowiednio wykorzystane, ale też wysuwa niesłuszną moim zdaniem tezę co do komunikacji za pomocą emaila.<br />
Specjalnie dla niej króciutka prezentacja możliwości manipulowania nagłówkami oraz kilku sztuczek &#8220;livehacking&#8221; i &#8220;socialhacking&#8221;. Całość w Javie.</p>
<h4>Przygotowania</h4>
<p>W pierwszej kolejności instalujemy sobie serwer poczty. Ja wybrałem postfixa.</p>
<p class="listing">Listing 1. instalacja Postfixa</p>
<pre class="bash" name="code">
$ sudo apt-get install postfix
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
Sugerowane pakiety:
  procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin resolvconf postfix-cdb
Zostaną zainstalowane następujące NOWE pakiety:
  postfix
0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 0 nieaktualizowanych.
Konieczne pobranie 1321kB archiwów.
Po tej operacji zostanie dodatkowo użyte 3273kB miejsca na dysku.
Pob: 1 http://pl.archive.ubuntu.com/ubuntu/ lucid/main postfix 2.7.0-1 [1321kB]
Pobrano 1321kB w 1s (901kB/s)
Prekonfiguracja pakietów ...
Zaznaczenie poprzednio niezaznaczonego pakietu postfix.
(Odczytywanie bazy danych ... 347594 plików i katalogów obecnie zainstalowanych.)
Rozpakowanie postfix (z .../postfix_2.7.0-1_i386.deb) ...
Przetwarzanie wyzwalaczy dla ureadahead...
ureadahead will be reprofiled on next reboot
Przetwarzanie wyzwalaczy dla ufw...
Przetwarzanie wyzwalaczy dla man-db...
Konfigurowanie postfix (2.7.0-1) ...
Dodawanie grupy `postfix' (GID 131)...
Gotowe.
Dodawanie użytkownika systemowego `postfix' (UID 126)...
Dodawanie nowego użytkownika `postfix' (UID 126) w grupie `postfix'...
Nie utworzono katalogu domowego `/var/spool/postfix'.
Creating /etc/postfix/dynamicmaps.cf
Adding tcp map entry to /etc/postfix/dynamicmaps.cf
Dodawanie grupy `postdrop' (GID 132)...
Gotowe.
setting myhostname: koziolek-desktop
setting alias maps
setting alias database
mailname is not a fully qualified domain name.  Not changing /etc/mailname.
setting destinations: koziolek-desktop, localhost.localdomain, , localhost
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all
/etc/aliases does not exist, creating it.
WARNING: /etc/aliases exists, but does not have a root alias.

Postfix is now set up with a default configuration.  If you need to make
changes, edit
/etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

Running newaliases
 * Stopping Postfix Mail Transport Agent postfix                                                                                                      [ OK ]
 * Starting Postfix Mail Transport Agent postfix                                                                                                      [ OK ] 

Przetwarzanie wyzwalaczy dla libc-bin...
ldconfig deferred processing now taking place
</pre>
<p>I tyle. W trakcie instalacji zostaniemy poproszeni o podanie nazwy domeny, ale serwer posłuży nam tylko jako punkt zaczepienia do sieci i domena nie jest istotna.<br />
Następnie tworzymy za pomocą mavena projekt java:</p>
<p class="listing">Listing 2. <samp>pom.xml</samp></p>
<pre class="xml" name="code">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>pl.koziolekweb.tutorial</groupId>
	<artifactId>mail-hacking</artifactId>
	<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

	<name>mail-hacking</name>
	<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<build>
<plugins>
<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<suiteXmlFiles>
						<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
					</suiteXmlFiles>
				</configuration>
			</plugin>
<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.8</version>
				<configuration>
					<downloadSources>true</downloadSources>
					<downloadJavaDocs>true</downloadJavaDocs>
					<workspace>./</workspace>
				</configuration>
				<executions>
					<execution>
						<id>eclipse</id>
<phase>clean</phase>
						<goals>
							<goal>clean</goal>
							<goal>eclipse</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>LATEST</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<version>1.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4</version>
		</dependency>
	</dependencies>
</project>
</pre>
<p>jako zależność dodajemy <samp>javax.mail</samp> i podpinamy do Eclipse.</p>
<h4>Programowanie</h4>
<h5>Teoria</h5>
<p>W uproszczeniu każda wiadomość email składa się z nagłówków i treści &#8211; ciała. Treść wiadomo zawiera treść. Znacznie interesujące są dla nas nagłówki. Zawierają one informacje kontrolne i sterujące takie jak nadawca, odbiorca, odbiorcy, listy CC i BCC, załączniki, ale też nagłówek Sender, który informuje o tym kto technicznie nadał wiadomość (zawiera informacje o użytkowniku serwera poczty) oraz Reply-To, który wskazuje do kogo będzie wysyłana odpowiedź.</p>
<h5>Socialhaking</h5>
<p>Kevin Mitnick esencję przedstawionej tu metody zawarł w tytule swojej książki &#8220;Sztuka podstępu. Łamałem ludzi, nie hasła&#8221;. Cała sztuka opiera się o pewne zachowania użytkownika. W zasadzie o jedno&#8230; czy naciskają &#8220;odpowiedz&#8221; patrzysz do kogo idzie odpowiedź i czy adres email zgadza się z adresem nadawcy? Coś czuję, że od dziś zaczniesz hehehe&#8230;.</p>
<h5>Praktyka</h5>
<p>Do &#8220;chakierowania&#8221; użyję prostego programu napisanego w javie z wykorzystaniem <a href="http://www.oracle.com/technetwork/java/index-jsp-139225.html">Java Mail API</a>.</p>
<p class="listing">Listing 3. Nasze super narzędzie&#8230;</p>
<pre class="java" name="code">
package pl.koziolekweb.tutorial;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class App {
	public static void main(String[] args) throws AddressException,
			MessagingException {
		String from = "Jaś Kowalski <jas@kowalski.pl>";
		String to = "jełop@mójBank.pl";
		String replyTo = "devil@evil.hell";
		Properties props = System.getProperties();
		Session session = Session.getDefaultInstance(props, null);
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(from));
		message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
		message.addHeader("Reply-To", replyTo);
		message.addHeader("Content-Type", " text/plain; charset=UTF-8");
		message.setSubject("Pytanie");
		message.setText("Czy wykonano już przelew?");
		Transport.send(message);
	}
}
</pre>
<p>sprawdź samemu zmieniając adres TO na swojego maila. </p>
<p>Co ciekawe wiele klientów email nie sprawdza nagłówków i trzeba samodzielnie sprawdzić czy to gdzie wysyłamy zgodne jest z tym skąd dostajemy&#8230;</p>
<h4>Schemat ataku</h4>
<p>Schemat ataku jest tu bajecznie prosty. Atakujący wysyła maila z &#8220;lewymi&#8221; nagłówkami w którym pyta o duperelę. Warto by była to rzeczywista duperela np. czy wysłano już zamówioną kartę&#8230; Następnie w ramach konwersacji mailowej pytamy się czy osoba z obsługi nie była by tak miła i nie pomogła wykonać jeszcze jedną drobną operację&#8230; zmianę adresu korespondencyjnego&#8230; prawda, że duperela. Następnie zmuszamy ofiarę do zablokowania karty i zgłoszenia zapotrzebowania na nową&#8230; zgadnijcie gdzie trafi karta&#8230; Wraz z PINem w osobnym liście&#8230;<br />
Oczywiście musimy trafić na bankiera idiotę, ale nie jest to trudne&#8230;</p>
<h4>Schematy obrony</h4>
<h5>Podpis cyfrowy</h5>
<p>Prosty i stosunkowo tani sposób obrony. Niekwalifikowany podpis można wyrobić sobie samemu. Bankowi przesyłamy klucz publiczny, a wiadomości podpisujemy z wykorzystaniem klucza prywatnego. Podpis kwalifikowany jest droższy, ale ma tą dodatkową zaletę, że można go wykorzystać jeszcze w kilku innych celach oraz, że daje możliwość wysyłania wiadomości z dowolnego komputera wyposażonego w czytnik kart chipowych (w teorii).</p>
<h5>Weryfikacja nagłówków</h5>
<p>Po stronie banku serwer poczty sprawdza czy nagłówek From i Reply-To są takie same. Metoda dobra o tyle, że klient nie musi nic robić. Wadą jest jej stosunkowo łatwe ominięcie poprzez błędy serwerów pocztowych. </p>
<h5>Wewnętrzny system email</h5>
<p>Postfix, ale też i inne serwery pozwalają na konfigurację w ten sposób, że cały ruch będzie odbywał się wewnątrz danej instancji serwera. Klient wykorzystuje wtedy specjalne bankowe konto mailowe. Metoda całkiem dobra, ale równie dobrze można wykorzystać jakiś wewnętrzny system wiadomości.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Dodaj do </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;title=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Del.icio.us"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Del.icio.us" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;title=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do digg"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do digg" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Technorati"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Technorati" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;title=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Stumble Upon"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Stumble Upon" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;title=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Google Bookmarks"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/google.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Google Bookmarks" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;t=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do FaceBook"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do FaceBook" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wykop.pl/dodaj?url=http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/&amp;title=Chwila+z+Java+Mail%2C+czyli+dlaczego+maile+nie+s%C5%82u%C5%BC%C4%85+do+rozm%C3%B3w+z+bankami" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do wykop.pl"><img src="http://koziolekweb.pl/wp-content/plugins/social-bookmarking-reloaded/wykop.png" title="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do wykop.pl" alt="dodaj 'Chwila z Java Mail, czyli dlaczego maile nie służą do rozmów z bankami' do wykop.pl" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://koziolekweb.pl/2011/01/15/chwila-z-java-mail-czyli-dlaczego-maile-nie-sluza-do-rozmow-z-bankami/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

