<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>My Ordinary Thoughts &#187; jboss as</title>
	<atom:link href="http://ordinarythoughts.org/tag/jboss-as/feed/" rel="self" type="application/rss+xml" />
	<link>http://ordinarythoughts.org</link>
	<description>Thoughts about Java, Ruby, Cloud, Girls...</description>
	<lastBuildDate>Fri, 15 Apr 2011 08:51:50 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ordinarythoughts.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/627934b9ec505798cd9632bc79811c4d?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>My Ordinary Thoughts &#187; jboss as</title>
		<link>http://ordinarythoughts.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ordinarythoughts.org/osd.xml" title="My Ordinary Thoughts" />
	<atom:link rel='hub' href='http://ordinarythoughts.org/?pushpress=hub'/>
		<item>
		<title>JBoss AS 5.1.0.GA wydany!</title>
		<link>http://ordinarythoughts.org/2009/05/28/jboss-as-5-1-0-ga-wydany/</link>
		<comments>http://ordinarythoughts.org/2009/05/28/jboss-as-5-1-0-ga-wydany/#comments</comments>
		<pubDate>Thu, 28 May 2009 10:46:19 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://ordinarythoughts.org/?p=539</guid>
		<description><![CDATA[Pewnie wielu osobom mogło to umknąć, więc postanowiłem wszystkich oficjalnie poinformować. Kilka dni temu została wydana kolejna stabilna wersja serwera aplikacji JBoss AS. Co mamy tym razem nowego? Oczywiście oprócz wielu poprawek mamy 3 nowe rzeczy: konsola webowa, nowa implementacja Web Beans, usługa farmy. JBoss AS otrzymał konsolę graficzną do zarządzania serwerem — Embedded JOPR. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=539&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pewnie wielu osobom mogło to umknąć, więc postanowiłem wszystkich oficjalnie poinformować. Kilka dni temu została wydana kolejna stabilna wersja serwera aplikacji <a href="http://www.jboss.org/jbossas/">JBoss AS</a>. Co mamy tym razem nowego? Oczywiście oprócz wielu poprawek mamy 3 nowe rzeczy:</p>
<ul>
<li>konsola webowa,</li>
<li>nowa implementacja <a href="http://seamframework.org/WebBeans">Web Beans</a>,</li>
<li>usługa farmy.</li>
</ul>
<p>JBoss AS otrzymał konsolę graficzną do zarządzania serwerem — <a href="http://jboss.org/embjopr/">Embedded JOPR</a>. Nie posiada ona ogromnych możliwości, jednak do podstawowego zarządzania jest przydatna. Należy wspomnieć, że jest to okrojona wersja narzędzia <a href="http://www.jboss.org/jopr/">JOPR</a> służącego do zarządzania i monitorowania m.in. serwerów JBoss AS (ale nie tylko!).</p>
<p>Wróciła również usługa farmy która pozwala na bezproblemowe uruchamianie swoich serwerze w klastrze serwerów JBoss (skopiuj aplikację do jednego węzła, aplikacja zostanie rozpropagowana po klastrze automatycznie).</p>
<p>Więcej na temat tego wydania można poczytać w <a href="http://www.jboss.org/jbossas/docs/Release_Notes/510GA/readme.html">informacjach o wydaniu</a> (obszerne!). Cóż, pozostaje mi tylko zachęcić do testów!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/539/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/539/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/539/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=539&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2009/05/28/jboss-as-5-1-0-ga-wydany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>
	</item>
		<item>
		<title>Zmiana pracy</title>
		<link>http://ordinarythoughts.org/2009/01/31/zmiana-pracy/</link>
		<comments>http://ordinarythoughts.org/2009/01/31/zmiana-pracy/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 10:45:31 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[other]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[jboss as]]></category>
		<category><![CDATA[jboss cloud]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[ot]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=483</guid>
		<description><![CDATA[Trochę było cicho przez ostatni miesiąc, ale był ku temu dobry powód. Zgadzam się z pierwszą tezą Boba McWhirtera: &#8220;Employment is good&#8220;. Zmieniłem pracę. Pracuję w JBoss, a division of Red Hat. Wspólnie z Bobem będziemy starali się stworzyć możliwie najprostsze w użyciu środowisko do klastrowania serwera aplikacji JBoss AS dla różnych platform wirtualizacyjnych: KVM, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=483&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Trochę było cicho przez ostatni miesiąc, ale był ku temu dobry powód. Zgadzam się z pierwszą <a href="http://oddthesis.org/theses">tezą</a> Boba McWhirtera: &#8220;<a href="http://oddthesis.org/theses/employment-is-good">Employment is good</a>&#8220;. Zmieniłem pracę. Pracuję w JBoss, a division of Red Hat. Wspólnie z Bobem będziemy starali się stworzyć możliwie najprostsze w użyciu środowisko do klastrowania serwera aplikacji JBoss AS dla różnych platform wirtualizacyjnych: KVM, VMware, EC2, kto wie co jeszcze :) Naszym celem jest klaster gotowy do użycia, prosto z pudełka, bez zbędnych fajerwerków, po prostu działający. Co Ty na nim uruchomisz — Twoja sprawa, my dostarczymy Ci stabilne środowisko. Szczegółowe informacje będą pojawiały się na bieżąco na <a href="http://oddthesis.org/">stronie skupiającej projekty</a> pod kierownictwem Boba, gdzie wkrótce zacznę pisać artykuły na temat JBoss Cloud.</p>
<p>Dowiedz się również więcej na temat JBoss Rails (tak tak, aplikacje napisane w Rails działają na JBoss AS) i JBoss Cloud z <a href="http://java.dzone.com/articles/odd-theses-an-interview-with-b">wywiadu na DZone</a>!</p>
<p>Cóż więcej mogę dodać — trzymajcie kciuki za nas!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/483/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=483&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2009/01/31/zmiana-pracy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss Cloud</title>
		<link>http://ordinarythoughts.org/2009/01/01/jboss-cloud/</link>
		<comments>http://ordinarythoughts.org/2009/01/01/jboss-cloud/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 17:00:51 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[jboss as]]></category>
		<category><![CDATA[jboss cloud]]></category>
		<category><![CDATA[mod_cluster]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=416</guid>
		<description><![CDATA[Happy New Year! 2009 will be very busy for me&#8230; Yes, I feel it already. But that&#8217;s not subject of this post, back to the real topic. While surfing the web and searching for informations about JBoss&#8217; mod_cluster I have found a post at Bob McWhirter&#8217;s blog (check out his theses :)). I have figured [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=416&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Happy New Year! 2009 will be very busy for me&#8230; Yes, I feel it already. But that&#8217;s not subject of this post, back to the real topic.</p>
<p>While surfing the web and searching for informations about JBoss&#8217; <a href="http://www.jboss.org/mod_cluster/">mod_cluster</a> I have found a <a href="http://oddthesis.org/posts/2008-12-jboss-and-mod_cluster">post</a> at <a href="http://oddthesis.org/">Bob McWhirter&#8217;s blog</a> (check out his <a href="http://oddthesis.org/theses">theses</a> :)). I have figured out, that Bob has recently started a project called <a href="http://oddthesis.org/theses/jboss-cloud/projects/jboss-cloud">JBoss Cloud</a>. Word <em>cloud</em> (same as <em>green</em> and <em>social</em>&#8230;) is very vogue last moths, so I&#8217;ve started digging this topic, especially therefore I&#8217;m a fan of <a href="http://www.jboss.org/">JBoss</a>.</p>
<p><img class="size-full wp-image-425 alignright" title="JBoss Cloud" src="http://javavsme.files.wordpress.com/2009/01/jboss_cloud.png?w=640" alt="JBoss Cloud"   /></p>
<p>What is it? In a few words it&#8217;s a set of scripts for creating JBoss AS appliances. You can run them, for example on <a href="http://aws.amazon.com/ec2/">Amazon&#8217;s EC2</a> or any other virtualized (or not) environment (eg. VMware). Many useful informations about JBoss Cloud (and JBoss Rails — another project from Bob) are enclosed in a great (no, that&#8217;s not irony) <a href="http://oddthesis.org/posts/2008-11-overview-presentation">presentation</a>. I highly recommend it!</p>
<p>JBoss Cloud is primarily designed to be a deployment tool / platform for JBoss Rails, but why not use it as a completely standalone project for clustered Java EE deployment? I&#8217;m not familiar with Rails (and Ruby too) — I would see JBoss Cloud as a big help for poeople that are deploying corporate apps written in JBoss Seam (my personal favourite).</p>
<p>I think, that a cool feature could be a user-friendly monitoring (management?) interface (web-app written in seam?). Maybe I could help with it? Will see.</p>
<p>Interested in JBoss Cloud? Want to learn more? Simply track <a href="http://oddthesis.org/">Bob&#8217;s blog</a> and join #jboss-cloud at freenode to ask him about this project! You can also grab the <a href="http://github.com/bobmcwhirter/jboss-cloud">sources</a> from <a href="http://github.com/">GitHub</a> and build yourself appliances or RPM&#8217;s. So, don&#8217;t be lazy — get involved! ;) I will keep my eyes on this project!</p>
<p>P.S. Primarly language of this blog is polish and most of posts will be still in polish. Just sometimes I will drop one or two notes in English to practice my poor language skills. So, be tolerant, please :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=416&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2009/01/01/jboss-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2009/01/jboss_cloud.png" medium="image">
			<media:title type="html">JBoss Cloud</media:title>
		</media:content>
	</item>
		<item>
		<title>mod_cluster — nowe spojrzenie na load balancery</title>
		<link>http://ordinarythoughts.org/2008/12/27/mod_cluster-nowe-spojrzenie-na-load-balancery/</link>
		<comments>http://ordinarythoughts.org/2008/12/27/mod_cluster-nowe-spojrzenie-na-load-balancery/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 17:19:38 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[jboss as]]></category>
		<category><![CDATA[mod_cluster]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=182</guid>
		<description><![CDATA[Dostępne rozwiązania równoważenia obciążenia dla aplikacji napisanych w Javie praktycznie ograniczają się do kilku modułów do serwera HTTP Apache. Nie, nie twierdzę, że rozwiązanie jest złe! Powiedziałbym wręcz przeciwnie — serwer ten ma ugruntowaną pozycję na rynku, jest stabilny, a co najważniejsze — jest darmowy! Są oczywiście rozwiązania sprzętowe (np. urządzenia oferowane przez loadbalancer.org), jednak, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=182&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dostępne rozwiązania równoważenia obciążenia dla aplikacji napisanych w Javie praktycznie ograniczają się do kilku modułów do serwera HTTP Apache. Nie, nie twierdzę, że rozwiązanie jest złe! Powiedziałbym wręcz przeciwnie — serwer ten ma ugruntowaną pozycję na rynku, jest stabilny, a co najważniejsze — jest darmowy! Są oczywiście rozwiązania sprzętowe (np. urządzenia oferowane przez <a href="http://loadbalancer.org/">loadbalancer.org</a>), jednak, co tu dużo mówić — ich cena jest dosyć zniechęcająca&#8230;</p>
<h3>Jak to było do tej pory?</h3>
<p>Podstawowym modułem serwera Apache obsługującym połączenia na linii Apache — serwer aplikacji był (a w zasadzie nadal jest) moduł <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"><strong><code>mod_proxy</code></strong></a> (wraz z modułami zależnymi przeznaczonymi dla konkretnego protokołu np. AJP, HTTP). Jego konfiguracja jest naprawdę bardzo prosta. Mając raz utworzony plik konfiguracyjny można go wykorzystać w innych instalacjach zmieniając tylko potrzebne opcje.  Dodatkowo, jeżeli skonfiguruje się moduł <strong><code>mod_proxy_balancer</code></strong> (domyślny sposób równoważenia obciążenia w serwerze Apache — <a href="http://javavsme.wordpress.com/2008/12/02/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-2-architektury-klastrow/">pisałem o tym  wcześniej</a>), otrzymujemy możliwość zdefiniowania wielu serwerów aplikacji, jak i zasad równoważenia obciążenia między nimi. Po szczegóły odsyłam do (krótkiej, ale konkretnej) <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass">dokumentacji</a>. Dodatkowo w Internecie można znaleźć tony instrukcji w jaki sposób uruchomić load balancer na podstawie serwera Apache na wybranej dystrybucji Linuksa (uruchamia to ktoś na Windowsie?!).  Rozwiązanie oparte na <strong><code>mod_proxy</code></strong> i <strong><code>mod_proxy_balancer</code></strong> jest naprawdę dobre, ale <em>głupie</em>. Moduły nie wiedzą nic o stanie serwerów aplikacji poza tym, czy działają :) Na ogół takie postawienie sytuacji powinno wystarczyć. Jednak w przypadku gdybyśmy chcieli obciążać tylko jeden serwer, a drugi traktować jako dodatkową moc obliczeniową wykorzystywaną tylko i wyłącznie w przypadku, gdy pierwszy serwer nie jest w stanie obsłużyć wszystkich zapytań, rozwiązanie oparte na <strong><code>mod_proxy_balancer</code></strong> nie będzie pomocne.</p>
<h3>Z pomocą nadchodzi <code>mod_cluster</code></h3>
<p>Od początku listopada tego roku na stronach <a href="http://www.jboss.org/">społeczności JBossa</a> udostępniony został projekt pod kierownictwem <a href="http://people.apache.org/~jfclere/">Jean-Frederic Clerea</a> o dumnej nazwie <a href="http://www.jboss.org/mod_cluster/"><strong><code>mod_cluster</code></strong></a>. Oprócz niego w projekcie uczestniczą <a href="http://bstansberry.wordpress.com/">Brian Stansberry</a> oraz <a href="http://www.jboss.org/community/people/pferraro">Paul Ferraro</a>.  Zadaniem <strong><code>mod_cluster</code></strong>, zupełnie tak jak w przypadku <strong><code>mod_proxy</code></strong>, jest przekierowywanie zapytań z serwera Apache do serwerów aplikacji. W takim razie, czym różnią się te rozwiązania? W odróżnieniu od <strong><code>mod_proxy</code></strong>, w przypadku <strong><code>mod_cluster</code></strong> komunikacja jest dwukierunkowa. Serwer aplikacji dodatkowo nawiązuje połączenie z serwerem Apache. Właśnie to połączenie odpowiada za inteligencję tego rozwiązania. Za jego pomocą przekazywane są informacje z cyklem życia aplikacji, jak również inne informacje potrzebne do zarządzania load balancerem (np. aktualne obciążenie serwera aplikacji). Informacje przesyłane są za pomocą protokołu <a href="http://www.jboss.org/community/docs/DOC-11425">Mod-Cluster Management Protocol</a> (MCMP), który w rzeczywistości jest zbiorem metod protokołu HTTP. Co ciekawe — nie jest wymagane utworzenie nowego gniazda dla tych połączeń — serwer aplikacji komunikuje się z serwerem Apache na porcie, na którym jest on skonfigurowany!  W rzeczywistości <strong><code>mod_cluster</code></strong> nie jest pojedynczym modułem. Jest to raczej zbiór następujących modułów: <strong><code>mod_slotmem</code></strong>, <strong><code>mod_manager</code></strong>, <strong><code>mod_proxy_cluster</code></strong> oraz <strong><code>mod_advertise</code></strong>. Duża część kodu źródłowego jest oparta na aktualnych implementacjach <strong><code>mod_proxy</code></strong>.  Co ciekawe, to konfiguracja po stronie serwera aplikacji odpowiedzialna jest za mapowanie odpowiednich adresów do aplikacji. Szczególny wpływ ma na to konfiguracja domeny i ścieżki danej aplikacji na serwerze aplikacji. Dane te są przesyłane za pomocą wiadomości <a href="http://www.jboss.org/community/docs/DOC-11427">CONFIG</a> do wszystkich load balancerów.  Jeżeli przychodzące do serwera Apache zapytanie dla wybranej domeny i ścieżki zostanie odnalezione wśród wpisów posiadanych przez moduł <strong><code>mod_cluster</code></strong>, zapytanie to zostanie automatycznie przekierowane do wybranego węzła.</p>
<h4>Wymagania</h4>
<p>Aby móc uruchomić <strong><code>mod_cluster</code></strong> potrzebny jest serwer Apache w wersji powyżej 2.2.8. Niestety aktualna wersja httpd dostępna dla systemu Red Hat / CentOS 5.2 oznaczona jest numerem 2.2.3. Pozostaje skompilować samemu odpowiednie moduły z dostępnego kodu źródłowego, gdy chcemy wykorzystać standardową instalację demona httpd. Należy zwrócić uwagę, że deweloperzy <a href="http://www.jboss.org/mod_cluster/downloads/">przygotowali odpowiednie paczki</a> dla wielu systemów operacyjnych zawierające całą potrzebną instalację (łącznie z serwerem Apache!). Wszystko jest kompletne, skonfigurowane i gotowe do użytku! Można to lepiej zrobić?</p>
<p>Do uruchomienia <strong><code>mod_cluster</code></strong> potrzebny jest również odpowiedni kontener. W grę wchodzi JBoss Application Server 5.0.0+, Apache Tomcat, oraz JBoss Web 2.1.1+. Niestety nie doszukałem się informacji z jakimi wersjami Apache działa <strong><code>mod_cluster</code></strong>.</p>
<h3>Najważniejsze cechy <code>mod_cluster</code></h3>
<p>Rozwiązanie JBossa wprowadza wiele usprawnień wpływających na konfigurację i zarządzanie klastrem. Oto niektóre z nich.</p>
<h4>Dynamiczna konfiguracja workerów (a po polsku?)</h4>
<p>Do tej pory to load balancer musiał wiedzieć jakie serwery aplikacji wchodzą w skład klastra. Powodowało to potrzebę rekonfiguracji load balancerów przy dodawaniu nowego węzła w klastrze. Od tej pory, przy użyci <strong><code>mod_cluster</code></strong>, to serwery aplikacji będą posiadały informację o dostępnych load balancerach. Informacja ta może być umieszczona na stałe w konfiguracji serwerów aplikacji jako lista lub <strong>mogą one zostać wykryte automatycznie</strong> przez serwer aplikacji przy użyciu muticastu za pośrednictwem mechanizmu <strong>advertise</strong>. W środowiskach, w których nie można użyć multicastu (np. VMware) należy skonfigurować ręcznie listę dostępnych load balancerów.</p>
<h4>Współczynnik obciążenia obliczany po stronie serwerów aplikacyjnych</h4>
<p>Współczynniki rozkładu obciążenia w przypadku <strong><code>mod_proxy_balancer</code></strong> (jak i w starym <strong><code>mod_jk</code></strong>) były umieszczane na stałe w konfiguracji tych modułów. Statyczna konfiguracja mogła doprowadzić do przeciążenia jednego serwera, gdy inne w klastrze nie były obciążone. Oczywiście zależało to od poprawnego zdefiniowania współczynników. W przypadku <strong><code>mod_cluster</code></strong> problem ten został wyeliminowany. Współczynniki są obliczane po stronie serwerów aplikacji a następnie przekazywane do load balancera, który znając współczynniki wszystkich węzłów w klastrze może efektywnie zarządzać zapytaniami w zależności od obciążenia serwerów.</p>
<p>Należy dodać, że rozwiązanie to sugeruje się informacjami otrzymanymi od serwerów — po stronie serwera http nie ma obliczania współczynników!</p>
<h4>Pełna kontrola cyklu życia aplikacji</h4>
<p>Rozwiązania dostępne obecnie na rynku w postaci modułów serwera Apache nie potrafią poprawnie obsłużyć takich zdarzeń jak wdrożenie, czy usunięcie aplikacji z serwera. Odwołanie się do usuniętej z serwera aplikacji powoduje po prostu wyświetlenie błędu 404. W przypadku <strong><code>mod_cluster</code></strong> błędy te zostały wyeliminowane, ponieważ informacje o cyklu życia aplikacji są przesyłane do load balancera.</p>
<h3>Architektura <code>mod_cluster</code></h3>
<p>Architekturę <strong><code>mod_cluster</code></strong> można podzielić na dwie części. Z jednej strony znajdują się usługi uruchomione na serwerze http, z drugiej strony usługi uruchomione na serwerze aplikacji. Po stronie serwera http uruchomiony jest zestaw modułów wspomnianych wcześniej, natomiast po stronie serwera aplikacji uruchomiona jest usługa <strong><code>ModClusterService</code></strong>. Usługa ta odpowiedzialna jest za komunikację z dostępnymi load balancerami. W szczególności dotyczy to informowania ich o stanie serwera i aplikacji na nim uruchomionych.  Szczegółowe informacje można znaleźć na <a href="https://www.jboss.org/community/docs/DOC-11431">stronach wiki</a> projektu.</p>
<p>Wyróżnić można dwa tryby pracy klastra: z klastrowaniem lub bez.</p>
<h4>Konfiguracja bez klastrowania</h4>
<p>W tym trybie serwery aplikacji nie wymieniają danych między sobą.</p>
<div id="attachment_395" class="wp-caption alignright" style="width: 310px"><a href="http://javavsme.files.wordpress.com/2008/12/non_clustered.png"><img class="size-medium wp-image-395" title="Konfiguracja bez klastrowania" src="http://javavsme.files.wordpress.com/2008/12/non_clustered.png?w=300&#038;h=179" alt="Konfiguracja bez klastrowania" width="300" height="179" /></a><p class="wp-caption-text">Konfiguracja bez klastrowania</p></div>
<p>Oznacza to, że dwie, te same, aplikacje uruchomione na dwóch serwerach nie będą wiedziały o swoim istnieniu, oraz żadne dane nie będą replikowane do innych serwerów. Klient, po awarii jednego z serwerów i przełączeniu do innego, straci wszystkie dane znajdujące się aktualnie sesji, będzie się musiał również ponownie zalogować.  Oczywiście przesyłane są informacje do serwera http odpowiedzialne za rejestrację serwera apliakcji w load balancerze, czy związane z cyklem życia aplikacji. Natomiast współczynnik obciążenia przesyłany przez serwer aplikacji będzie miał wartość obliczaną (lub ustalaną odgórnie) tylko dla tego konkretnego serwera. Współczynnik ten będzie wpływał na działanie całego systemu tak samo jak wartość <strong><code>lbfactor</code></strong> w pliku konfiguracyjnym <strong><code>workers.properties</code></strong> modułu <strong><code>mod_jk</code></strong>.</p>
<h4>Konfiguracja z klastrowaniem</h4>
<p>W tym trybie serwery aplikacji formułują klaster, a dane są wymieniane między węzłami w klastrze.</p>
<div id="attachment_404" class="wp-caption alignright" style="width: 310px"><a href="http://javavsme.files.wordpress.com/2008/12/clustered1.png"><img class="size-medium wp-image-404" title="Konfiguracja z klastrowaniem" src="http://javavsme.files.wordpress.com/2008/12/clustered1.png?w=300&#038;h=179" alt="Konfiguracja z klastrowaniem" width="300" height="179" /></a><p class="wp-caption-text">Konfiguracja z klastrowaniem</p></div>
<p>Wymieniane są również informacje o aktualnym stanie serwerów pomiędzy instancjami. Jedna z usług <strong><code>ModClusterService</code></strong> będzie zawierała komponent <strong><code>HASingleton</code></strong> odpowiedzialny za zbieranie informacji o stanie wszystkich węzłów. Następnie dane te są poddawane analizie, a wyniki w postaci czynnika obciążenia dostarczane są wszystkim węzłom w klastrze oraz dostępnym load balancerom.</p>
<h3>Instalacja</h3>
<p>Należy skonfigurować odpowiednio serwer Apache i aplikacji. Bardzo dobra dokumentacja instalacji znajduje się na stronach <strong><code>mod_cluster</code></strong>, zarówno jeżeli chodzi o konfigurację <a href="http://www.jboss.org/mod_cluster/native/config.html">serwera Apache</a> jak i <a href="http://www.jboss.org/mod_cluster/java/config.html">serwera aplikacji</a>.</p>
<h3>Podsumowanie</h3>
<p>Pewnie parę osób zarzuci mi, że jestem przesadnie podekscytowany tym rozwiązaniem. Być może, ale nie ulega żadnej wątpliwości, że <strong><code>mod_cluster</code></strong> zmieni całkowicie podejście do programowych load balancerów. Polecam przyjrzenie się temu projektowi!  Według <a href="http://www.jboss.org/mod_cluster/roadmap.html">mapy wydań</a> możemy się spodziewać w najbliższym czasie pierwszego, stabilnego wydania <strong><code>mod_cluster</code></strong>, a więc nie ma na co czekać, tylko uruchamiać. W końcu każdy chce mieć stabilny i szybki system. Co? Może nie?</p>
<h4>Warto odwiedzić</h4>
<ul>
<li><a href="http://www.jboss.org/mod_cluster/">Strona domowa projektu</a></li>
<li><a href="https://jira.jboss.org/jira/browse/MODCLUSTER">Bug tracker (JIRA)</a></li>
<li><a href="http://www.jboss.com/index.html?module=bb&amp;op=viewforum&amp;f=288">Forum użytkowników</a></li>
<li>Krótki <a href="http://oddthesis.org/posts/2008-12-jboss-and-mod_cluster">post Boba McWhirtera</a> opisujący konfigurację <strong><code>mod_cluster</code></strong> w środowisku pozbawionym multicastu (VMware)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=182&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/12/27/mod_cluster-nowe-spojrzenie-na-load-balancery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/non_clustered.png?w=300" medium="image">
			<media:title type="html">Konfiguracja bez klastrowania</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/clustered1.png?w=300" medium="image">
			<media:title type="html">Konfiguracja z klastrowaniem</media:title>
		</media:content>
	</item>
		<item>
		<title>Migracja aplikacji z JBoss AS 4.2.3 do JBoss AS 5</title>
		<link>http://ordinarythoughts.org/2008/12/15/migracja-aplikacji-z-jboss-as-423-do-jboss-as-5/</link>
		<comments>http://ordinarythoughts.org/2008/12/15/migracja-aplikacji-z-jboss-as-423-do-jboss-as-5/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 18:22:25 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=163</guid>
		<description><![CDATA[Do celów edukacyjnych posiadam napisaną aplikację we frameworku JBoss Seam. Niedawno pisałem, że ukazała się nowa wersja serwera aplikacji JBoss, dlatego też postanowiłem spróbować uruchomić mój poligon doświadczalny na nowym serwerze. Oto konfiguracja mojej aplikacji: EJB 3.0, JavaBeans, JPA, JSF JBoss Seam 2.1.0.SP1 RichFaces 3.2.2.GA Hibernate 3.2.4.sp1 (dialekt PostgreSQL) Używane przeze mnie IDE to Eclipse [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=163&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Do celów edukacyjnych posiadam napisaną aplikację we frameworku JBoss Seam. <a href="http://javavsme.wordpress.com/2008/12/05/jboss-application-server-50-ga-do-pobrania/">Niedawno pisałem</a>, że ukazała się <a href="http://javavsme.wordpress.com/2008/12/05/jboss-application-server-50-ga-do-pobrania/">nowa wersja serwera aplikacji JBoss</a>, dlatego też postanowiłem spróbować uruchomić mój poligon doświadczalny na nowym serwerze. Oto konfiguracja mojej aplikacji:</p>
<ul>
<li>EJB 3.0, JavaBeans, JPA, JSF</li>
<li>JBoss Seam 2.1.0.SP1</li>
<li>RichFaces 3.2.2.GA</li>
<li>Hibernate 3.2.4.sp1 (dialekt PostgreSQL)</li>
</ul>
<p>Używane przeze mnie IDE to <a href="http://www.eclipse.org/">Eclipse Ganymede</a>, wraz z zestawem wtyczek <a href="http://www.jboss.org/tools/">JBoss Tools</a>.  Połączenie to stanowi bardzo dobre środowisko do tworzenia aplikacji we frameworku JBoss Seam. Aplikacje uruchamiam <em>na gorąco</em> na serwerze JBoss AS za pomocą skryptu Anta — nowe pliki są kompilowane i kopiowane do katalogu <strong><code>deploy</code></strong> serwera JBoss. Na tym etapie nie przewiduję żadnych zmian w konfiguracji.</p>
<p>Po podmianie ścieżki do nowego serwera spróbowałem uruchomić aplikację  (a nóż widelec&#8230;). Jak można było łatwo przewidzieć — nie uruchomiła się.</p>
<p>Moja aplikacja używa <a href="http://javavsme.wordpress.com/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/">cacheowania encji</a>. Okazało się, że w tym temacie zaszły duże zmiany w nowej wersji serwera. Na szczęście dostępna jest <a href="http://www.jboss.org/community/docs/DOC-13185">bardzo dobra dokumentacja</a>, która pozwoliła mi się wstępnie rozeznać w temacie. Od wersji 5.0 pamięcią podręczną w serwerze JBoss AS zarządza nowa usługa — CacheManager. Na <a href="http://www.jboss.org/community/docs/DOC-13185">stronie z dokumentacją nowej usługi</a> znajduje się szczegółowa informacja w jaki sposób skonfigurować aplikację — okazało się to bardzo pomocne :)</p>
<p>Dokonałem zmian zgodnych z sekcją <em>Usage with JPA and Hibernate Entity Clustering</em> <a href="http://www.jboss.org/community/docs/DOC-13185">dokumentu</a> i uruchomiłem ponownie aplikację. Posunąłem się tylko o mały krok naprzód, ponieważ JBoss przywitał mnie wyjątkiem:</p>
<p><pre class="brush: java;">
20:03:35,416 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=system.ear/system.jar#system state=Create
javax.persistence.PersistenceException: [PersistenceUnit: system] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132)
	at org.jboss.jpa.deployment.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:311)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
	at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
	at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
	at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
	at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
	at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
	at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
	at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
	at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:121)
	at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:51)
	at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
	at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
	at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
	at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
	at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:545)
	at org.jboss.system.server.profileservice.ProfileServiceBootstrap.loadProfile(ProfileServiceBootstrap.java:304)
	at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:205)
	at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
	at org.jboss.Main.boot(Main.java:209)
	at org.jboss.Main$1.run(Main.java:547)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.cache.CacheException: unsupported access type [nonstrict-read-write]
	at org.hibernate.cache.jbc2.entity.EntityRegionImpl.buildAccessStrategy(EntityRegionImpl.java:66)
	at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:256)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 51 more
</pre></p>
<p>Moje encje wyglądają mniej więcej tak:</p>
<p><pre class="brush: java;">
@Name(&quot;rolePermission&quot;)
@Entity
@Table(name = &quot;role_permissions&quot;)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@SequenceGenerator(name = &quot;role_permission_seq&quot;, sequenceName = &quot;role_permission_seq&quot;)
public class RolePermission implements Serializable, SystemEntity {

	...

}
</pre></p>
<p>Zgłupiałem. Czyżby ta strategia dostępu do encji nie była wspierana? Przecież w JBoss AS 4.2.x była! Kod źródłowy klasy <strong><code>org.hibernate.cache.jbc2.entity.EntityRegionImpl</code></strong> okazał się pomocny.</p>
<p><pre class="brush: java;">
    public EntityRegionAccessStrategy buildAccessStrategy(AccessType accessType) throws CacheException {
        if (AccessType.READ_ONLY.equals(accessType)) {
            return optimistic ? new OptimisticReadOnlyAccess(this) : new ReadOnlyAccess(this);
        }
        if (AccessType.TRANSACTIONAL.equals(accessType)) {
            return optimistic ? new OptimisticTransactionalAccess(this) : new TransactionalAccess(this);
        }

        // todo : add support for READ_WRITE ( + NONSTRICT_READ_WRITE ??? )

        throw new CacheException(&quot;unsupported access type [&quot; + accessType.getName() + &quot;]&quot;);
    }
</pre></p>
<p>Ten <code>TODO</code> wyjaśnia wszystko&#8230;</p>
<p>Atrybut <strong><code>usage</code></strong> adnotacji <strong><code>@org.hibernate.annotations.Cache</code></strong> ustala jeden z pięciu typów strategii użycia pamięci podręcznej:</p>
<ol>
<li><strong><code>NONE</code></strong> — pamięć nie jest używana,</li>
<li><strong><code>READ_ONLY</code></strong> — aplikacja czyta obiekty, ale nigdy ich nie modyfikuje,</li>
<li><strong><code>READ_WRITE</code></strong> — dane mogą być odczytywane jak i modyfikowane,</li>
<li><strong><code>NONSTRICT_READ_WRITE</code></strong> — dane są głównie odczytywane, modyfikacje mogą wystąpić, ale są rzadkie,</li>
<li><strong><code>TRANSACTIONAL</code></strong> — używany przy providerach w pełni wspierających transakcje.</li>
</ol>
<p>Do tej pory używałem <strong><code>CacheConcurrencyStrategy.NONSTRICT_READ_WRITE</code></strong> z uwagi na wydajność. Wygląda na to, że trzeba się pożegnać z tym trybem na rzecz <strong><code>CacheConcurrencyStrategy.TRANSACTIONAL</code></strong>.</p>
<p>Kolejna próba uruchomienia aplikacji zakończyła się sukcesem, jeżeli można tak powiedzieć. Po drodze musiałem poprawić jeden komponent. Przy okzji hot deploy&#8217;u nowej wersji odkryłem błąd — aplikacja uruchamia się, po czym chwilę później zamyka się — bez jakichkolwiek błędów, czy ostrzeżeń!</p>
<p><pre class="brush: java;">
20:43:38,856 INFO  [SeamFilter] Initializing filter: org.jboss.seam.web.identityFilter
20:43:38,864 INFO  [[/system]] org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: conf reload check performed each request
20:43:38,923 INFO  [[/system]] org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok)
20:43:44,104 INFO  [TomcatDeployment] undeploy, ctxPath=/system, vfsUrl=system.ear/system.war
20:43:44,108 INFO  [[/system]] org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: destroy called
</pre></p>
<p>Bardzo irytujące — nie da się przez to pracować, ponieważ deploy trwa w takim przypadku ok. 10 minut (sic!). Muszę poczytać o hot deploy&#8217;u w nowej wersji, bo to powinno działać! Kupiłem sobie książkę <a href="http://www.manning.com/jamae/">JBoss in Action</a> — będzie dobry pretekst aby ją przeczytać :)  Tymczasem wracam do starego, dobrego JBoss AS 4.2.3.</init></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=163&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/12/15/migracja-aplikacji-z-jboss-as-423-do-jboss-as-5/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss Application Server 5.0 GA do pobrania!</title>
		<link>http://ordinarythoughts.org/2008/12/05/jboss-application-server-50-ga-do-pobrania/</link>
		<comments>http://ordinarythoughts.org/2008/12/05/jboss-application-server-50-ga-do-pobrania/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 18:04:00 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=159</guid>
		<description><![CDATA[Jak dumnie informuje strona główna community JBossa wersja 5 została oznaczona jako gotowa do produkcyjnych zastosowań i jest już dostępna do pobrania! Nic tylko ściągać i instalować. Lista zmian dostępna jest na stronie z informacjami o wydaniu &#8211; na pierwszy rzut oka wygląda pokaźnie. Oprócz poprawek wielu błędów mamy aktualizacje do najnowszych wersji różnych projektów [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=159&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_173" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-173" title="JBoss AS 5 już jest!" src="http://javavsme.files.wordpress.com/2008/12/spotlight_as5.jpg?w=300&#038;h=275" alt="http://www.jboss.org/" width="300" height="275" /><p class="wp-caption-text">źródło: http://www.jboss.org/</p></div>
<p>Jak dumnie informuje strona <a href="http://jboss.org/">główna community JBossa</a> wersja 5 została oznaczona jako gotowa do produkcyjnych zastosowań i jest już dostępna do <a href="http://www.jboss.org/jbossas/downloads/">pobrania</a>!</p>
<p>Nic tylko ściągać i instalować. Lista zmian dostępna jest na <a href="http://sourceforge.net/project/shownotes.php?release_id=645033&amp;group_id=22866">stronie z informacjami o wydaniu</a> &#8211; na pierwszy rzut oka wygląda pokaźnie. Oprócz poprawek wielu błędów mamy aktualizacje do najnowszych wersji różnych projektów zależnych, poprawki upiększające, czy takie kwiatki jak wstępne przygotowanie do Java EE 6 (web config &#8211; konfiguracja zgodna z założeniami Java EE 6 dla profilu web). Przez weekend muszę się bliżej przyjrzeć zmianom.</p>
<p>Ciekawe jak będzie wyglądała integracja z ich flagowym frameworkiem &#8211; JBoss Seam? Dorzucić do TODO: przez weekend zmigrować mój poligon doświadczalny z wersji 4.2.3 na 5.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=159&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/12/05/jboss-application-server-50-ga-do-pobrania/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/spotlight_as5.jpg?w=300" medium="image">
			<media:title type="html">JBoss AS 5 już jest!</media:title>
		</media:content>
	</item>
		<item>
		<title>Klastrowanie aplikacji w serwerze JBoss AS 4.2.x (część 2 &#8211; architektury klastrów)</title>
		<link>http://ordinarythoughts.org/2008/12/02/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-2-architektury-klastrow/</link>
		<comments>http://ordinarythoughts.org/2008/12/02/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-2-architektury-klastrow/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:45:55 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=109</guid>
		<description><![CDATA[W pierwszej części napisałem czym jest klastrowanie i do czego służy. Pora skupić się na architekturach klastrowania dostępnych w serwerze JBoss AS. Topografia klastra zdefiniowana w odpowiednim pliku konfiguracyjnym usługi HAPartition za pomocą XMLa dla każdej instancji, ma ogromne znaczenie dla administratorów serwerów JBoss. Programiści natomiast zwracają większą uwagę na konfigurację z punktu widzenia klienta [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=109&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>W <a href="http://javavsme.wordpress.com/2008/12/01/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-1-wstep-do-klastrowania/">pierwszej części</a> napisałem czym jest klastrowanie i do czego służy. Pora skupić się na architekturach klastrowania dostępnych w serwerze JBoss AS.</p>
<p>Topografia klastra zdefiniowana w odpowiednim pliku konfiguracyjnym usługi HAPartition za pomocą XMLa dla każdej instancji, ma ogromne znaczenie dla administratorów serwerów JBoss. Programiści natomiast zwracają większą uwagę na konfigurację z punktu widzenia klienta usługi. W JBoss AS wykorzystywane są dwie architektury klastrowania:</p>
<ol>
<li>interceptory po stronie klienta,</li>
<li>zewnętrzne loadbalancery.</li>
</ol>
<h3>Interceptory po stronie klienta</h3>
<p>Większość zdalnych usług udostępniania przez serwer JBoss AS włączając w to JNDI , EJB, JMS , RMI czy JBoss Remoting wymaga od klienta, aby ten uzyskał (znalazł i pobrał) obiekt stub (proxy). Obiekt stub jest generowany przez serwer. Implementuje on interfejs biznesowy usługi. Po pobraniu obiektu stub przez klienta wywołuje on na nim lokalne zapytanie, następnie stub przekazuje zapytanie przez sieć do odpowiedniej usługi.</p>
<div id="attachment_120" class="wp-caption alignright" style="width: 310px"><a href="http://javavsme.files.wordpress.com/2008/12/interceptor.png"><img class="size-medium wp-image-120" title="interceptor" src="http://javavsme.files.wordpress.com/2008/12/interceptor.png?w=300&#038;h=252" alt="Architektura z interceptorem po stronie klienta" width="300" height="252" /></a><p class="wp-caption-text">Architektura z interceptorem po stronie klienta</p></div>
<p>Zaślepka wygenerowana przez serwer zawiera w sobie interceptor, który wie jak rutować zapytania do wielu węzłów w klastrze. Następnie stub znajduje odpowiedni węzeł, serializuje parametry zapytania, odserializowuje wyniki zapytania i zwraca je do klienta. Interceptor posiada aktualną wiedzę na temat klastra. Zna on adresy IP każdego dostępnego węzła w klastrze, algorytm dystrybucji obciążenia pomiędzy węzłami oraz informację, w jaki sposób radzić sobie z sytuacją, gdy docelowy węzeł nie będzie dostępny.</p>
<p>W przypadku gdy topologia klastra zmienia się, węzeł uaktualnia dane w interceptorze przy najbliższym zapytaniu. Przykładowo, gdy jeden z węzłów zostanie odłączony od klastra – każdy interceptor zostanie o tym powiadomiony przy podłączeniu się do któregokolwiek aktywnego węzła. Wszystkie aktualizacje obiektu stub są niewidoczne dla klienta.</p>
<h4>Polityki rozkładu obciążenia</h4>
<p>Dla architektury opartej na interceptorach po stronie klienta serwer JBoss AS 4.2 oferuje następujące polityki:</p>
<ul>
<li><strong>Round-Robin</strong> (<code>org.jboss.ha.framework.interfaces.RoundRobin</code>) – każde       zapytanie jest przekazywane do kolejnego serwera znajdującego się na liście       dostępnych węzłów, pierwszy cel jest wybierany przypadkowo.</li>
<li><strong>Random-Robin</strong> (<code>org.jboss.ha.framework.interfaces.RandomRobin</code>) – dla       każdego zapytania docelowy węzeł wybierany jest przypadkowo.</li>
<li><strong>First Available</strong> (<code>org.jboss.ha.framework.interfaces.FirstAvailable</code>) – jeden z dostępnych węzłów zostaje zostaje wybrany jako domyślny (bez znaczenia który). Gdy lista dostępnych węzłów zmieni się stub wybierze następny dostępny węzeł, jednak dopiero wtedy gdy wybrany wcześniej węzeł już nie działa. Każdy stub wybiera cel niezależnie. Jeżeli klient pobierze dwa obiekty stub (np. EJB) – każdy z nich wybierze samodzielnie cel. Jest to polityka, która zapewnia tzw. session affinity (sticky sessions).</li>
<li><strong>First Available Identical All Proxies </strong>(<code>org.jboss.ha.framework.interfaces.FirstAvailableIdenticalAllProxies</code>) – polega na tym samym co, First Available z tą różnicą, że wszystkie zapytania jednego klienta będą kierowane      do tego samego docelowego węzła. Dla przykładu: jeżeli klient pobierze dwa obiekty stub jakiejś usługi, każdy z nich będzie odwoływał się do tego samego węzła w klastrze.</li>
</ul>
<p>Wszystkie powyższe polityki są implementacją interfejsu <code>org.jboss.ha.framework.interfaces.LoadBalancePolicy</code>. Można stworzyć również własną implementację tego interfejsu.</p>
<h3>Loadbalancer</h3>
<p>Wiele usług udostępnianych przez serwer JBoss nie wymaga od klienta, aby ten pobierał obiekt proxy. W szczególności dotyczy to usług związanych z protokołem HTTP, gdzie klient (często przeglądarka internetowa) wysyła zapytania i otrzymuje odpowiedzi bezpośrednio za pomocą połączenia odpowiedniego dla wybranego protokołu (np. HTTP). W takim przypadku wymagany jest zewnętrzny loadbalancer, którego zadaniem jest przetworzenie otrzymanych zapytań, a następnie ich wysyłka do węzłów w klastrze. Loadbalancer jest logiczną częścią klastra, mimo to określa się go jako usługę zewnętrzną.</p>
<div id="attachment_118" class="wp-caption alignright" style="width: 310px"><a href="http://javavsme.files.wordpress.com/2008/12/loadbalancer.png"><img class="size-medium wp-image-118" title="loadbalancer" src="http://javavsme.files.wordpress.com/2008/12/loadbalancer.png?w=300&#038;h=232" alt="Architektura z loadbalancerem" width="300" height="232" /></a><p class="wp-caption-text">Architektura z loadbalancerem</p></div>
<p>Loadbalancer może zostać zaimplementowany jako rozwiązanie programowe bądź sprzętowe. Wielu producentów oferuje bardzo zaawansowane rozwiązania sprzętowe. W rozwiązaniach programowych na wyróżnienie zasługują moduły serwera Apache. Do wersji 2.2 serwera Apache rolę loadbalancera dla serwerów aplikacyjnych Javy pełnił moduł <strong><code>mod_jk</code></strong>. Obecnie funkcjonalność ta jest dostarczana przez moduł <strong><code>mod_proxy_balancer</code></strong>.</p>
<p>Loadbalancer posiada zaimplementowany mechanizm, który umożliwia mu poznanie topologii klastra oraz zapewnia logikę rozkładu obciążenia pomiędzy węzłami czy detekcji niedziałających węzłów.     Problemem przy takiej architekturze może być to, że loadbalancer sam w sobie może być powodem braku dostępu do aplikacji, ponieważ gdy loadbalancer przestanie odpowiadać – żaden klient nie dostanie się do aplikacji, dlatego też loadbalancer powinien być stale monitorowany aby zapewnić wysoką dostępność całego klastra. Bardzo często stosuje się redundancję loadbalancerów aby wykluczyć pojedynczy punkt awarii.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=109&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/12/02/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-2-architektury-klastrow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/interceptor.png?w=300" medium="image">
			<media:title type="html">interceptor</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/loadbalancer.png?w=300" medium="image">
			<media:title type="html">loadbalancer</media:title>
		</media:content>
	</item>
		<item>
		<title>Klastrowanie aplikacji w serwerze JBoss AS 4.2.x (część 1 &#8211; wstęp do klastrowania)</title>
		<link>http://ordinarythoughts.org/2008/12/01/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-1-wstep-do-klastrowania/</link>
		<comments>http://ordinarythoughts.org/2008/12/01/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-1-wstep-do-klastrowania/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 21:59:41 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=89</guid>
		<description><![CDATA[Na ostatnim, trzecim spotkaniu Silesia JUG, po prezentacji Łukasza Lipki na temat Mule ESB kilka osób zainteresowanych było możliwością uruchomienia Mule ESB w klastrze. Okazało się, że polityka klastrowania musi zostać zaimplementowana ręcznie przez programistów. Ciekawe, bo bez tego ESB chcące być postrzegane jako technologia dla biznesu musi posiadać możliwość klastrowania. Nie zgłębiając dalej tematu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=89&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Na ostatnim, <a href="http://lukaszlipka.blogspot.com/2008/11/3-spotkanie-lskiej-grupy-uytkownikw.html">trzecim spotkaniu</a> <a href="http://groups.google.com/group/silesia-jug">Silesia JUG</a>, po prezentacji <a href="http://lukaszlipka.blogspot.com/">Łukasza Lipki</a> na temat <a href="http://mulesource.org/display/MULE/Home">Mule ESB</a> kilka osób zainteresowanych było możliwością uruchomienia Mule ESB w klastrze. Okazało się, że polityka klastrowania musi zostać zaimplementowana ręcznie przez programistów. Ciekawe, bo bez tego ESB chcące być postrzegane jako technologia dla biznesu <strong>musi</strong> posiadać możliwość klastrowania. Nie zgłębiając dalej tematu Mule ESB, zaintrygowany tematem, postanowiłem napisać jak to jest w przypadku serwera aplikacji, na którym pracuję na co dzień, czyli <a href="http://www.jboss.org/jbossas/">JBoss Application Server</a>.</p>
<h3>Klastrowanie? A co to tak właściwie jest?</h3>
<p>Klastrowanie pozwala na uruchomienie aplikacji na wielu, pracujących równolegle serwerach przy serwowaniu pojedynczego widoku dla klienta. Obciążenie rozłożone jest na wszystkie serwery w klastrze. W przypadku, gdy jeden lub więcej węzłów zostanie wyłączonych (ulegnie awarii) &#8211; aplikacja nadal jest dostępna za sprawą pozostałych, działających serwerów. Dzięki łączeniu serwerów w klastry można zwiększać wydajność aplikacji poprzez zwykłe dodawanie kolejnych węzłów do klastra. Oprócz zwiększonej mocy obliczeniowej klastrowanie oferuje redundancję, która jest bardzo często wymaganiem dla bezawaryjnego działania dużych aplikacji.</p>
<p>JBoss Application Server posiada wbudowane mechanizmy klastrowania. Najprostszą metodą uruchomienia klastra z serwerów JBoss jest uruchomienie każdego z nich w tej samej sieci lokalnej w konfiguracji <strong><code>all</code></strong> (za pomocą polecenia <strong><code>run -c all</code></strong>). Każdy z serwerów samoczynnie wykryje pozostałe węzły, które razem sformułują klaster.</p>
<p>Reasumując: klastrowanie ma dwa podstawowe zadania:</p>
<ol>
<li>utrzymanie niezawodności systemu,</li>
<li>zwiększenie wydajności aplikacji.</li>
</ol>
<h3>Definicja klastra</h3>
<blockquote><p>Klaster to zbiór węzłów komunikujących się ze sobą, pracujących razem w celu osiągnięcia wspólnego celu.</p></blockquote>
<p>W klastrze serwerów aplikacji JBoss AS, zwanym również <strong>partycją</strong>, pojedynczy węzeł to jedna instancja serwera JBoss AS. Komunikacja między węzłami odbywa się za pomocą grupy bibliotek <a href="http://www.jboss.org/jgroups/">JGroups</a>. JGroups Channels pozwala na śledzenie, kto znajduje się w klastrze oraz na niezawodną komunikację pomiędzy członkami klastra. Instancje JGroups Channels posiadające te same konfiguracje i jednakowe nazwy mają zdolność do dynamicznego wykrywania siebie nawzajem i formowania w grupy. To dlatego uruchomienie dwóch serwerów w tej samej sieci lokalnej poprzez wywołanie polecenia <strong><code>run -c all</code></strong> wystarcza aby sformułować klaster. Każdy z serwerów uruchomi kanał (channel) z tą samą, domyślną konfiguracją. W ten sposób węzły mogą się rozpoznać w sieci tworząc razem klaster. Węzły mogą być dynamicznie dodawane i usuwane z klastra w każdym momencie. Wystarczy uruchomić lub zatrzymać kanał, który skonfigurowany jest w ten sam sposób jak inne węzły w klastrze.</p>
<p>Reasumując: klaster JBoss jest zbiorem instancji serwerów JBoss AS, przy czym każda instancja posiada uruchomiony JGroups Channel skonfigurowany dokładnie w taki sam sposób jak inne instancje.</p>
<p>Na jednej instancji serwera JBoss AS uruchomione usługi mogą uruchomić swoje własne kanały. Przy standardowej konfiguracji serwera JBoss AS 4.2 cztery usługi uruchamiają swoje kanały. Są to:</p>
<ul>
<li>usługa replikacji stanu sesji HTTP,</li>
<li>usługa replikacji stanu SFSB,</li>
<li>usługa cacheowania encji EJB 3.0,</li>
<li>oraz standardowa usługa klastrowania zwana HAPartition.</li>
</ul>
<p>Poszczególne kanały rozróżnia się za pomocą nazw – różne kanały muszą posiadać różne nazwy, przy czym konfiguracja węzłów w poszczególnych kanałach musi być taka sama dla wszystkich instancji</p>
<div id="attachment_94" class="wp-caption alignright" style="width: 310px"><a href="http://javavsme.files.wordpress.com/2008/12/part_diagram.png"><img class="size-medium wp-image-94" title="Przykładowe formowanie się węzłów w partycje" src="http://javavsme.files.wordpress.com/2008/12/part_diagram.png?w=300&#038;h=158" alt="Przykładowe formowanie się węzłów w partycje" width="300" height="158" /></a><p class="wp-caption-text">Przykładowe formowanie się węzłów w partycje</p></div>
<p>danej usługi w klastrze, jednak różna dla usług uruchomionych na pojedynczej instancji. W przypadku uruchomienia przykładowo dwóch instancji serwerów JBoss AS za pomocą polecenia <strong><code>run -c all</code></strong> może wydawać się, że mamy jeden klaster złożony z dwóch węzłów. Ściśle mówiąc jest to nieprawda, ponieważ każda usługa tworzy swój własny klaster, w związku z czym otrzymujemy cztery klastry każdy po dwa węzły. Dla jednej sieci, nawet dla tej samej usługi możemy mieć wiele klastrów. Diagram przedstawia przykładową sieć serwerów JBoss podzieloną na trzy partycje. Taką konfigurację można szybko uzyskać edytując poszczególne pliki konfiguracyjne w odpowiednich instancjach serwerów.</p>
<p>W następnej części zostaną omówione architektury klastrów możliwe do utworzenia przez serwer JBoss AS.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=89&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/12/01/klastrowanie-aplikacji-w-serwerze-jboss-as-42x-czesc-1-wstep-do-klastrowania/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/12/part_diagram.png?w=300" medium="image">
			<media:title type="html">Przykładowe formowanie się węzłów w partycje</media:title>
		</media:content>
	</item>
		<item>
		<title>Uruchomienie cacheowania encji w JBoss AS 4.2.x</title>
		<link>http://ordinarythoughts.org/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/</link>
		<comments>http://ordinarythoughts.org/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 15:55:07 +0000</pubDate>
		<dc:creator>Marek Goldmann</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[jboss as]]></category>

		<guid isPermaLink="false">http://javavsme.wordpress.com/?p=23</guid>
		<description><![CDATA[Aby scacheować encję w serwerze JBoss należy opatrzyć ją adnotacją @org.hibernate.annotations.Cache: oraz dodać odpowiednie właściwości do pliku persistence.xml: Dodatkowo należy posiadać odpowiednio skonfigurowany serwer. Są na to dwa sposoby: Uruchomienie serwera w konfiguracji all, Uruchomienie serwera w konfiguracji default po jej uprzednim przygotowaniu. Drugi sposób jest o tyle lepszy, że jest start serwera jest zdecydowanie [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=23&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Aby scacheować encję w serwerze JBoss należy opatrzyć ją adnotacją <strong><code>@org.hibernate.annotations.Cache</code></strong>:</p>
<p><pre class="brush: java;">
import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = &quot;role_permissions&quot;)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class RolePermission extends BaseEntity {

	private static final long serialVersionUID = 6778357970340362708L;

	private String role;
	private String target;

...

}
</pre></p>
<p>oraz dodać odpowiednie właściwości do pliku <strong><code>persistence.xml</code></strong>:</p>
<p><pre class="brush: xml;">
&lt;property name=&quot;hibernate.cache.provider_class&quot; value=&quot;org.jboss.ejb3.entity.TreeCacheProviderHook&quot; /&gt;
&lt;property name=&quot;treecache.mbean.object_name&quot; value=&quot;jboss.cache:service=EJB3EntityTreeCache&quot; /&gt;
</pre></p>
<p>Dodatkowo należy posiadać odpowiednio skonfigurowany serwer. Są na to dwa sposoby:</p>
<ol>
<li>Uruchomienie serwera w konfiguracji <strong><code>all</code></strong>,</li>
<li>Uruchomienie serwera w konfiguracji <strong><code>default</code></strong> po jej uprzednim przygotowaniu.</li>
</ol>
<p>Drugi sposób jest o tyle lepszy, że jest start serwera jest zdecydowanie szybszy, co na maszynie deweloperskiej jest dużym atutem. Konfiguracja <strong><code>all</code></strong> pozwala na klastrowanie, ale komu to potrzebne przy tworzeniu i testowaniu aplikacji?</p>
<p>Aby uruchomić cacheowanie encji przy konfiguracji <strong><code>default</code></strong> (domyślnej) należy skopiować z katalogu <strong><code>$JBOSS_HOME/server/all/lib/</code></strong> biblioteki <strong><code>jboss-cache-jdk50.jar</code></strong> oraz <strong><code>jgroups.jar</code></strong> do katalogu <strong><code>$JBOSS_HOME/default/lib/</code></strong>.</p>
<p>Dodatkowo należy skopiować plik <strong><code>$JBOSS_HOME/server/all/deploy/ejb3-entity-cache-service.xml</code></strong> do katalogu <strong><code>$JBOSS_HOME/default/deploy/</code></strong>.</p>
<p>I to wszystko &#8211; możemy już cieszyć się encjami z pamięci podręcznej.</p>
<p>Poprawność uruchomienia cacheowania można sprawdzić w konsoli JMX serwera JBoss pod adresem <strong><code>http://localhost:8080/jmx-console/</code></strong> wyszukując usługę <code><strong>*:service=EJB3EntityTreeCache,*</strong></code>, a następnie uruchamiająć akcję <strong><code>printDetails()</code></strong>. Na wynikowym ekranie powinna się znaleźć encja oznaczona adnotacją <strong><code>@Cache</code></strong>.</p>
<p style="text-align:center;">
<a href='http://ordinarythoughts.org/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/jmx1/' title='JBoss JMX Console EJB3EntityTreeCache '><img data-attachment-id='37' data-orig-size='942,654' data-liked='0'width="150" height="104" src="http://javavsme.files.wordpress.com/2008/11/jmx1.png?w=150&#038;h=104" class="attachment-thumbnail" alt="JBoss JMX Console EJB3EntityTreeCache" title="JBoss JMX Console EJB3EntityTreeCache" /></a>
<a href='http://ordinarythoughts.org/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/jmx21/' title='JBoss JMX Console EJB3EntityTreeCache printDetails()'><img data-attachment-id='44' data-orig-size='942,858' data-liked='0'width="150" height="136" src="http://javavsme.files.wordpress.com/2008/11/jmx21.png?w=150&#038;h=136" class="attachment-thumbnail" alt="JBoss JMX Console EJB3EntityTreeCache printDetails()" title="JBoss JMX Console EJB3EntityTreeCache printDetails()" /></a>
</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javavsme.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javavsme.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javavsme.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ordinarythoughts.org&amp;blog=5520947&amp;post=23&amp;subd=javavsme&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ordinarythoughts.org/2008/11/15/uruchomienie-cacheowania-encji-w-jboss-as-42x/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00cc70beb20a4a77809fd95b6f75ff2?s=96&#38;d=identicon" medium="image">
			<media:title type="html">goldmann</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/11/jmx1.png?w=150" medium="image">
			<media:title type="html">JBoss JMX Console EJB3EntityTreeCache</media:title>
		</media:content>

		<media:content url="http://javavsme.files.wordpress.com/2008/11/jmx21.png?w=150" medium="image">
			<media:title type="html">JBoss JMX Console EJB3EntityTreeCache printDetails()</media:title>
		</media:content>
	</item>
	</channel>
</rss>
