<?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>javathreads.de &#187; JSR 299</title>
	<atom:link href="http://javathreads.de/tag/jsr-299/feed/" rel="self" type="application/rss+xml" />
	<link>http://javathreads.de</link>
	<description>Blog rund um Java und Web Entwicklung</description>
	<lastBuildDate>Wed, 02 Nov 2011 10:37:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pr&#228;sentation &#8220;JSR-299 (CDI), Weld &amp; the Future of Seam&#8221; von Dan Allen</title>
		<link>http://javathreads.de/2011/10/praesentation-jsr-299-cdi-weld-the-future-of-seam-von-dan-allen/</link>
		<comments>http://javathreads.de/2011/10/praesentation-jsr-299-cdi-weld-the-future-of-seam-von-dan-allen/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:36:59 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Seam 3]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2641</guid>
		<description><![CDATA[Im Pr&#228;sentation &#252;ber die Themen &#8220;JSR-299 (CDI), Weld &#038; the Future of Seam&#8221; die zwar bereits gut ein Jahr alt aber immer noch sehr informativ:






]]></description>
			<content:encoded><![CDATA[<p>Im Pr&#228;sentation &#252;ber die Themen &#8220;JSR-299 (CDI), Weld &#038; the Future of Seam&#8221; die zwar bereits gut ein Jahr alt aber immer noch sehr informativ:</p>
<div style="text-align:center">
<div style="width:595px;height:497px" id="__ss_5255858">
<iframe src="http://www.slideshare.net/slideshow/embed_code/5255858?rel=0" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"></div>
</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2011/10/praesentation-jsr-299-cdi-weld-the-future-of-seam-von-dan-allen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contexts and Dependency Injection for the Java EE Platform Spickzettel</title>
		<link>http://javathreads.de/2010/01/contexts-and-dependency-injection-for-the-java-ee-platform-spickzettel/</link>
		<comments>http://javathreads.de/2010/01/contexts-and-dependency-injection-for-the-java-ee-platform-spickzettel/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 05:00:46 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Refcardz]]></category>
		<category><![CDATA[Spickzettel]]></category>
		<category><![CDATA[Weld]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2262</guid>
		<description><![CDATA[Endlich mal wieder eine, aus meiner Sicht, wirklich n&#252;tzliche DZone Refcard (Spickzettel) mit der &#220;berschrift Contexts and Dependency Injection for the Java EE Platform, was auch unter dem JSR 299 bekannt ist und in Java EE 6 mit einflie&#223;t. Konkret behandelt es die Context and Dependency Injection (CDI) Implementierung von JBoss mit dem Namen Weld.



Wie [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich mal wieder eine, aus meiner Sicht, wirklich n&#252;tzliche DZone Refcard (Spickzettel) mit der &#220;berschrift <a href="http://refcardz.dzone.com/refcardz/contexts-and-depencency?oid=hom16925">Contexts and Dependency Injection for the Java EE Platform</a>, was auch unter dem <a href="http://jcp.org/en/jsr/detail?id=299">JSR 299</a> bekannt ist und in Java EE 6 mit einflie&#223;t. Konkret behandelt es die Context and Dependency Injection (CDI) Implementierung von JBoss mit dem Namen <a href="http://seamframework.org/Weld">Weld</a>.</p>
<div class="singleImgDiv">
<a href="http://refcardz.dzone.com/refcardz/contexts-and-depencency?oid=hom16925"><img src="http://javathreads.de/data/uploads/2010/01/DZoneRefcardzCDIWeld.jpg" alt="DZone Refcardz - Contexts and Dependency Injection for the Java EE Platform" title="DZone Refcardz - Contexts and Dependency Injection for the Java EE Platform" width="600" height="597" class="alignnone size-full wp-image-2263" /></a>
</div>
<p>Wie immer bei den DZone Refcardz gilt, dass man sich registrieren muss um das PDF herunterladen zu k&#246;nnen oder eben einfach direkt <a href="http://refcardz.dzone.com/refcardz/contexts-and-depencency?oid=hom16925">online ansehen</a>. Alternativ hier einfach ein Kommentar hinterlassen oder mich kontaktieren und ich schicke es auch direkt zu.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/01/contexts-and-dependency-injection-for-the-java-ee-platform-spickzettel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Links Thread #4 &#8211; Alles rund um JEE 6: JSF 2.0, EJB 3.1 und JPA 2.0</title>
		<link>http://javathreads.de/2009/11/links-thread-4-alles-rund-um-jee-6-jsf-2-0-ejb-3-1-und-jpa-2-0/</link>
		<comments>http://javathreads.de/2009/11/links-thread-4-alles-rund-um-jee-6-jsf-2-0-ejb-3-1-und-jpa-2-0/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 18:00:47 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[EJB 3.1]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[JSF 2.0]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1962</guid>
		<description><![CDATA[
Enterprise-Java im Wandel &#8211; eine Standortbestimmung (Lars R&#246;wekamp, Jens Schumann) LinkSehr informativer Artikel &#252;ber die kommende Java EE 6 Version mit einen kleinen &#220;berblick auf die verschiedenen neuen Bestandteile wie. Und das Ganze auch noch auf deutsch.
Simplest possible JSF 2 / EJB 3.1 / JPA Component (Adam Bien) LinkSehr sch&#246;nes und vor allem &#252;berschauliches Beispiel [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><b>Enterprise-Java im Wandel &#8211; eine Standortbestimmung</b> (Lars R&#246;wekamp, Jens Schumann) <a href="http://www.heise.de/developer/artikel/Enterprise-Java-im-Wandel-eine-Standortbestimmung-403669.html">Link</a><br />Sehr informativer Artikel &#252;ber die kommende Java EE 6 Version mit einen kleinen &#220;berblick auf die verschiedenen neuen Bestandteile wie. Und das Ganze auch noch auf deutsch.</li>
<li><b>Simplest possible JSF 2 / EJB 3.1 / JPA Component</b> (Adam Bien) <a href="http://www.adam-bien.com/roller/abien/entry/simplest_possible_jsf_2_ejb">Link</a><br />Sehr sch&#246;nes und vor allem &#252;berschauliches Beispiel wie in JEE 6 ein Text von der Eingabe auf der Webseite in die Datenbank gebracht wird.</li>
<li><b>Zusammenfassung der &#196;nderungen von EJB 3.1 und JPA 2</b> (Christian Ullenboom) <a href="http://www.tutego.de/blog/javainsel/2009/08/zusammenfassung-der-anderungen-von-ejb.html">Link</a><br />Kein langer Text sondern eine knappe Auflistung der zuk&#252;nftigen &#196;nderungen.</li>
<li><b>JPA 2.0 Concurrency and locking</b> (Carol McDonald) <a href="http://blogs.sun.com/carolmcdonald/entry/jpa_2_0_concurrency_and?intcmp=2223">Link</a><br />Mit JPA 2.0 wird das bereits vorhandene Locking erweitert und es kommen neuen M&#246;glichkeiten hinzu. Neben dem Optimistic Locking kann man zuk&#252;nftig auch Pesimistic Locking mit JPA verwenden. In diesem Artikel findet man eine ausf&#252;hrliche Erl&#228;uterung mit Beispielcode und Grafiken.</li>
<li><b>Dealing Gracefully with ViewExpiredException in JSF2</b> (Ed Burns) <a href="http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2">Link</a><br />Jeder JSF Seite geladen, verl&#228;sst den Rechner f&#252;r die Mittagspause und dr&#252;ckt anschlie&#223;end auf den Submit Button bekommt h&#246;chstwahrscheinlich eine <code>ViewExpiredException</code> auf einer oft h&#228;sslichen Systemfehlerseite. Dieser Artikel zeigt wie man mit dem neuen JSF 2.0 Feature &#8220;<code>ExceptionHandler</code>&#8221; auf Exceptions reagieren kann.</li>
<li><b>JSF 2, h:dataTable, and Ajax Updates</b> (Jason Lee) <a href="http://blogs.steeplesoft.com/jsf-2-hdatatable-and-ajax-updates/">Link</a><br />Mit JSF 2.0 kommt eine direkte Ajax Unters&#252;tzung wie man sie bisher nur aus JSF Komponentenbibliotheken kannt (z.B. Ajax4Jsf in RichFaces). Dieses Tutorial zeigt, wie man mit reinen JSF 2.0 Boardmitteln eine Datatable mit Ajax updaten kann.</li>
<li><b>Using CDI and Dependency Injection for Java in a JSF 2.0 Application</b> (Roger Kitain) <a href="http://blogs.sun.com/enterprisetechtips/entry/using_cdi_and_dependency_injection">Link</a><br />Ein gro&#223;er Vorteil von JSF 2.0 ist die Vereinfachung der Konfiguration mittels Annotationen. Das ganze ist im JSR 299 Contexts and Dependency Injection (CDI) beschrieben. Wie der JSR 299 und JSF 2.0 zusammengeh&#246;ren zeigt dieser Artikel anhand des &#8220;Number Guess&#8221; Beispiels.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/11/links-thread-4-alles-rund-um-jee-6-jsf-2-0-ejb-3-1-und-jpa-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interessante Webinare: JSR-299 mit Pete Muir und JSF 2 mit Ed Burns</title>
		<link>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/</link>
		<comments>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/#comments</comments>
		<pubDate>Mon, 11 May 2009 06:00:21 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JSF 2]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Webinar]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1495</guid>
		<description><![CDATA[Diese Woche ist die Woche der interessanten Webinare und somit der kostenlosen interaktiven Weiterbildung. Ein Webinar ist ein interaktives Seminar &#252;ber das Web mit Bild und Ton bei dem es den Zuschauen m&#246;glich ist sich live mit dem Vortragenden zu unterhalten und zu diskutieren. Nat&#252;rlich kann man auch einfach nur zuschauen ;)
Das erste Webinar findet [...]]]></description>
			<content:encoded><![CDATA[<p>Diese Woche ist die Woche der interessanten Webinare und somit der kostenlosen interaktiven Weiterbildung. Ein Webinar ist ein interaktives Seminar &#252;ber das Web mit Bild und Ton bei dem es den Zuschauen m&#246;glich ist sich live mit dem Vortragenden zu unterhalten und zu diskutieren. Nat&#252;rlich kann man auch einfach nur zuschauen ;)</p>
<p>Das <a href="http://wikis.sun.com/display/TheAquarium/JCDI+-+JSR299">erste Webinar</a> findet am Dienstag um 19 Uhr mit Pete Muir (Red Hat) statt und tr&#228;gt den Titel &#8220;<strong>The new JSR299 &#8211; JCDI, Java Contexts and Dependency Injection</strong>&#8220;.</p>
<p>Das <a href="http://weblogs.java.net/blog/edburns/archive/2009/05/jsf2_webinar_ne.html">zweite Webinar</a> findet am <del datetime="2009-05-13T15:45:02+00:00">Donnerstag</del> Dienstag den 19.05. um 18 Uhr mit Ed Burns (Sun) statt und tr&#228;gt den Titel &#8220;<strong>JSF 2</strong>&#8220;.<br />
[Update]<br />
Hier die Pr&#228;sentation (<a href="https://javaserverfaces.dev.java.net/presentations/jsf2-complete-tour/jsf2-complete-tour.pdf">PDF Direktlink</a>) zu dem JSF 2 Webinar.</p>
<p>Ich werde versuchen mir beide live anzusehen und falls das nicht klappt gibt es mei&#223;t die M&#246;glichkeit sich im Nachhinein die Webinare noch einmal anzusehen. Wenn dem so ist werde ich hier noch notieren wie man an die Webinare nachtr&#228;glich gelangt.</p>
<p>[Update 13.05.] Webinar JSF 2.0 mit Pete Muir wurde auf den 19.05. korrigiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/05/interessante-webinare-jsr-299-mit-pete-muir-und-jsf-2-mit-ed-burns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2009: Seam 3 und Web Beans Pr&#228;sentationen</title>
		<link>http://javathreads.de/2009/05/jax-2009-seam-3-und-web-beans-praesentationen/</link>
		<comments>http://javathreads.de/2009/05/jax-2009-seam-3-und-web-beans-praesentationen/#comments</comments>
		<pubDate>Tue, 05 May 2009 21:00:22 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Präsentation]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Seam 3]]></category>
		<category><![CDATA[Web Beans]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1449</guid>
		<description><![CDATA[Pete Muir, welcher einer der f&#252;hrenden K&#246;pfe hinter dem Seam sowie Web Beans Projekt ist, hat auf der diesj&#228;hrigen JAX 2009 genau &#252;ber diese beiden Projekte eine Pr&#228;sentation gehalten. Seine Folien hat er nun online gestellt. Beide Pr&#228;sentationen sind im PDF Format und ca 1,2 MB gro&#223;. Diese Themen sind deswegen so interessant, weil die [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://in.relation.to/Bloggers/Pete">Pete Muir</a>, welcher einer der f&#252;hrenden K&#246;pfe hinter dem Seam sowie Web Beans Projekt ist, hat auf der diesj&#228;hrigen JAX 2009 genau &#252;ber diese beiden Projekte eine Pr&#228;sentation gehalten. Seine Folien hat er nun <a href="http://in.relation.to/11203.lace">online gestellt</a>. Beide Pr&#228;sentationen sind im PDF Format und ca 1,2 MB gro&#223;. Diese Themen sind deswegen so interessant, weil die Web Beans Spezifikation (JSR 299) eine der Grundlagen f&#252;r JEE 6 ist. Seam 3 implementiert auch die Web Beans und dient als Bindeglied zwischen JEE und verschiedensten anderen Frameworks.</p>
<table style="width:100%">
<tr>
<td style="text-align:center"><a href="http://www.seamframework.org/service/File/75153"><img src="http://javathreads.de/data/uploads/2009/05/jaxseam3_250.jpg" alt="JAX Pr&#228;sentationsfolien Seam 3" title="JAX Pr&#228;sentationsfolien Seam 3 - 1.2 MB PDF" width="250" height="188" class="alignnone size-full wp-image-1461" /></a></td>
<td style="text-align:center"><a href="http://www.seamframework.org/service/File/75154"><img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans_250.jpg" alt="JAX Pr&#228;sentationsfolien Web Beans" title="JAX Pr&#228;sentationsfolien Web Beans - 1.2 MB PDF" width="250" height="188" class="alignnone size-full wp-image-1462" /></a></td>
</table>
<p>(Auf das jeweile Bild klicken um die PDF Datei direkt herunterzuladen)</p>
<p>Im folgenden m&#246;chte ich noch kurz einen kleinen Auszug aus den Pr&#228;sentationen zeigen, denn diese Folien zeigen sehr sch&#246;n die Kernfunktionalit&#228;ten und Features der Web Beans Spezifikation anhand eines kleinen Code Beispiels.</p>
<p>Zuk&#252;nftig kann jede einfache Java Klasse (POJOs) aber auch Enterprise Java Beans (EJBs) f&#252;r Dependency Injection verwendet werden um sie in anderen Beans zu verwenden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans-1.jpg" alt="Web Beans Beispiel 1" title="Web Beans Beispiel 1" width="482" height="251" class="alignnone size-full wp-image-1472" />
</div>
<p>M&#246;chte man eine Klasse in einer anderen verwenden kann man sie mit der Annotation <code>@Current</code> injectien. Der Binding Type <code>@Current</code> ist der Standardbinding Type und kann verwendet werden wenn man keinen eigenen festgelegt hat und wenn die Zuordnung zur Klassen eindeutig ist:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans-2.jpg" alt="Web Beans Beispiel 2" title="Web Beans Beispiel 2" width="482" height="177" class="alignnone size-full wp-image-1473" />
</div>
<p>W&#252;rde man z.B. ein Interface verwenden und dieses zweimal implementieren kann man <code>@Current</code> nicht mehr verwenden sondern muss eigene Binding Types erstellen. In den mei&#223;ten F&#228;llen arbeitet man allerdings eindeutig, so dass man sich durch diesen Standardbinding Type Arbeit sparen kann.</p>
<p>Die zweite Variante ein Dependency Injection zu erm&#246;glichen ist durch den Konstruktor einer Klasse. Dieser miss mit der Annotation <code>@Initializer</code> annotiert werden damit die durch die Web Beans verwaltete Klasse auch richtig initialisiert wird (&#228;hnlich dem <code>@PostConstruct</code> bei EJB 3.0). Zudem muss man die &#252;bergebene Web Bean nicht mit <code>@Current</code> annotieren weil bei Konstruktoren die Web Beans automatisch injected werden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans-3.jpg" alt="Web Beans Constructor Injection" title="Web Beans Constructor Injection" width="482" height="216" class="alignnone size-full wp-image-1476" />
</div>
<p>M&#246;chte man auf eine Bean mit der Expression Language (EL) zugreifen muss die Bean durch einen Namen bekannt gemacht werden. Dazu dient die Annotation <code>@Named</code>. Dabei kann man der Annotation entweder einen Namen explizit mitgeben oder den Namen der Klasse verwenden. Wird der Name der Klasse verwendet ist auch der erste Buchstabe klein gestellt:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans-4.jpg" alt="Web Bean Names" title="Web Bean Names" width="482" height="276" class="alignnone size-full wp-image-1477" />
</div>
<p>Einmal mit <code>@Named</code> bekannt gemacht kann diese Bean &#252;berall mit EL verwendet werden, wie hier in diesem Beispiel in einer JSF Seite:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2009/05/jaxwebbeans-5.jpg" alt="JSF Page" title="JSF Page" width="482" height="131" class="alignnone size-full wp-image-1478" />
</div>
<p>Wer noch ein weitere kleine Einf&#252;hrung in Web Beans und somit in JEE 6 haben m&#246;chte sollte sich auch die <a href="http://javathreads.de/2009/03/was-kommt-mit-jee-6-jsr-299-web-beans-praesentation-von-gavin-king/">Pr&#228;sentation von Gavin King &#252;ber die Web Beans</a> anschauen. In diesem Artikel habe ich auch noch ein kleines Beispiel gepostet.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/05/jax-2009-seam-3-und-web-beans-praesentationen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Was kommt mit JEE 6 &#8211; JSR 299 (Web Beans) Pr&#228;sentation von Gavin King</title>
		<link>http://javathreads.de/2009/03/was-kommt-mit-jee-6-jsr-299-web-beans-praesentation-von-gavin-king/</link>
		<comments>http://javathreads.de/2009/03/was-kommt-mit-jee-6-jsr-299-web-beans-praesentation-von-gavin-king/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 11:30:49 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[JSR]]></category>
		<category><![CDATA[JSR 299]]></category>
		<category><![CDATA[Präsentation]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Web Beans]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=1312</guid>
		<description><![CDATA[Wer wissen m&#246;chte in welche Richtung es in Java EE 6 geht wird nicht darum herumkommen sich mit dem JSR 299, auch Web Beans genannt, zu besch&#228;ftigen. Der Fokus des JSR 299 liegt auf der Vereinfachung von Dependency Injection in einer JEE Umgebung zwischen allen Schichten und diese auf vielf&#228;ltige Art und Weise. Vor allem [...]]]></description>
			<content:encoded><![CDATA[<p>Wer wissen m&#246;chte in welche Richtung es in Java EE 6 geht wird nicht darum herumkommen sich mit dem <a href="http://www.jcp.org/en/jsr/detail?id=299">JSR 299</a>, auch Web Beans genannt, zu besch&#228;ftigen. Der Fokus des JSR 299 liegt auf der Vereinfachung von Dependency Injection in einer JEE Umgebung zwischen allen Schichten und diese auf vielf&#228;ltige Art und Weise. Vor allem das Problem von der View (JSF oder JSP) auf EJBs einfach zugreifen zu k&#246;nnen soll damit behoben werden aber auch vieles mehr vereinfacht. Web Beans selbst beschreibt sich auf der <a href="http://seamframework.org/WebBeans">Web Beans Webseite</a> in einem Satz so:</p>
<blockquote><p>
Java Contexts and DependencyInjection (JSR-299) is a new Java standard for dependency injection and contextual lifecycle management.
</p></blockquote>
<p>Wer Erfahrung mit dem <a href="http://www.jboss.com/products/seam/">JBoss Seam Framework</a> hat wird viel Vertrautes im JSR 299 wiederfinden denn &#228;hnlich wie f&#252;r die JPA Spezifikation viel von Hibernate &#252;bernommen wurde ist f&#252;r den JSR 299 viel von Seam &#252;bernommen worden.</p>
<div class="subHeadline">Pr&#228;sentationsfolien</div>
<p>Einen kleinen Einblick in JEE 6 und somit auch in den JSR 299 konnte man schon durch den <a href="http://javathreads.de/2009/03/podcast-interview-mit-dan-allen-ueber-seam-und-jee-6/">Podcast von Dan Allen</a> im Teil 2 h&#246;ren. Nun hat Gavin King eine Pr&#228;sentation &#252;ber den JSR 299 gehalten und diese Folien, welche viele Code Beispiele enthalten, online gestellt.</p>
<div class="singleImgDiv">
<a href="http://in.relation.to/Bloggers/JSR299Presentation"><img src="http://javathreads.de/data/uploads/2009/03/jsr299presentation2.jpg" alt="JSR 299 Pr&#228;sentation von Gavin King" title="JSR 299 Pr&#228;sentation von Gavin King" width="600" height="259" class="borderGray alignnone size-full wp-image-1324" /></a>
</div>
<p>Hier ist der <a href="http://in.relation.to/Bloggers/JSR299Presentation">dazugeh&#246;rige Post</a> auf dem &#8220;In Relation To&#8221; Blog (<a href="http://in.relation.to/service/File/10946">Direktdownload des PDFs</a>).</p>
<div class="subHeadline">Code Beipsiele</div>
<p>Einen kleinen Ausschnitt aus der Pr&#228;sentation m&#246;chte ich direkt hier posten und erl&#228;utern um das Grundprinzip von Dependency Injection mit dem JSR 299 in einer Webanwendung zu verdeutlichen.</p>
<p><strong>Binding Types:</strong><br />
Ein Binding Type l&#228;sst einen Client zwischen verschiedenen Implementierungen (Interface) oder Ableitungen (Klassen) eines bestimmten Typs anhand eines Binding Type Namens w&#228;hlen.</p>
<p>Dazu wird erst der eigentliche Binding Type, &#228;hnliche wie ein EJB Intercetpor, definiert:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#7F0074;">public</span>
<span style="color:#646464">@BindingType</span>
<span style="color:#646464">@Retention</span>(RUNTIME)
<span style="color:#646464">@Target({TYPE,</span> METHOD, FIELD, PARAMETER})
<span style="color:#646464">@interface</span> Informal {}</pre>
</div>
<p>Dieser neue Binding Type mit dem Namen <code>Informal</code> kann nun an einer konkreten Klasse verwendet werden. So wird definiert, dass der Binding Type <code>@Informal</code> zu der konkreten Klasse <code>InformalGreeting</code> geh&#246;rt:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#646464">@Informal</span>
<span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;InformalGreeting <span style="color:#7F0074;"><b>extends</b></span>&#160;Greeting {
  <span style="color:#7F0074;"><b>public</b></span>&#160;String greet(String name) {
    <span style="color:#7F0074;"><b>return</b></span>&#160;<span style="color:#2A00FF;">"hello "</span> + name;
  }
}</pre>
</div>
<p>Jetzt kommt das eigentliche Dependency Injection in der Bussiness Komponente, die selbst z.B. eine EJB oder auch zuk&#252;nftig durch den JSR 299 einfach nur ein POJO sein k&#246;nnte. Die Klasse <code>Printer</code> erh&#228;lt die Informal-Implementierung des Oberklasse <code>Greeter</code> injected. Das wird durch den neuen definierten Typ mit der Annotation <code>@Informal</code> angegeben.</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;Printer {

  <span style="color:#646464">@Informal</span> Greeting greeting;

  <span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>void</b></span>&#160;greet() {
    System.out.println( greeting.greet(<span style="color:#2A00FF;">"Markus"</span>) );
  }
}</pre>
</div>
<p>M&#246;chte man jetzt z.B. noch eine formelle Begr&#252;&#223;ung erm&#246;glichen w&#252;rde man einen zweiten Binding Type erstellen:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#7F0074;">public</span>
<span style="color:#646464">@BindingType</span>
<span style="color:#646464">@Retention</span>(RUNTIME)
<span style="color:#646464">@Target({TYPE,</span> METHOD, FIELD, PARAMETER})
<span style="color:#646464">@interface</span> Formal {}</pre>
</div>
<p>Diesen definiert man anschlie&#223;end an einer weiteren Ableitung der Klasse <code>Greeting</code>:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#646464">@Formal</span>
<span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;InformalGreeting <span style="color:#7F0074;"><b>extends</b></span>&#160;Greeting {
  <span style="color:#7F0074;"><b>public</b></span>&#160;String greet(String name) {
    <span style="color:#7F0074;"><b>return</b></span>&#160;<span style="color:#2A00FF;">"hello "</span> + name;
  }
}</pre>
</div>
<p>M&#246;chte man nun in seiner Business Komponente die formale Begr&#252;&#223;ung verwenden tauscht man lediglich die Annotation aus:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;Printer {

  <span style="color:#646464">@Formal</span> Greeting greeting;

  <span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>void</b></span>&#160;greet() {
    System.out.println( greeting.greet(<span style="color:#2A00FF;">"Markus"</span>) );
  }
}</pre>
</div>
<p>Mehr &#252;ber Binding Types im JSR 299 kann auch in der <a href="http://docs.jboss.org/webbeans/reference/1.0.0.BETA1/de-DE/html/injection.html#d0e1164">Web Beans Referenzdokumentation</a> sogar auf deutsch nachgelesen werden.</p>
<p><strong>Namen und Scope f&#252;r Zugriff mit EL</strong><br />
Das zweite Beispiel soll zeigen wie einfach es in Zukunft werden soll eine Business Komponente der View via EL (Expression Language) zur Verf&#252;gung zu stellen. Dazu wird der unserer Business Komponente (Klasse) <code>Printer</code> einfach die Annotation <code>@Named</code> hinzugef&#252;gt und somit dieser Java Bean ein Name Vergeben (<a href="http://docs.jboss.org/webbeans/reference/1.0.0.BETA1/de-DE/html/intro.html#d0e484">siehe auch Referenzdokumentation</a>):</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#646464">@Named</span>(<span style="color:#2A00FF;">"printer"</span>)
<span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;Printer {

  <span style="color:#646464">@Informal</span> Greeting greeting;

  <span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>void</b></span>&#160;greet() {
    System.out.println( greeting.greet(<span style="color:#2A00FF;">"Markus"</span>) );
  }
}</pre>
</div>
<p>In der View kann ab sofort &#252;ber den Namen &#8220;<code>printer</code>&#8221; darauf zugegriffen werden:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:commandButton </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;Say Hello&quot;</span><span style="color: #FF0000; "> action</span><span style="color: #0000FF; ">=&quot;#{printer.greet}&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
</div>
<p>Jetzt kann man der Business Komponente noch einen Scope (Geltungsbereich) geben. Bereits <a href="http://docs.jboss.org/webbeans/reference/1.0.0.BETA1/de-DE/html/scopescontexts.html#d0e1698">vorhandene Scopes</a> sind <code>@RequestScoped</code>, <code>@SessionScoped</code>, <code>@ApplicationScoped</code> und <code>@ConversationScoped</code>. In diesem Beispiel wird <code>@RequestScoped</code> verwendet. Somit steht eine Instanz dieser Komponente einen kompletten Request lang zur Verf&#252;gung.<br />
Um die Begr&#252;&#223;ung etwas pers&#246;nlicher zu machen kann man nun noch den Namen f&#252;r die Begr&#252;&#223;ung &#252;ber die View angeben und direkt in der Business Komponente vie EL setzen. Dazu wird noch ein Attribut <code>name</code> ben&#246;tigt:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#646464">@RequestScoped</span>
<span style="color:#646464">@Named</span>(<span style="color:#2A00FF;">"printer"</span>)
<span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;Printer {

  <span style="color:#646464">@Informal</span> Greeting greeting;
  <span style="color:#7F0074;"><b>private</b></span>&#160;String name;

  <span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>void</b></span>&#160;greet() {
    System.out.println( greeting.greet(name) );
  }

  <span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>void</b></span>&#160;setName(String name) { this.name=name; }
  <span style="color:#7F0074;"><b>public</b></span>&#160;String getName() { <span style="color:#7F0074;"><b>return</b></span>&#160;name; }
}</pre>
</div>
<p>Hier die dazugeh&#246;rige angepasste View:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:inputText </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;#{printer.name}&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">h:commandButton </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;Say Hello&quot;</span><span style="color: #FF0000; "> action</span><span style="color: #0000FF; ">=&quot;#{printer.greet}&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">h:form</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Die hier aufgezeigten zwei Beispiele zeigen nur einen kleinen Teil des JSR 299. Aber gerade die einfache Annotation <code>@Named</code> und die verf&#252;gbaren Scopes ist ein riesen Schritt in die Vereinfachung der Entwicklung von Webanwendungen. Wie schon erw&#228;hnt sind diese Erneuerungen in JEE 6 heute in JEE 5 durch Seam auch schon m&#246;glich.</p>
<p>Wer mehr &#252;ber den JSR 299 wissen m&#246;chte sollte sich die <a href="http://in.relation.to/Bloggers/JSR299Presentation">Pr&#228;sentation von Gavin King</a>, das <a href="http://jcp.org/en/jsr/detail?id=299">JSR 299 selbst</a>, die <a href="http://docs.jboss.org/webbeans/reference/1.0.0.BETA1/de-DE/html/">Referenzdokumentation</a> sowie die <a href="http://docs.jboss.org/webbeans/reference/1.0.0.ALPHA2/en-US/html/ri.html">Referenzimplementierung mit seinen Beispielen</a> mal genauer anschauen. Alternativ kann man sich nat&#252;rlich auch einfach mit <a href="http://www.jboss.com/products/seam/">JBoss Seam</a> besch&#228;ftigen, welches unter anderem die Basis f&#252;r JSR 299 ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2009/03/was-kommt-mit-jee-6-jsr-299-web-beans-praesentation-von-gavin-king/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

