<?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; Markus Kühle</title>
	<atom:link href="http://javathreads.de/author/nec/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>JBoss AS 7 &#8211; MySQL Datasource konfigurieren</title>
		<link>http://javathreads.de/2011/09/jboss-as-7-mysql-datasource-konfigurieren/</link>
		<comments>http://javathreads.de/2011/09/jboss-as-7-mysql-datasource-konfigurieren/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 20:23:01 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[JBoss AS]]></category>
		<category><![CDATA[JBoss AS 7]]></category>
		<category><![CDATA[Konfiguration]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2881</guid>
		<description><![CDATA[Mit dem JBoss Application Server 7 hat sich grundlegendes zu seinen Vorg&#228;ngern ge&#228;ndert und das gilt auch f&#252;r das Einrichten einer Datenbankverbindung (Datasource). Im folgenden die Schritte die zu tun sind um eine Datasource zu einer MySQL Datenbank f&#252;r einen JBoss 7 Server im Standalone Modus einzurichten. Den aktuellsten JDBC Treiber f&#252;r die MySQL Datenbank [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem <a href="http://www.jboss.org/as7">JBoss Application Server 7</a> hat sich grundlegendes zu seinen Vorg&#228;ngern ge&#228;ndert und das gilt auch f&#252;r das Einrichten einer Datenbankverbindung (Datasource). Im folgenden die Schritte die zu tun sind um eine Datasource zu einer MySQL Datenbank f&#252;r einen JBoss 7 Server im Standalone Modus einzurichten. Den aktuellsten JDBC Treiber f&#252;r die MySQL Datenbank kannst du <a href="http://dev.mysql.com/downloads/connector/j/">mysql.com</a> herunterladen.</p>
<p>Im JBoss-Home Verzeichnis <code>/standalone/configuration</code> die <code><strong>standalone.xml</strong></code> Datei zum Bearbeiten &#246;ffnen. Darin befindet sich der Abschnitt zum Datasources Subsystem:</p>
<div class="codebox">
<pre style='color:#000000;background:#ffffff;'><span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>subsystem</span> xmlns=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>urn</span><span style='color:#2a00ff; '>:</span><span style='color:#3f3fbf; '>jboss:domain:datasources:1.0</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>></span>
  ...
<span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>subsystem</span><span style='color:#7f0055; '>></span>
</pre>
</div>
<p>In diesem Subsystem wird zwischen der Beschreibung der Datenbankverbindung (<code>datasource</code>) und dem Treiber (<code>driver</code>) unterschieden. F&#252;r die MySQL Datenbank wird neben der bereits per Default konfigurierten Datasource <code>ExampleDS</code> die <code>MySqlDS</code> hinzugef&#252;gt. Dazu wird der JNDI-Name, der Pool-Name sowie die Verbindungsdaten konfiguriert.<br />
Der Text im Element <code>&lt;driver&gt;com.mysql&lt;/driver&gt;</code> ist dabei ein Verweis auf den konfigurierten MySQL Treiber. Der Treiber wird direkt neben den <code>datasource</code> Elementen im eigenen Element <code>driver</code> beschrieben. Die einfachste und schnellste Art den Treiber zu installieren ist den Dateinamen des Treibers direkt anzugeben. In meinem Fall ist es der aktuellste Treiber <code>mysql-connector-java-5.1.17.jar</code>.</p>
<p>Der folgende Ausschnitt aus dem <code>datasources</code> Element zeigt die Konfiguration f&#252;r die MySQL Datenbank:</p>
<div class="codebox">
<pre style='color:#000000;background:#ffffff;'><span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>datasources</span><span style='color:#7f0055; '>></span>

  ...

  <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>datasource</span> jndi-name=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>java:jboss/datasources/11TipperSqlDS</span><span style='color:#2a00ff; '>"</span> pool-name=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>11TipperSqlDS</span><span style='color:#2a00ff; '>"</span>
    enabled=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>true</span><span style='color:#2a00ff; '>"</span> jta=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>true</span><span style='color:#2a00ff; '>"</span> use-java-context=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>true</span><span style='color:#2a00ff; '>"</span> use-ccm=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>true</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>connection-url</span><span style='color:#7f0055; '>></span>
      jdbc:mysql://localhost:3306/11tipper
    <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>connection-url</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>driver</span><span style='color:#7f0055; '>></span>
      mysql-connector-java-5.1.17.jar
    <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>driver</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>pool</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>min-pool-size</span><span style='color:#7f0055; '>></span>
        10
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>min-pool-size</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>max-pool-size</span><span style='color:#7f0055; '>></span>
        100
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>max-pool-size</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>prefill</span><span style='color:#7f0055; '>></span>
        true
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>prefill</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>use-strict-min</span><span style='color:#7f0055; '>></span>
        false
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>use-strict-min</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>flush-strategy</span><span style='color:#7f0055; '>></span>
        FailingConnectionOnly
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>flush-strategy</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>pool</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>security</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>user-name</span><span style='color:#7f0055; '>></span>
        db-username
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>user-name</span><span style='color:#7f0055; '>></span>
      <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>password</span><span style='color:#7f0055; '>></span>
        db-password
      <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>password</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>security</span><span style='color:#7f0055; '>></span>
  <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>datasource</span><span style='color:#7f0055; '>></span>

  <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>driver</span> name=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>mysql-connector-java-5.1.17.jar</span><span style='color:#2a00ff; '>"</span> module=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>com.mysql</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>xa-datasource-class</span><span style='color:#7f0055; '>></span>
      com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
    <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>xa-datasource-class</span><span style='color:#7f0055; '>></span>
  <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>driver</span><span style='color:#7f0055; '>></span>
<span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>datasources</span><span style='color:#7f0055; '>></span>
</pre>
</div>
<p>Der XML-Code kann &#252;brigens einfach unformatiert in die <code>standalone.xml</code> eingef&#252;gt werden. Der JBoss formatiert diese Datei nach einem Start selbst noch einmal neu.</p>
<p>W&#252;rde der JBoss AS nun im Standalone Modus gestartet werden erscheint folgende Fehlermeldung in der Console:</p>
<div class="codebox">
21:45:30,363 INFO  [org.jboss.as.controller] (Controller Boot Thread) Service status report<br />
   New missing/unsatisfied dependencies:<br />
      service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (missing)
</div>
<p>Die einfachste Art den fehldenden Treiber zu installieren ist diesen direkt in dem <code>deployments</code> Ordner zu kopieren und ihn zu &#8220;deployen&#8221;. Der JBoss AS versteht jeden normalen JDBC Treiber und kann ihn als Deployment laden:</p>
<div style="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/09/110918_JBoss7DeploymentsMySQLDriver.jpg" alt="" title="JBoss 7 - MySQL Treiber als Deployment" width="630" height="331" class="alignnone size-full wp-image-2895" />
</div>
<p>Startet man jetzt den JBoss erneut erscheint folgende Meldung in der Console:</p>
<div class="codebox">
21:53:48,711 INFO  [org.jboss.as.controller] (Controller Boot Thread) Service status report<br />
   New missing/unsatisfied dependencies:<br />
      service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (missing)</p>
<p>21:53:48,718 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) Starting deployment of &#8220;mysql-connector-java-5.1.17.jar&#8221;<br />
21:53:48,803 INFO  [org.jboss.as.jpa] (MSC service thread 1-2) added javax.persistence.api dependency to mysql-connector-java-5.1.17.jar<br />
21:53:48,823 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1)<br />
<strong>21:53:48,831 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) Bound data source [java:jboss/datasources/11TipperSqlDS]</strong><br />
21:53:48,832 INFO  [org.jboss.as] (MSC service thread 1-4) JBoss AS 7.0.1.Final &#8220;Zap&#8221; started in 14103ms &#8211; Started 181 of 240 services (59 services are passive or on-demand)<br />
21:53:48,909 INFO  [org.jboss.as.server.controller] (DeploymentScanner-threads &#8211; 2) Deployed &#8220;mysql-connector-java-5.1.17.jar&#8221;<br />
<strong>21:53:48,910 INFO  [org.jboss.as.controller] (DeploymentScanner-threads &#8211; 2) Service status report<br />
   Newly corrected services:<br />
      service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (now available)</strong>
</div>
<p>Die Datasource wurde erfolgreich konfiguriert und ist nun unter dem JNDI Namen <code>java:jboss/datasources/11TipperSqlDS</code> verf&#252;gbar.</p>
<h4>Datenbanktreiber als Modul</h4>
<p>Es gibt noch eine zweite Variante wie man den Treiber installieren kann: und zwar als Modul. In dem <code>driver</code> Element, aus dem obigen <code>datasources</code> Listing wurde als Modulname <code>com.mysql</code> angegeben. Das bedeutet, dass im Verzeichnis <code>modules</code> die Unterordner <code>com/mysql</code> erwartet wird. In diesem Modulverzeichnis wird das Unterverzeichnis <code>main</code> erwartet in dem die Modulbeschreibung sowie die Resource, in unserem Fall der Treiber, liegt. Bei mir sieht das dann wie folgt aus:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/09/110918_JBoss7ModuleMySQLDriver.jpg" alt="" title="JBoss 7 - MySQL Treiber als Modul" width="630" height="355" class="alignnone size-full wp-image-2900" />
</div>
<p>Die Datei <code>mysql-connector-java-5.1.17.jar.index</code> wird dabei automatisch vom JBoss generiert.</p>
<p>Die Datei <code>module.xml</code> beschreibt das Modul und die dazugeh&#246;rige Resource/Jar/Treiber und sieht so aus:</p>
<div class="codebox">
<pre style='color:#000000;background:#ffffff;'><span style='color:#7f0055; '>&lt;?</span><span style='color:#7f0055; '>xml</span> <span style='color:#7f0055; '>version</span>="1.0" <span style='color:#7f0055; '>encoding</span>=<span style='color:#2a00ff; '>"UTF-8"</span><span style='color:#7f0055; '>?></span>

<span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>module</span> xmlns=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>urn</span><span style='color:#2a00ff; '>:</span><span style='color:#3f3fbf; '>jboss:module:1.0</span><span style='color:#2a00ff; '>"</span> name=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>com.mysql</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>></span>
  <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>resources</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>resource-root</span> path=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>mysql-connector-java-5.1.17.jar</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>/></span>
  <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>resources</span><span style='color:#7f0055; '>></span>
  <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>dependencies</span><span style='color:#7f0055; '>></span>
    <span style='color:#7f0055; '>&lt;</span><span style='color:#7f0055; '>module</span> name=<span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>javax.api</span><span style='color:#2a00ff; '>"</span><span style='color:#7f0055; '>/></span>
  <span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>dependencies</span><span style='color:#7f0055; '>></span>
<span style='color:#7f0055; '>&lt;/</span><span style='color:#7f0055; '>module</span><span style='color:#7f0055; '>></span>
</pre>
</div>
<p>Startet man mit dieser Konfiguration (den Treiber als Modul) den JBoss erneut so findet man im Log keine Info mehr, dass eine Abh&#228;ngigkeit fehlt, sondern findet das installierte Modul wesentlich fr&#252;her in der Console wieder. Und zwar wenn das Subsystem <code>datasources</code> gestartet wird:</p>
<div class="codebox">
21:59:42,347 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]<br />
<strong>21:59:42,412 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) Bound data source [java:jboss/datasources/11TipperSqlDS]</strong>
</div>
<p>Verwendet man ein Modul als Treiberkonfiguration kann man in der <code>standalone.xml</code> in der <code>datasource</code> und <code>driver</code> Beschreibung auch irgendein Name wie z.B. &#8220;MeinMySqldDB&#8221; verwenden. Es muss dann nicht zwingend der Name des Treibe-Jars sein. Somit w&#228;re man im Namen unabh&#228;ngig von der eigentlich verwendeten Version.</p>
<h4>Administration Console</h4>
<p>Egal ob man den Datenbanktreiber als Deployment oder als Modul installiert in beiden F&#228;llen muss mann die konfigurierte Datasource in der Administrationskonsole wiederfinden. Auf die gelangt man in der Default Installation mit <code>http://localhost:8080/console</code>. Es m&#252;sste dann in etwa so aussehen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/09/110918_JBossAdminConsole.jpg" alt="" title="JBoss 7 Administrationskonsole - MySQL Datasource" width="630" height="448" class="alignnone size-full wp-image-2903" />
</div>
<p>In der <code>persistence.xml</code> kann nun mit dem JNDI Name auf die Datasource zugegriffen werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2011/09/jboss-as-7-mysql-datasource-konfigurieren/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial: Mit Java EE 6 unter Eclipse Helios und mit Maven Unterst&#252;tzung starten</title>
		<link>http://javathreads.de/2011/05/tutorial-mit-java-ee-6-unter-eclipse-helios-und-mit-maven-unterstuetzung-starten/</link>
		<comments>http://javathreads.de/2011/05/tutorial-mit-java-ee-6-unter-eclipse-helios-und-mit-maven-unterstuetzung-starten/#comments</comments>
		<pubDate>Fri, 13 May 2011 21:47:07 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JBoss Tools]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2557</guid>
		<description><![CDATA[Ziel des Tutorials
Am Ende dieses Tutorials ist ein deploytes Java EE 6 Projekt mit JSF 2, CDI, EJB 3.1 und JPA 2 auf dem JBoss 6 vorhanden und aufrufbar. Dabei wird die Eclipse WTP Untest&#252;tzung funktionieren, der JBoss direkt aus Eclipse heraus gestartet und Maven als Build Tool verwendet werden.



Kleine Anmerkung vorab: Nicht von der [...]]]></description>
			<content:encoded><![CDATA[<h3>Ziel des Tutorials</h3>
<p>Am Ende dieses Tutorials ist ein deploytes Java EE 6 Projekt mit JSF 2, CDI, EJB 3.1 und JPA 2 auf dem JBoss 6 vorhanden und aufrufbar. Dabei wird die Eclipse WTP Untest&#252;tzung funktionieren, der JBoss direkt aus Eclipse heraus gestartet und Maven als Build Tool verwendet werden.</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseWTPHotDeploymentBrowser.jpg" alt="" title="Eclipse WTP Hot Deployment - Browser" width="630" height="233" class="alignnone size-full wp-image-2768" />
</div>
<p>Kleine Anmerkung vorab: Nicht von der L&#228;nge des Tutorials abschrecken lassen &#8211; es sind eigentlich nur sehr viele Bilder. Kennt man die Technologien und Tools dauert das Erstellen dieses Projekts nur wenige Minuten.</p>
<p>Aufbau des Tutorials:</p>
<ul class="gliederung">
<li>
<a href="#SoftwareUndTools">Herunterladen der notwendigen Software und Tools</a></p>
<ul class="subGliederung">
<li><a href="#SoftwareUndToolsEclipse">Eclipse herunterladen<a/></li>
<li><a href="#SoftwareUndToolsJBoss">JBoss AS herunterladen</a></li>
<li><a href="#SoftwareUndToolsMaven">Maven herunterladen</a></li>
</ul>
</li>
<li><a href="#EclipseKonfigurieren">Eclipse konfigurieren</a>
<ul class="subGliederung">
<li><a href="#EclipseKonfigurierenJBossTools">JBoss Tools</a></li>
<li><a href="#EclipseKonfigurierenJBossServerRuntime">JBoss 6 AS Server Runtime</a></li>
<li><a href="#EclipseKonfigurierenMaven">Maven</a></li>
<li><a href="#EclipseKonfigurierenMavenExtrasWTP">Maven Extras &#8211; WTP </a></li>
</ul>
<li><a href="#JavaEE6Project">Java EE 6 Projekt erstellen</a>
<ul class="subGliederung">
<li><a href="#JavaEE6ProjectMaven">Projekt mit Maven generieren</a></li>
<li><a href="#JavaEE6ProjectEclipseJSF">JSF Capabilities hinzuf&#252;gen</a></li>
<li><a href="#JavaEE6ProjectEclipseCDI">CDI Support hinzuf&#252;gen</a></li>
<li><a href="#JavaEE6ProjectProjektDeployen">Projekt auf den JBoss deployen</a></li>
</ul>
</li>
<li><a href="#WieGehtEsWeiter">Wie geht es weiter?</a></li>
</ul>
<h3><a name="SoftwareUndTools" class="noLink">Herunterladen und Installieren aller ben&#246;tigten Software und Tools</a></h3>
<h4><a name="SoftwareUndToolsEclipse" class="noLink">Eclipse Helios f&#252;r Java EE Entwicklung herunterladen</a></h4>
<p>Als erstes wird Eclipse in der Java EE Entwickler Version von <a href="http://www.eclipse.org/downloads" title="Eclipse Helios f&#252;r die Java EE Entwicklung">eclipse.org</a> heruntergeladen.</p>
<div class="singleImgDiv">
<a href="http://www.eclipse.org/downloads" title="Eclipse Helios f&#252;r die Java EE Entwicklung"><img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseHeliosJeeDownload.png" alt="" title="Eclipse Helios f&#252;r die Java EE Entwicklung" width="630" height="143" class="borderGray alignnone size-full wp-image-2566" /></a>
</div>
<p>Das heruntergeladene Archiv am Ort deiner Wahl entpacken &#8211; z.B. einfach im Laufwerk C.</p>
<h4><a name="SoftwareUndToolsJBoss" class="noLink">JBoss AS 6</a></h4>
<p>In diesem Tutorial wird der JBoss 6 Final als Application Server verwendet denn dieser implementiert die <a href="http://javathreads.de/2010/01/java-ee-6-web-profile-technologien">Java EE Web Profile</a> Spezifikation. Der JBoss AS kann unter <a href="http://www.jboss.org/jbossas/downloads.html" title="JBoss Application Server 6 Final">jboss.org</a> heruntergeladen werden.</p>
<div class="singleImgDiv">
<a href="http://www.jboss.org/jbossas/downloads.html" title="JBoss Application Server 6 Final"><br />
<img src="http://javathreads.de/data/uploads/2011/05/1105_JBossAs6Download.png" alt="" title="JBoss Application Server 6 Final" width="630" height="129" class="borderGray alignnone size-full wp-image-2569" /><br />
</a>
</div>
<p>Nach dem Herunterladen das Archiv auch wieder am Ort deiner Wahl entpacken &#8211; kann z.B. auch wieder das Laufwerk C: sein.</p>
<h4><a name="SoftwareUndToolsMaven" class="noLink">Maven 3</a></h4>
<p>Um den Projektstart zu vereinfachen und alle Abh&#228;ngigkeiten automatisch zu beziehen wird Maven 3 verwendet. Sp&#228;ter wird auch das Grundger&#252;st unseres ersten Java EE Hello World Projekts mit Maven generiert. Somit muss Maven 3 &#8220;installiert&#8221; werden. Maven kann von <a href="http://maven.apache.org">http://maven.apache.org</a> heruntergeladen werden:</p>
<div class="singleImgDiv">
<a href="http://maven.apache.org/download.html"><img src="http://javathreads.de/data/uploads/2011/05/1105_Maven303Download.png" alt="" title="Maven 3.0.3" width="630" class="alignnone size-full wp-image-2622" /></a>
</div>
<p>Maven muss auch wieder an einem Ort deiner Wahl entpackt und anschlie&#223;end das <code>maven/bin</code> Verzeichnis im Pfad (Umgebungsvariable <code>PATH</code>) angegeben werden damit der Befehl <code>mvn</code> in der Kommandozeile gefunden wird.<br />
<br/>Installationsanleitung f&#252;r Linux (Ubunutu 11.04) <span id="mavenAnleitungLinuxDivLink" class="link" onclick="javascript:showMavenLinuxInstall()">anzeigen</span>.</p>
<div id="mavenAnleitungLinuxDiv" style="display:none">
Weil Maven 3 bisher noch nicht im Package Repository vorhanden ist muss es von Hand installiert werden.<br />
Herunterladen und entpacken der letzten Version:</p>
<div class="codebox">
$ cd /home/&lt;myusername&gt;<br />
$ wget http://ftp.heanet.ie/mirrors/www.apache.org/dist//maven/binaries/apache-maven-3.0.3-bin.tar.gz<br />
$ tar -xzvf apache-maven-3.0.3-bin.tar.gz
</div>
<p>Nach <code>/usr/local</code> kopieren:</p>
<div class="codebox">
$ sudo mkdir /usr/local/apache-maven<br />
$ sudo cp -R apache-maven-3.0.3 /usr/local/apache-maven/
</div>
<p>Anschlie&#223;end muss dieser Maven Ordner noch mit in die Pfad-Umgebungsvariable aufgenommen werden. In diesem Schritt werden gleich noch weitere ben&#246;tigte Umgebungsvariablen definiert:</p>
<div class="codebox" style="margin-top: 5px;">
$ sudo vi /etc/environment
</div>
<p>Neue Umgebungsvariablen hinzuf&#252;gen:</p>
<div class="codebox">
JAVA_HOME=/usr/lib/jvm/java-6-sun<br />
M2_HOME=/usr/local/apache-maven/apache-maven-3.0.3<br />
MAVEN_HOME=/usr/local/apache-maven/apache-maven-3.0.3<br />
M2=/usr/local/apache-maven/apache-maven-3.0.3/bin
</div>
<p>Und die Variable PATH noch um folgenden Pfad erweitern:</p>
<div class="codebox">
/usr/local/apache-maven/apache-maven-3.0.3/bin
</div>
<p>Sieht bei mir anschlie&#223;end so aus:</p>
<div class="codebox">
PATH=&#8221;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/apache-maven/apache-maven-3.0.3/bin&#8221;
</div>
<p>Nach einem erneuten Login in der Konsole pr&#252;fen ob Maven l&#228;uft:</p>
<div class="codebox">
markus@Lap:~$ mvn -version<br />
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)<br />
Maven home: /usr/local/apache-maven/apache-maven-3.0.3<br />
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.<br />
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre<br />
Default locale: de_DE, platform encoding: UTF-8<br />
OS name: &#8220;linux&#8221;, version: &#8220;2.6.38-8-generic&#8221;, arch: &#8220;i386&#8243;, family: &#8220;unix&#8221;
</div>
</div>
<h3><a name="EclipseKonfigurieren" class="noLink">Eclipse konfigurieren</a></h3>
<p>Zuvor wurde bereits die  die aktuelle  Eclipse Helios (3.6) Java EE IDE heruntergeladen sowie entpackt und diese sollte sp&#228;testens jetzt gestartet werden. Beim ersten Start von Eclipse wir gefragt wo man seinen Workspace hinlegen m&#246;chte. Wieder einfach einen Ort deiner Wahl angeben und das H&#228;ckchen bei &#8220;nicht noch einmal fragen&#8221; setzen.</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseHeliosJeeAbout.jpg" alt="" title="Eclipse Helios f&#252;r Java EE Entwickler" width="562" height="182" class="alignnone size-full wp-image-2715" />
</div>
<p>F&#252;r das Java EE Projekt mit Maven Unterst&#252;tzung werden zum einen die <a href="http://www.jboss.org/tools">JBoss Tools</a> und zum anderen das <a href="http://m2eclipse.sonatype.org/">Maven2Eclipse</a> Plugin ben&#246;tigt. Dabei spielen die JBoss Tools bei der Entwicklung von Java EE Projekten unter Eclipse generell eine sehr wichtige Rollen denn sie decken die meisten Themen wie z.B. JSF 2.0, CDI oder JPA sehr gut ab.</p>
<h4><a name="EclipseKonfigurierenJBossTools" class="noLink">JBoss Tools Eclipse Plugin</h3>
</h4>
<p>Die aktuelle Version 3.2 der JBoss Tools gibt es dabei noch gar nicht so lange denn sie wurde erst Mitte Februar Final. Die JBoss Tools werden am einfachsten &#252;ber die offizielle Update Seite installiert: <a href="http://download.jboss.org/jbosstools/updates/stable/helios/">http://download.jboss.org/jbosstools/updates/stable/helios/</a><br />
Dazu in Eclipse im &#8220;Hauptmen&#252;->Help->Install New Software&#8230;&#8221; klicken. Im aufkommenden Dialog den Button &#8220;Add&#8221; klicken um die Update Seite hinzuzuf&#252;gen:</p>
<div class="singleImgDiv">
<a href="http://javathreads.de/data/uploads/2011/05/1105_EclipseAddRepository.png"><img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseAddRepository.png" alt="" title="JBoss Tools Update Seite hinzuf&#252;gen" width="630" height="405" class="alignnone size-full wp-image-2586" /></a>
</div>
<p>Diesen Dialog mit dem Button &#8220;Add&#8221; beenden und anschlie&#223;end wird man erst einmal durch den Schriftzug &#8220;Pending&#8230;&#8221; sehen, dass das Repository geladen wird. Das kann unter Umst&#228;nden eine ganze Weile dauern:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossToolsAddRepPending.png" alt="" title="JBoss Tools Update Seite - Repository wird geladen" width="630" height="159" class="borderGray alignnone size-full wp-image-2588" />
</div>
<p>Sobald das Repository geladen wurde ist eine Liste mit allen m&#246;glichen Gruppen zu sehen. Die bisher bekanntesten Tools wie z.B. die JBoss AS Tools, Seam Tools oder Hibernate Tools befinden sich in der Gruppe &#8220;Web und Java EE Development&#8221;. Man k&#246;nnte jetzt alles durchgehen und nur die ben&#246;tigten Tools selektieren aber der Einfachheit halber selektiere ich &#8220;All JBoss Tools 3.2.0&#8243;:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossToolsAddRepList.png" alt="" title="JBoss Tools Update Seite - Tools Liste" width="630" height="361" class="alignnone size-full wp-image-2589" />
</div>
<p>Anschlie&#223;end den Button &#8220;Next&#8221; klicken. Jetzt werden die Abh&#228;ngigkeiten gepr&#252;ft und das dauert auch wieder eine kleine Ewigkeit.<br />
Sobald die Pr&#252;fung fertig ist sieht man noch einmal die Liste aller Tools die installiert werden sollen. In der Liste taucht sicherlich das ein oder andere Tool auf welches nicht wirklich ben&#246;tigt wird aber es schadet auch nicht. Den Dialog mit &#8220;Next&#8221; beenden.<br />
Auf dem letzten Dialog die Lizensvereinbarungen akzeptieren und den Button &#8220;Finish&#8221; klicken. Anschlie&#223;end beginnt die Installation der JBoss Tools:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossToolsInstalling-.jpg" alt="" title="Eclipse JBoss Tools - Installation" width="613" height="151" class="alignnone size-full wp-image-2728" />
</div>
<p>Die Installation verlangt einen Eclipse Neustart.</p>
<h4><a name="EclipseKonfigurierenJBossServerRuntime" class="noLink">JBoss Server Runtime konfigurieren</a></h4>
<p>Das sp&#228;tere Projekt soll direkt von Eclipse heraus in den JBoss Server deployt werden. Dazu muss der JBoss als Server Runtime Environment in Eclipse konfiguriert werden. Um das zu tun die Eclipse Eigenschaften aufrufen &#8220;Hauptmen&#252;->Window->Preferences&#8221; und die Optionen mit dem Wort &#8220;Server&#8221; filtern. Unter dem Punkt &#8220;Runtime Environments&#8221; wird der JBoss Server als Runtime hinzugef&#252;gt:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/EclipseJBossServerRuntimeEnvironment.png" alt="" title="Eclipse Preferences - JBoss als Server Runtime konfigurieren" width="630" height="286" class="alignnone size-full wp-image-2606" />
</div>
<p>Den Button &#8220;Add&#8221; klicken und im n&#228;chsten Dialog unter &#8220;JBoss Community&#8221; den &#8220;JBoss 6.0 Runtime&#8221; auszuw&#228;hlen. Der Einfachheit halber direkt die Checkbox &#8220;Create a new local server&#8221; selektieren &#8211; das erspart die anschlie&#223;ende Konfiguration einer Server Instanz:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/EclipseJBoss6AndLocalServer.png" alt="" title="Eclipse JBoss 6 Runtime und Local Server" width="613" height="313" class="alignnone size-full wp-image-2607" />
</div>
<p>Mit dem Button &#8220;Next&#8221; in den letzten Dialog wechseln und dort das Verzeichnis ausw&#228;hlen indem der JBoss entpackt wurde (z.B. <code>C:\jboss-6.0.0</code>). Als JRE muss das in Eclipse konfigurierte JDK ausgew&#228;hlt werden. Unter Configuration default ausw&#228;hlen. Den Wizzard mit dem Button &#8220;Finish&#8221; beenden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossToolsRuntimeConfig1.jpg" alt="" title="Eclipse JBoss Runtime Konfiguration" width="613" height="341" class="alignnone size-full wp-image-2750" />
</div>
<p>Nun ist die konfigurierte Server Runtime aufgelistet und kann verwendet werden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossRuntime.jpg" alt="" title="Eclipse JBoss Runtime" width="630" height="247" class="alignnone size-full wp-image-2736" />
</div>
<p>In dem Server-Panel ist auch die lokale Instanz zu sehen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/EclipseJBossRuntime.png" alt="" title="Eclipse JBoss Runtime Lokale Instanz" width="630" height="109" class="alignnone size-full wp-image-2608" />
</div>
<p>Als letzte Konfiguration der eingebetteten JBoss Server Instanz wird jetzt noch das Deployment-Verzeichnis ge&#228;ndert. Per default wird die deployte Anwendung im lokalen Workspace in einen versteckten Ordner deployt. Ich mag es lieber wenn meine Anwendung auch mit direkt in den JBoss deploy Ordner deployt wird und dann auch dort zu finden ist.<br />
Um das Deployment-Verzeichnis zu &#228;ndern mit einem Doppelklick auf die JBoss Server Instanz die Konfiguration &#246;ffnen. Anschlie&#223;end am unterem Ende des Fensters auf den Tab &#8220;Deployment&#8221; klicken. Auf der Deployment Seite nun die Einstellung &#8220;Use JBoss deploy folder&#8221; selektieren und die Einstellungen speichern:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossDeployFolder.jpg" alt="" title="Eclipse JBoss Settings Deployment-Verzeichnis" width="630" height="282" class="alignnone size-full wp-image-2826" />
</div>
<p>Nun kann der Server endlich durch klick auf den gr&#252;nen Pfeil gestartet werden &#8211; er sollte ohne Probleme hochfahren. In der Console sollte am Ende die Startdauer zu sehen sein:</p>
<div class="codebox">
22:03:02,852 INFO  [AbstractServer] Starting: JBossAS [6.0.0.Final "Neo"]<br />
&#8230;<br />
22:03:31,850 INFO  [org.jboss.bootstrap.impl.base.server.AbstractServer] JBossAS [6.0.0.Final "Neo"] Started in 28s:994ms
</div>
<p>Im Browser l&#228;sst sich der JBoss auch bereits aufrufen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossEmptyStartedBrowser.jpg" alt="" title="JBoss Tools Server Runtime gestartet" width="630" height="232" class="alignnone size-full wp-image-2674" />
</div>
<p>Wunderbar &#8211; der Server l&#228;uft =).</p>
<h4><a name="EclipseKonfigurierenMaven" class="noLink">Maven Unterst&#252;tzung in Eclipse</a></h4>
<p>Um Maven direkt aus Eclipse heraus verwenden zu k&#246;nnen ben&#246;tigt man das <a href="http://m2eclipse.sonatype.org/">m2eclipse Plugin von Sonatype</a>. Die Plugin Installation wird wieder &#252;ber das &#8220;Hauptmen&#252;->Help->Install New Software&#8230;&#8221; gestartet. In meiner Helios Version war die Update URL f&#252;r das m2eclipse Plugin bereits konfiguriert. Ansonsten einfach folgende Update URL hinzuf&#252;gen: <a href="http://m2eclipse.sonatype.org/sites/m2e">http://m2eclipse.sonatype.org/sites/m2e</a><br />
Ist dieses Update URL selektiert wird das Repository geladen. In diesem Fall ist nur ein Plugin selektierbar und das muss nat&#252;rlich selektiert werden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseMavenM2Eclipse.png" alt="" title="Eclipse Maven - m2eclipse Plugin installieren" width="630" height="359" class="alignnone size-full wp-image-2593" />
</div>
<p>Den Dialog mit &#8220;Next&#8221; weiterf&#252;hren.<br />
Anschlie&#223;end kommen wieder die Installationsdetails und die Lizensbedingungen. Den Wizzard mit &#8220;Finish&#8221; beenden und abwarten bis man aufgefordert wird Eclipse neu zu starten.<br />
Es kann sein, dass nach dem Neustart das Maven Plugin meldet, dass Eclipse mit einem JDK gestartet werden muss:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1104_EclipseMavenJDK.jpg" alt="" title="Eclipse Maven JDK Hinweis" width="602" height="192" class="alignnone size-full wp-image-2829" />
</div>
<p>In diesem Fall die Datei <code>eclipse.ini</code> &#246;ffnen (liegt direkt neben der Datei <code>eclipse.exe</code>) und unter dem Ausdruck <code>openFile</code> und oberhalb von <code>-vmargs</code> den Verweis auf die JDK angeben:</p>
<div class="codebox">
openFile<br />
-vm<br />
C:\Java\JDK\1.6\bin\javaw.exe<br />
-vmargs
</div>
<p>Mehr zu der Datei <code>eclipse.ini</code> findest du auch im <a href="http://wiki.eclipse.org/Eclipse.ini">Eclipse Wiki</a>.</p>
<p>Nach dem Neustart kann in den Eclipse Preferences (Hauptmen&#252;->Window->Preferences) die Maven Einstellungen konfigurieren. Darunter auch welches Maven verwendet werden soll. Das Plugin bringt eine Embedded-Version mit. In Eclipse reicht diese embedded Version eigentlich aus. Es empfiehlt sich aber die eigene Installation zu verwenden, so dass man auf der Kommandozeile die gleiche Maven Version verwendet wie in Eclipse. Dazu in &#8220;Maven->Installations&#8221; mit dem Button Add die eigene Installation hinzuf&#252;gen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/EclipseMavenPreferences.png" alt="" title="Eclipse Maven - Preferences" width="630" class="alignnone size-full wp-image-2595" />
</div>
<p>Nachdem das Maven Plugin installiert wurde und man evtl. die Maven Installation angepasst hat dauert es einen Moment bis Maven seinen Index aktualisiert hat. Sofern das Maven Index Update noch l&#228;uft sieht man dies in dem Progress Panel:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseMavenIndexUpdate.png" alt="" title="Eclipse Maven - Index Update" width="630" height="203" class="alignnone size-full wp-image-2598" />
</div>
<h4><a name="EclipseKonfigurierenMavenExtrasWTP" class="noLink">Maven Extras &#8211; m2eclipse-extras</a></h4>
<p>Es fehlt noch das Maven Integration for Eclipse WTP Plugin um mit Maven mit dem Eclipse Web Tools Project zu verbinden. Dazu noch einmal im Hauptmen&#252; &#8220;Help->Install New Software..2 klicken und die Update URL ausw&#228;hlen oder hinzuf&#252;gen: <a href="http://m2eclipse.sonatype.org/sites/m2e-extras">http://m2eclipse.sonatype.org/sites/m2e-extras</a></p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseMavenM2eclipseExtras.png" alt="" title="Eclipse Plugin m2eclipse-extras" width="630" height="374" class="alignnone size-full wp-image-2619" />
</div>
<p>Anschlie&#223;end den Wizzard wieder wie gewohnt durchgehen und das Plugin installieren.</p>
<h3><a name="JavaEE6Project" class="noLink">Das erste Java EE 6 Projekt</a></h3>
<p>Nun ist Eclipse konfiguriert und vorbereitet &#8211; es ist Zeit f&#252;r das erste Java EE 6 Projekt mit Eclipse WTP und Maven Unterst&#252;tzung.</p>
<h4><a name="JavaEE6ProjectMaven" class="noLink">Projekt mit Maven generieren</a></h4>
<p>Um ein neues Projekt anzulegen im Hauptmen&#252; &#8220;File->New->Other&#8221; klicken und im ge&#246;ffneten Startfenster des Wizzards &#8220;Maven Project&#8221; ausw&#228;hlen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/EclipseProjectWizzardNewMaven.png" alt="" title="Eclipse Neues Maven Project" width="613" height="328" class="alignnone size-full wp-image-2614" />
</div>
<p>Mit den Button &#8220;Next&#8221; weiter. Im zweiten Dialog &#8220;Select Project Name and Location&#8221; die Voreinstellung &#8220;Use default Workspace Location&#8221; selektiert lassen und Button &#8220;Next&#8221; klicken.<br />
Im folgenden Dialog &#8220;Select an Archetype&#8221; nach &#8220;knappsack&#8221; filtern und <code>ee6-sandbox-archetype</code> ausw&#228;hlen. Falls dieser Archetype nicht verf&#252;gbar ist kann es sein, dass der Maven Index Update noch nicht vollst&#228;ndig durchlaufen ist &#8211; in diesem Fall sieht man in Eclipse unten rechts im Progress View, dass ein Prozess l&#228;uft und es hilft nur warten..<br />
Die &#8220;knappsack&#8221; Archetypes wurden von <a href="http://www.andygibson.net/blog/projects/knappsack/">Andy Gipson</a> erstellt und erm&#246;glichen einen sehr einfachen Start in das Projekt.<br />
Wer ein Beispielprojekt mit einem vollst&#228;ndigem CRUD Beispiel haben m&#246;chte sollte das Archetype <code>jee6-sandbox-demo-archetype</code> verwenden.</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseProjectWizzardArchetype.png" alt="" title="New Project - Maven Archetype jee6-sandbox-archetype" width="630" class="alignnone size-full wp-image-2625" />
</div>
<p>Nach dem Selektieren des Archetypes den Dialog mit &#8220;Next&#8221; verlassen.</p>
<p>Auf der n&#228;chsten Seite m&#252;ssen jetzt die Archetype Parameter gesetzt werden. Das ist zum Einen die Group Id und zum Anderen die Artifact Id. In die Group id kommt der &#252;bergeordnete Name der Package Struktur und als Artifact Id wird der Projektname gew&#228;hlt:</p>
<div class="singleImgDiv"><img src="http://javathreads.de/data/uploads/2011/05/1105_MavenProjectArchetypeParameters.png" alt="" title="Neues Maven Projekt - Archetype Parameter" width="630" class="alignnone size-full wp-image-2629" />
</div>
<p>Mit dem Button &#8220;Finish&#8221; den Wizzard beenden. Das Projekt wird nun generiert und das kann einen Moment dauern:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_MavenProjectGenerate.png" alt="" title="Neues Maven Projekt wird generiert" width="630" height="176" class="alignnone size-full wp-image-2617" />
</div>
<p>Nun ist das Projekt erstellt und man kann sich die  Java, xhtml und Konfigurationsdateien ansehen die durch den gew&#228;hlten Maven Archetype generiert wurden:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseGeneratedProject.geaendert.jpg" alt="" title="Generiertes Java EE 6 Eclipse Projekt" width="630" height="447" class="alignnone size-full wp-image-2677" />
</div>
<p>Diese generierten Java und xhtml Dateien sollen den Einstieg in JSF 2, CDI und JPA 2 vereinfachen.</p>
<h4>Konfiguration in web.xml auf Servlet 3.0 umstellen</h4>
<p>Der ausgew&#228;hlte Maven Archetype hat in der <code>web.xml</code> als Servlet Spezifikationsversion 2.5 konfiguriert aber wir wollen 3.0 verwenden. Deswegen die <code>web.xml</code> Datei &#246;ffen: ALT-Shift-R -> <code>web.xml</code> oder im Verzeichnis <code>src/main/webapp/WEB-INF</code>. In dieser Datei steht auch schon als Kommentar der Hinweis, dass man f&#252;r den JBoss Servlet Version 3 verwenden soll. Dazu die Zeile 10 l&#246;schen und die oberen Zeilen mit version=&#8221;3.0&#8243; verwenden. Mein <code>web-app</code> Element sieht wie folgt aus:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1104_MavenProjectWebXml.jpg" alt="" title="Maven Projekt web.xml auf Servlet 3.0 konfigurieren" width="630" height="165" class="borderGray alignnone size-full wp-image-2655" />
</div>
<h4><a name="JavaEE6ProjectEclipseJSF" class="noLink">JSF Capabilities dem Projekt hinzuf&#252;gen</a></h4>
<p>&#214;ffnet man eine .xhtml Seite so &#246;ffnet sich der Visuell Editor von den JBoss Tools. Allerdings erscheint eine Fehlermeldung, dass die JSF Capabilities / JSF Unterst&#252;tzung f&#252;r dieses Projekt noch nicht konfiguriert ist:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseProjectJSFCapabilitiesError.jpg" alt="" title="Eclipse JSF Fehlermeldung Capability / JSF Unterst&#252;tzung nicht konfiguriert" width="630" height="378" class="borderGray alignnone size-full wp-image-2653" />
</div>
<p>Entweder in dieser Fehlermeldung direkt auf den Button &#8220;Add JSF Capabilities&#8221; klicken oder mit der rechten Maustaste auf das Projekt und aus dem Kontextmen&#252; &#8220;Configure->Add JSF Capabilities&#8221; klicken. In beiden Varienten &#246;ffnet sich ein Wizzard mit dem ersten Dialog &#8220;Project Location&#8221;. Der vorgegebene Pfad f&#252;r die <code>web.xml</code> Datei sollte eigentlich stimmen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJsfCapabilitesProjectLocation1.jpg" alt="" title="Eclipse Add JSF Capabilities Wizzard - Project Location" width="630" height="190" class="alignnone size-full wp-image-2654" />
</div>
<p>Mit den Button &#8220;Next&#8221; auf den n&#228;chsten Dialog &#8220;Project Folders&#8221; wechseln. Die vorgegebenen Pfade sollten auch hier stimmen. Die Checkbox &#8220;Add Libraries&#8221; darf nicht selektiert werden denn sonst kommt es sp&#228;ter zu Fehlern.<br />
Als Servlet Version muss 3.0, wie zuvor bereits in der <code>web.xml</code> abge&#228;ndert, ausgew&#228;hlt werden.<br />
Der Haken bei der Checkbox f&#252;r &#8220;Target Server&#8221; bewirkt, dass dieses Projekt direkt dem konfigurierten JBoss hinzugef&#252;gt und mit deployt wird:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseProjectJSFCapabilitiesProjectFolders.jpg" alt="" title="Eclipse Projekt JSF Capabilities - Project Folders" width="630" height="569" class="alignnone size-full wp-image-2755" />
</div>
<p>Den Wizzard mit dem Button &#8220;Finish&#8221; beenden. Man wird anschlie&#223;end gefragt ob man in die Web Developer Perspektive wechseln m&#246;chte. Je nach Geschmack kann man sich die Web Developer Perspektive anschauen und verwenden oder wieder in die Java EE Perspektive wechseln.</p>
<p>Nun sollten sich alle <code>.xhtml</code> Seiten ohne Warnung im Visual Editor &#246;ffnen lassen und auch Autocomplete f&#252;r JSF Tags m&#246;glich sein:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossToolsVisualEditorAutocomplete.jpg" alt="" title="Eclipse JBoss Tools Visual Editor Autocomplete" width="630" height="204" class="alignnone size-full wp-image-2691" />
</div>
<h4><a name="JavaEE6ProjectEclipseCDI" class="noLink">CDI (Context and Dependency Injection) Unterst&#252;tzung dem Projekt hinzuf&#252;gen</a></h4>
<p>Als letztes m&#252;ssen noch die CDI Unterst&#252;tzung konfiguriert werden. Man merkt es daran, dass in der <code>.xhtml</code> Seite noch kein Autocomplete f&#252;r die EL (Expression Language) zul&#228;sst. Wenn man z.B. in der <code>home.xhtml</code> den Cursor in die Expression <code>#{demoCourseList}</code> in Zeile 11 setzt und <code>F3</code> dr&#252;ckt sollte die entsprechende Producer Methode der CDI Bean springen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_CDICapabilitiesNaXhtml.jpg" alt="" title="Eclipse Projekt CDI Capabilites nicht konfigurieren" width="630" height="146" class="alignnone size-full wp-image-2696" />
</div>
<p>Die CDI Unterst&#252;tzung wird genauso hinzugef&#252;gt wie die JSF Capabilites im Abschnitt zuvor. Im Kontextmen&#252; des Projektes (rechte Maustaste auf den obersten Knoten des Projekts) Configure->Add CDI (Context and Dependency Injection) support.. klicken. Im ge&#246;ffneten CDI Preferences Dialog die Checkbox selektiert lassen und den Button &#8220;Apply&#8221; dr&#252;cken. Anschlie&#223;end den Preferences Dialog mit dem Button &#8220;OK&#8221; wieder verlassen:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseCDISupportPreferences.jpg" alt="" title="Eclipse CDI Unterst&#252;tzung Preferences" width="630" height="221" class="alignnone size-full wp-image-2698" />
</div>
<p>Nun den gleichen Versuch wie vorher schon in der <code>home.xhtml</code> machen und mit dem Cursor auf die Expression <code>#{demoCourseList}</code> in Zeile 11 setzen und <code>F3</code> dr&#252;cken. Nun &#246;ffnet sich der Java Editor genau an der richtigen Methode mit dem dazugeh&#246;rigem CDI Producer:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1104_CDISupportXhtmlElF3.jpg" alt="" title="Eclipse CDI Support - Producer Methode" width="630" height="148" class="alignnone size-full wp-image-2699" />
</div>
<p>Au&#223;erdem funktioniert nun auch Autocomplete direkt in der <code>.xhtml</code> Seite in einer Expression:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1104_CDISupportXhtmlElAutocomplete.jpg" alt="" title="Eclipse CDI Support - EL Autocomplete" width="630" height="181" class="alignnone size-full wp-image-2700" />
</div>
<h4><a name="JavaEE6ProjectProjektDeployen" class="noLink">Projekt auf den JBoss deployen</a></h4>
<p>Jetzt kommt der erste Test ob das generierte Projekt sich auch deployen und im Browser anzeigen l&#228;sst. Dazu im Server Panel &#252;berpr&#252;fen ob das Projekt dem Server hinzugef&#252;gt wurde &#8211; dazu einfach den JBoss aufklappen und vergewissern ob das <code>jee6project</code> zu sehen ist. Falls nicht muss das Projekt noch hinzugef&#252;gt werden: &#8220;rechte Maustaste auf JBoss 6.0 Runtime Server->Add and Remove&#8230;&#8221;. Anschlie&#223;end den Server starten:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJBossStarting.jpg" alt="" title="JBoss Runtime starten" width="630" height="117" class="alignnone size-full wp-image-2747" />
</div>
<p>In der Console erscheinen dann irgendwann die folgenden Zeilen:</p>
<div class="codebox">
23:08:27,957 INFO  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] deploy, ctxPath=/jee6project<br />
23:08:28,090 INFO  [javax.enterprise.resource.webcontainer.jsf.config] Mojarra 2.0.3 ( b05) f&#252;r Kontext &#8216;/jee6project&#8217; wird initialisiert.
</div>
<p>Nun die deployte Anwendung im Browser unter <a href="http://localhost:8080/jee6project">http://localhost:8080/jee6project</a> aufrufen:</p>
<div class="codebox">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseJavaEEMavenProjectDeployt.jpg" alt="" title="Java EE 6 Projekt deployt und aufrufbar" width="630" height="407" class="alignnone size-full wp-image-2758" />
</div>
<p>Die Seite die dargestellt wird stammt aus dem gew&#228;hlten Knappsack Maven Archetype und soll die ersten Schritte in Java EE 6 bzw. in CDI vereinfachen.<br />
Um zu pr&#252;fen ob die WTP Unterst&#252;tzung funktioniert kann man das Hot Deployment ausprobieren. Hot Deployment funktioniert auf alle Web Resourcen wie z.B. <code>.xhmtl</code>, <code>.css</code> oder Bilddateien.<br />
Um das zu testen einfach die <code>home.xhtml</code> &#246;ffnen und einen Text eingeben:</p>
<div class="codebox">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseWTPHotDeploymentXhtml.jpg" alt="" title="Eclipse WTP Hot Deployment - Editor" width="630" height="206" class="alignnone size-full wp-image-2764" />
</div>
<p>Nach dem speichern die Seite im Browser aktualisieren und der Text sollte direkt angezeigt werden.</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2011/05/1105_EclipseWTPHotDeploymentBrowser.jpg" alt="" title="Eclipse WTP Hot Deployment - Browser" width="630" height="233" class="alignnone size-full wp-image-2768" />
</div>
<p>Prinzipiell ist das Tutorial an dieser Stelle zu Ende &#8211; der JBoss l&#228;uft und das Java EE 6 Projekt ist deployt. Es lohnt sich als n&#228;chstes den Code durchzusehen und zu ver&#228;ndern. Im folgenden Abschnitt wird noch kurz auf ein paar Dinge im Source Code rund um CDI eingegangen.</p>
<h3><a name="WieGehtEsWeiter" class="noLink">Wie geht es weiter?</a></h3>
<p>An diesem Punkt angekommen solltest du ein laufendes Java EE 6 Projekt im Web Profile auf dem JBoss Application Server haben. Nun kannst du dich mit Eclipse, Maven oder Java EE 6 weiter besch&#228;ftigen.<br />
Hast du mit Java EE 6 noch &#252;berhaupt keine Erfahrungen solltest du dir dieses Projekt genauer ansehen und dich mit den bereits verwendeten Annotationen und Aufbau vertraut machen.</p>
<p>Viel Spa&#223; beim ausprobieren =).</p>
<p><script type="text/javascript">
function showMavenLinuxInstall() {
document.getElementById('mavenAnleitungLinuxDiv').style.display = 'block';
document.getElementById('mavenAnleitungLinuxDivLink').style.display = 'none';
}
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2011/05/tutorial-mit-java-ee-6-unter-eclipse-helios-und-mit-maven-unterstuetzung-starten/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Sortieralgorithmen mit Volkst&#228;nzen visualisert</title>
		<link>http://javathreads.de/2011/04/sortieralgorithmen-mit-volkstaenzen-visualisert/</link>
		<comments>http://javathreads.de/2011/04/sortieralgorithmen-mit-volkstaenzen-visualisert/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 17:47:33 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Algorithmen]]></category>
		<category><![CDATA[Sortieralgorithmen]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2549</guid>
		<description><![CDATA[Jeder Informatiker muss fr&#252;her oder sp&#228;ter durch die Lehre von Sortieralgorithmen und deren Komplexit&#228;t. Wer so seine Schwierigkeiten damit hat z.B. den Bubble-Sort oder Insert-Sort zu verstehen kann jetzt eine neue Variante der Erl&#228;uterung ausprobieren: 
Bubble-sort with Hungarian (&#8220;Csángó&#8221;) folk dance



Und die Macher ruhen sich nicht auf dem Erfolg aus sondern haben bereits drei weitere [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder Informatiker muss fr&#252;her oder sp&#228;ter durch die Lehre von Sortieralgorithmen und deren Komplexit&#228;t. Wer so seine Schwierigkeiten damit hat z.B. den Bubble-Sort oder Insert-Sort zu verstehen kann jetzt eine neue Variante der Erl&#228;uterung ausprobieren: </p>
<p>Bubble-sort with Hungarian (&#8220;Csángó&#8221;) folk dance</p>
<div style="text-align:center">
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/lyZQPjUT5B4" frameborder="0" allowfullscreen></iframe>
</div>
<p>Und <a href="http://www.youtube.com/user/AlgoRythmics">die Macher</a> ruhen sich nicht auf dem Erfolg aus sondern haben bereits drei weitere Sortieralgorithmen t&#228;nzerisch umgesetzt.</p>
<p>Insert-sort with Romanian folk dance:</p>
<div style="text-align:center">
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/ROalU379l3U" frameborder="0" allowfullscreen></iframe>
</div>
<p>Shell-sort with Hungarian (Székely) folk dance</p>
<div style="text-align:center">
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/CmPA7zE8mx0" frameborder="0" allowfullscreen></iframe>
</div>
<p>Select-sort with Gypsy folk dance</p>
<div style="text-align:center">
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/Ns4TPTC8whw" frameborder="0" allowfullscreen></iframe>
</div>
<p>Um ehrlich zu sein: ich habe sie mir nicht alle in voller L&#228;nge angetan.. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2011/04/sortieralgorithmen-mit-volkstaenzen-visualisert/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MobileTech Conference 2010: die Zukunft ist mobil</title>
		<link>http://javathreads.de/2010/09/mobiletech-conference-2010-die-zukunft-ist-mobil/</link>
		<comments>http://javathreads.de/2010/09/mobiletech-conference-2010-die-zukunft-ist-mobil/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 21:31:57 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2477</guid>
		<description><![CDATA[Da ich glaube, dass der mobile Markt rund um Android (und nat&#252;rlich iOS sowie einigen anderen) ein wichtiger Teil der Entwicklung (auch im Java Umfeld) in den n&#228;chsten Jahren sein wird hatte ich im Sommer beschlossen die MobileTech Conference 2010 zu besuchen. Gestern und heute war es nun soweit und heute m&#246;chte ich ein paar [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich glaube, dass der mobile Markt rund um Android (und nat&#252;rlich iOS sowie einigen anderen) ein wichtiger Teil der Entwicklung (auch im Java Umfeld) in den n&#228;chsten Jahren sein wird hatte ich im Sommer beschlossen die <a href="http://mobiletechcon.de">MobileTech Conference 2010</a> zu besuchen. Gestern und heute war es nun soweit und heute m&#246;chte ich ein paar Eindr&#252;cke loswerden. Insgesamt war die Konferenz sehr interessant und hat sich wirklich gelohnt. Es gibt wirklich viel zu berichten aber folgende Punkte w&#252;rde ich als Ergebnis der Konferenz sehen:</p>
<ul>
<li>Das <b>iPhone bzw iOS ist nach wie vor der Platzhirsch</b> unter den verschiedenen mobilen Ger&#228;ten/Plattformen und m&#246;chte man erfolgreich eine mobile Pr&#228;senz oder App auf dem Markt bringen darf man das iPhone nicht vernachl&#228;ssigen. Allerdings ist der App Markt sehr umk&#228;mpft, was sich auch an den &#8220;wie komme ich an die Top Platzierung in den Charts&#8221; oder &#8220;wie vermarkte ich die App am besten&#8221; Themen zeigt.</li>
<li><b>Android hat stark aufgeholt und ist der zweite Big Player</b> im Markt. Apps f&#252;r Android Ger&#228;te sollte man somit auch noch immer neben der iPhone App entwickeln um den Gro&#223;teil des Marktes abzudecken. Viele Sessions zu Android gingen direkt um die Entwicklung und waren sehr technisch. Die Entwicklung mit Java rund um Android kam somit bei der Konferenz nicht zu kurz.
</li>
<li>Andere <b>Anbieter, wie Samsung oder Microsoft, wollen auch noch ein St&#252;ck von dem Kuchen abhaben</b> und kommen mit neuen Ger&#228;ten, neuer Software und komplett neuen Konzepten auf den Markt. Man darf gespannt sein wie sich der Markt in Zukunft aufteilen wird. Vor allem Microsoft hat gut die Werbetrommel ger&#252;hrt. So wurde z.B. das im Herbst auf den Markt kommende Windows Phone 7 von einem sehr angetriebenen Microsoft Mitarbeiter vorgestellt:
<div class="singleImgDiv"><img src="http://javathreads.de/data/uploads/2010/09/MTCMobileNightWindowsPhone7.jpg" alt="" title="MTC10 Mobile Night - Windows Phone 7 wird vorgestellt" width="600" class="alignnone size-full wp-image-2482" /></div>
<p>Microsoft selbst glaubt, dass der Mobile Markt erst am Anfang steht und jetzt erst beginnt &#8211; sie sind voller Tatendrang und sind mit der Vorstellung auf der <a href="http://blogs.msdn.com/b/windowsphone/archive/2010/09/08/wp7-auf-der-mobiletechcon-ein-voller-erfolg.aspx">MobileTech Conf zufrieden</a>.
</li>
<li><b>Web vs. App oder HTML vs. Native</b> &#8211; das war eine viel diskutierte Frage. Muss man in Zukunft f&#252;r jedes Ger&#228;t und auf jeder Plattform eine eigene native App entwickeln oder reicht es mit HTML 5 und CSS 3 mobile Webanwendungen zu erstellen die dann auf jeder Plattform laufen (das Windows Phone 7 w&#252;rde wohl an dieser Stelle schon wieder ausscheiden). Abschlie&#223;end konnte diese Frage nicht gekl&#228;rt werden &#8211; trotz Podiums Diskussion und mehren Sessions dazu. Ich denke, dass es auf den Anwendungsfall ankommt. Ein Stichwort dazu war die Entscheidung zwischen &#8220;reach&#8221; und &#8220;rich&#8221;.</li>
<li><b>Augmented Reality ist ein gro&#223;es Thema, immer mehr am kommen</b> und ich bin total begeistert davon. Ich glaube wir werden in Zukunft noch sehr viel von der Verschmelzung zwischen Realit&#228;t und virtuelle Welt mit Informationen und Hilfen sehen. Ein sch&#246;nes Beispiel dazu, um eine Vorstellung davon zu bekommen, liefert folgendes Video, was auch auf der Konferenz gezeigt wurde:<br />
<iframe src="http://player.vimeo.com/video/8569187?portrait=0&amp;color=ff0179" width="600" height="338" frameborder="0"></iframe></li>
</ul>
<p>Am Abend des ersten Konferenztages gab es die Mobile Night, die mit einer &#8220;Unterhaltung am virtuellen Kamin&#8221; zwischen <a href="http://www.urchs.de/4/ossi/2010/09/mobile-technology-konferenz-in-mainz.html">Ossi Urchs</a> (Internet Philosoph/Guru) und <a href="http://www.tbray.org/ongoing/misc/Tim">Tim Bray</a> (Google Android Advocate), was ziemlich interessant war:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/09/MTCMobileNightKamin.jpg" alt="" title="MTC10 Mobile Night Kamingespr&#228;ch" width="640" height="383" class="alignnone size-full wp-image-2486" />
</div>
<p>
Ossi Urchs hat auch die erste Keynote der Konferenz mit einer wirklich guten Rede gehalten. Die Slides der Pr&#228;sentation k&#246;nnen <a href="http://www.urchs.de/4/fft/downloads/powerpoint/Mobile_Tech_Con_ou.pdf">hier heruntergeladen</a> werden und wer einen kleinen Eindruck erhalten m&#246;chte sollte sich das kleine Interview anschauen:
</p>
<div style="text-align:center">
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/sMrBeY1uLgk?fs=1&amp;hl=de_DE&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/sMrBeY1uLgk?fs=1&amp;hl=de_DE&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
</div>
<p><br/><br />
Das musikalische Highlight des Abends war das iPhone Orchester der <a href="http://www.zeeing.de">Zaboura Eichstaedt Experience (ZEE)</a>. Das kam ganz am Ende nach einem sehr langen Tag und wurde gro&#223; angek&#252;ndigt. Dabei konnten wir als Teilnehmer das Geschehen per Twitter beeinflussen. Die Performance war durchaus unterhaltsam und sah von meinem Platz wie folgt aus:
</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/09/MTCIPhoneOrchester.jpg" alt="" title="MTC10 Mobile Night - iPhone Orchester" width="640" height="383" class="alignnone size-full wp-image-2487" />
</div>
<p>
Wer einen wirklichen Eindruck von dem musikalischen Ergebnis haben m&#246;chte kann sich das Event auch noch anschauen und reinh&#246;hren:
</p>
<div style="text-align:center">
<object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/4NeC-dkThZY?fs=1&amp;hl=de_DE&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4NeC-dkThZY?fs=1&amp;hl=de_DE&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object>
</div>
<p>Am&#252;sant war, dass der anfangs gut gef&#252;llte Saal am Ende der Performance doch sehr gelichtet war ;).<br />
Wer mehr von der ZEE Gruppe wissen m&#246;chte sollte sich auf <a href="http://www.zeeing.de/videos/">deren Webseite mit vielen Videos</a> umsehen.</p>
<p>
Als letztes kommt mein pers&#246;nliches Highlight: die <a href="http://ardrone.parrot.com/parrot-ar-drone/de/">AR Drone</a>. <a href="http://www.bokowsky.net/de/">Markus Bokowsky</a> hat mit seiner unterhaltsamen Session &#8220;Augmented Reality&#8221; eine AR Drone mitgebracht die dann sp&#228;t am Abend noch zum Einsatz kam:</p>
<div class="singleImgDiv">
<a href="http://javathreads.de/data/uploads/2010/09/MTCARDrohne.jpg"><img src="http://javathreads.de/data/uploads/2010/09/MTCARDrohne.jpg" alt="" title="MTC10 - AR Drone" width="640" height="383" class="alignnone size-full wp-image-2496" /></a>
</div>
<p>Das besondere an der Drohne ist, dass es &#252;ber eine App auf dem iPhone gesteuert wird. Die Drohne hat zwei Kameras eingebaut deren Bild auf das iPhone &#252;bertragen wird. Theoretisch braucht man dazu das Flugobjekt selbst nicht mehr zu sehen. Wie das Ganze dann live auf der MobileTech Conf aussah kann man sch&#246;n in diesem Mitschnitt des Fluges, auf dem auch das iPhone zu sehen ist, ansehen:</p>
<div style="text-align:center">
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/dZOV0_E73m4?fs=1&amp;hl=de_DE&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/dZOV0_E73m4?fs=1&amp;hl=de_DE&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
</div>
<p>Leider gibt es bis jetzt nur das iPhone als Controller. Sobald es f&#252;r Android auch m&#246;glich ist werde ich mir definitiv so ein Teil zulegen! =)</p>
<p>
Insgesamt war die <a href="http://mobiletechcon.de">MobileTech Conference</a> wirklich interessant (bis auf manche Werbesessions, die stark an Kaffeefahrten erinnert haben) und es hat ein wenig nach Zukunft gerochen. N&#228;chstes Jahr werde ich wohl wieder hinpilgern, zumal es f&#252;r mich in Mainz ja ein Heimspiel ist &#8211; vielleicht habe ich da auch schon meine erste Android App im Market oder fliege eine AR Drone =).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/09/mobiletech-conference-2010-die-zukunft-ist-mobil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adam Bien mit JEE 6 am Dienstag bei JUG Darmstadt</title>
		<link>http://javathreads.de/2010/08/adam-bien-mit-jee-6-am-dienstag-bei-jug-darmstadt/</link>
		<comments>http://javathreads.de/2010/08/adam-bien-mit-jee-6-am-dienstag-bei-jug-darmstadt/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 08:10:15 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[JUG]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2470</guid>
		<description><![CDATA[Wer Lust hat Adam Bien einmal zu sehen bzw. zu sehen wie und was er mit Java EE 6 macht der sollte am kommenden Dienstag zur Java User Group Darmstadt kommen. Ich werde jedenfalls da sein =).




Mehr dazu auch auf der JUG DA Google Groups Seite.
]]></description>
			<content:encoded><![CDATA[<p>Wer Lust hat Adam Bien einmal zu sehen bzw. zu sehen wie und was er mit Java EE 6 macht der sollte am kommenden Dienstag zur <a href="http://groups.google.com/group/jug-da">Java User Group Darmstadt</a> kommen. Ich werde jedenfalls da sein =).</p>
<div style="singelImgDiv">
<a href="http://groups.google.com/group/jug-da"><img src="http://javathreads.de/data/uploads/2010/08/JUGDaFlyerJEE6.jpg" alt="" title="JUG Darmstadt - Adam Bien Java EE 6" width="600" height="849" class="alignnone size-full wp-image-2471" /></a>
</div>
<p>
Mehr dazu auch auf der <a href="http://groups.google.com/group/jug-da">JUG DA Google Groups</a> Seite.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/08/adam-bien-mit-jee-6-am-dienstag-bei-jug-darmstadt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java 4-ever Trailer</title>
		<link>http://javathreads.de/2010/06/java-4-ever-trailer/</link>
		<comments>http://javathreads.de/2010/06/java-4-ever-trailer/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 06:02:43 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Film]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2463</guid>
		<description><![CDATA[Java kommt nun auch in Hollywood gut raus, wie der Trailer Java 4-ever und der Starbesetzung mit  mit Scala Johansson, Eddie Larrison, William Windows, Mona Lisa Harddrive und Lenny Linux zeigt:



Ein wirklich sehr gut gemachtes St&#252;ck Film.
(vielen Dank an Christian Nicoll f&#252;r den Hinweis!)
]]></description>
			<content:encoded><![CDATA[<p>Java kommt nun auch in Hollywood gut raus, wie der Trailer Java 4-ever und der Starbesetzung mit  mit Scala Johansson, Eddie Larrison, William Windows, Mona Lisa Harddrive und Lenny Linux zeigt:</p>
<div style="text-align:center">
<iframe src="http://player.vimeo.com/video/12956509?byline=0&amp;portrait=0" width="601" height="338" frameborder="0"></iframe>
</div>
<p>Ein wirklich sehr gut gemachtes St&#252;ck Film.</p>
<p>(vielen Dank an Christian Nicoll f&#252;r den Hinweis!)</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/06/java-4-ever-trailer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>11 Tipper &#8211; kostenloses Fu&#223;ball Tippspiel mit JSF und JBoss Seam auf Tomcat Basis geht online</title>
		<link>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/</link>
		<comments>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/#comments</comments>
		<pubDate>Sun, 02 May 2010 13:25:01 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[JBoss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2415</guid>
		<description><![CDATA[M&#246;chte man ein Framework besser kennenlernen oder bestimmte Problemstellungen nachstellen um brauchbare L&#246;sung zu finden bietet es sich an dieses an einem kleinen Projekt mit einem Ziel zu tun. Hat man sich erst einmal ein Projekt ausgedacht und das voller Elan angefangen besteht die gro&#223;e Herausforderung es auch zu einem halbwegs vern&#252;nftigen Abschluss zu bringen. [...]]]></description>
			<content:encoded><![CDATA[<p>M&#246;chte man ein Framework besser kennenlernen oder bestimmte Problemstellungen nachstellen um brauchbare L&#246;sung zu finden bietet es sich an dieses an einem kleinen Projekt mit einem Ziel zu tun. Hat man sich erst einmal ein Projekt ausgedacht und das voller Elan angefangen besteht die gro&#223;e Herausforderung es auch zu einem halbwegs vern&#252;nftigen Abschluss zu bringen. Genau das ist in diesen Tagen bei mir passiert und ich pr&#228;sentiere p&#252;nktlich zur WM 2010 das<a href="http://11tipper.de/tippspiel"> kostenlose Fu&#223;ball Tippspiel 11 Tipper</a>. </p>
<div class="singleImgDiv">
<a href="http://11tipper.de/tippspiel"><img src="http://javathreads.de/data/uploads/2010/05/11TipperTippspiel.jpg" alt="" title="11 Tipper Tippspiel" width="610" height="354" class="alignnone size-full wp-image-2436" /></a>
</div>
<p>Wer also ein Tippspiel zur WM oder zur Bundesliga mit Freunden oder Arbeitskollegen veranstalten m&#246;chte kann sich auf 11tipper.de eines einrichten.<br />
Wer mehr &#252;ber das Tippspiel an sich wissen m&#246;chte sollte den <a href="http://webthreads.de/2010/05/11-tipper-das-kostenlose-tippspiel-zur-wm-2010-oder-bundesliga-geht-online/">Artikel auf webthreads.de</a> lesen oder sich die Features auf <a href="http://11tipper.de/tippspiel">11 Tipper</a> direkt ansehen. Es bestehen auch <a href="http://11tipper.de/tippspiel/demo">zwei Demo Tipprunden</a> in denen man als Spielleiter oder Tipper herumklicken kann.</p>
<h4>Verwendete Frameworks</h4>
<p>Jetzt noch ein paar Worte zur Technik. Das Tippspiel wird mit <strong>JSF 1.2</strong> und <strong>JBoss Seam 2.2.0</strong> entwickelt. Viele kennen JBoss Seam nur auf einem Application Server wie eben den JBoss AS. Ich habe Seam auf einem <strong>Tomcat 6</strong> ohne Embedded JBoss verwendet. Es wird somit anstatt auf EJBs voll auf <strong>POJOs</strong> gesetzt und auch nicht so getan als w&#228;re mann auf einem Application Server. Die Persistenz ist mit <strong>JPA (Hibernate)</strong> umgesetzt. Seam verwendet zur Validierung der Eingaben an der Oberfl&#228;che die JPA Annotationen an den Entities. F&#252;r Timer und zeitliche Verz&#246;gerungen wird <strong>Quarz</strong> verwendet. Das Frontend ist mit <strong>Facelets</strong> und <strong>JBoss RichFaces 3.3</strong> umgesetzt. Verfeinert wird das Ganze mit viel <strong>Ajax</strong> und <strong>jQuery 1.4</strong> als JavaScript Bibliothek.</p>
<p>In der Vergangenheit sind schon ein paar Artikel aus den Erkenntnissen dieses Projekts hier auf javathreads.de ver&#246;ffentlicht worden. Und ich werde wohl noch das ein oder andere Tutorial dazu hier in naher Zukunft ver&#246;ffentlichen. Falls jemand eine bestimmte Frage zur Umsetzung hat dann nur raus damit ich antworte garantiert =).</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/05/11-tipper-kostenloses-fussball-tippspiel-mit-jsf-und-jboss-seam-auf-tomcat-basis-geht-online/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Begriffe &#8220;Endlosschleife&#8221; und &#8220;Rekursion&#8221; anschaulich durch Buch Glossar erkl&#228;rt</title>
		<link>http://javathreads.de/2010/04/begriffe-endlosschleife-und-rekursion-anschaulich-durch-buch-glossar-erklaert/</link>
		<comments>http://javathreads.de/2010/04/begriffe-endlosschleife-und-rekursion-anschaulich-durch-buch-glossar-erklaert/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 04:00:24 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Endlosschleife]]></category>
		<category><![CDATA[Glossar]]></category>
		<category><![CDATA[Rekursion]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2424</guid>
		<description><![CDATA[Habe ein eingescanntes Bild aus einem Programmier-Buch Glossar gefunden der anschaulich die &#8220;Endlosschleife&#8221; und die &#8220;Rekursion&#8221; erkl&#228;rt.
Zuerst die eingescannten Bilder f&#252;r die Endlosschleife &#8220;infinite loop&#8221;:



Und hier noch der Ausschnitt f&#252;r die Rekursion:



Wer es jetzt noch nicht verstanden hat..
]]></description>
			<content:encoded><![CDATA[<p>Habe ein eingescanntes Bild aus einem Programmier-Buch Glossar gefunden der anschaulich die &#8220;Endlosschleife&#8221; und die &#8220;Rekursion&#8221; erkl&#228;rt.</p>
<p>Zuerst die eingescannten Bilder f&#252;r die Endlosschleife &#8220;infinite loop&#8221;:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/04/Buch_Endlosschleife.jpg" alt="" title="Buch Glossar Endlosschleife" width="593" height="810" class="alignnone size-full wp-image-2425" />
</div>
<p>Und hier noch der Ausschnitt f&#252;r die Rekursion:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/04/Buch_Rekursion1.jpg" alt="" title="Buch Glossar Rekursion" width="593" height="405" class="alignnone size-full wp-image-2428" />
</div>
<p>Wer es jetzt noch nicht verstanden hat..</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/04/begriffe-endlosschleife-und-rekursion-anschaulich-durch-buch-glossar-erklaert/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mit JAXB einfach von XML Daten zu Java Objekten</title>
		<link>http://javathreads.de/2010/04/mit-jaxb-einfach-von-xml-daten-zu-java-objekten/</link>
		<comments>http://javathreads.de/2010/04/mit-jaxb-einfach-von-xml-daten-zu-java-objekten/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 04:00:38 +0000</pubDate>
		<dc:creator>Markus Kühle</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JAXB]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XML Schema]]></category>

		<guid isPermaLink="false">http://javathreads.de/?p=2354</guid>
		<description><![CDATA[Eine Variante mit XML in Java zu arbeiten ist die Java Architecture for XML Binding, besser bekannt unter JAXB. Mit JAXB kann man sehr einfach Java Objekte als XML Datei speichern (marshal) und umgekehrt eine XML Datei wieder in ein Java Objekt laden (unmarshal). So kann man z.B. Daten sehr einfach austauschen oder persistieren. Implementiert [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Variante mit XML in Java zu arbeiten ist die <a href="http://java.sun.com/developer/technicalArticles/WebServices/jaxb">Java Architecture for XML Binding,</a> besser bekannt unter JAXB. Mit JAXB kann man sehr einfach Java Objekte als XML Datei speichern (marshal) und umgekehrt eine XML Datei wieder in ein Java Objekt laden (unmarshal). So kann man z.B. Daten sehr einfach austauschen oder persistieren. Implementiert man einen Webservice mit JAX-WS (Java API for XML &#8211; Web Services) werden z.B. die Daten die ausgetauscht werden mit JAX-B Annotationen versehen und via XML ausgetauscht. Das Umwandeln des Java Objekts zu XML und wieder zur&#252;ck &#252;bernimmt dabei JAXB.</p>
<div class="singleImgDiv">
<a href="http://java.sun.com/developer/technicalArticles/WebServices/jaxb/"><img src="http://javathreads.de/data/uploads/2010/03/jaxbMarshallUnmarshall.gif" alt="" title="Java Architecture for XML Binding (JAXB)" width="450" height="300" class="alignnone size-full wp-image-2368" /></a>
</div>
<div class="subHeadline">Anwendungsfall: XML Daten zu Java Objekten</div>
<p>In meinem Anwendungsfall habe ich eine Online Schnittstelle die mir die Ergebnisse zu Spieltagen der Bundesliga als XML liefert. Ziel ist es diese Informationen so einfach wie m&#246;glich in meine Java Anwendung zu bekommen. Mit Hilfe von JAXB sollen diese XML Informationen zu Java Objekten umgewandelt werden, so dass man damit einfach weiterarbeiten kann. Dieser Vorgang wird unmarshal genannt und erzeugt eine Objekt Struktur die den Inhalt und den Aufbau der XML Datei repr&#228;sentiert. </p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/03/jaxbXmlSchemaObjects.gif" alt="" title="JAXB - unmarshal" width="450" height="168" class="alignnone size-full wp-image-2369" />
</div>
<p>Die erzeugte Objektstruktur ist aber kein DOM basierter Baum, wie manchmal angenommen wird, sondern ein normale Java Objekte, die wieder Referenzen auf weitere Java Objekte haben.</p>
<p>Die XML die ich geliefert bekomme und zu Java Objekten mit JAXB unmarshallen m&#246;chte sieht wie folgt aus:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">game</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">28</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">nummer</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">nummer</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beginn</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2010-03-26 20:30:00</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beginn</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mannschaft_heim</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">VfL Bochum</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mannschaft_heim</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mannschaft_gast</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">Eintracht Frankfurt</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mannschaft_gast</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_heim_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tore_heim_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_gast_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tore_gast_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_heim_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tore_heim_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_gast_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tore_gast_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">game</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">game</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">28</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">nummer</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">nummer</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beginn</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2010-03-27 15:30:00</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beginn</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mannschaft_heim</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">Bayern M&#252;nchen</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mannschaft_heim</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mannschaft_gast</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">VfB Stuttgart</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mannschaft_gast</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_heim_halbzeit</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">tore_heim_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_gast_halbzeit</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">tore_gast_halbzeit</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_heim_ergebnis</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">tore_heim_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tore_gast_ergebnis</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">tore_gast_ergebnis</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">game</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    ...
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">spieltag</span><span style="color: #0000FF; ">&gt;</span></pre>
</div>
<p>Um mit JAXB von der XML Datei zu Java Objekten zu gelangen ben&#246;tigt man die Beschreibung des Mappings mit JAXB Annotationen in Java Klassen. Da in diesem Fall die XML Datei vorliegt ist der einfachste Weg sich die Klassen mit den Annotationen generieren zu lassen. Dazu ben&#246;tigt man das XML Schema zu zu der XML Datei.</p>
<div class="subHeadline">XML Schema aus einer XML Datei generieren lassen</div>
<p>In meinem Fall habe noch kein Schema f&#252;r diese XML Struktur. Eines jetzt von Hand zu erstellen w&#228;re m&#246;glich aber sehr aufwendig. An dieser Stelle kommt das kleine Java Tool Namens <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> ins Spiel.</p>
<div class="singleImgDiv">
<a href="http://www.thaiopensource.com/relaxng/trang.html"><img src="http://javathreads.de/data/uploads/2010/03/Trang.jpg" alt="" title="Trang - Multi-format schema converter" width="551" height="88" class="alignnone size-full wp-image-2360" /></a>
</div>
<p>Dazu die letzte Version aus 2008 herunterladen (<a href="http://jing-trang.googlecode.com/files/trang-20081028.zip">Direktlink</a>) und an einem Ort der Wahl entpacken. Anschlie&#223;end die XML Datei der Einfachheit halber auch mit in diese Ordner kopieren und darauf achten, dass sie mit UTF-8 enkodiert ist. Um das Schema zu  erzeugen einfach das trang.jar mit zwei Parametern aufrufen:</p>
<div class="codebox">
D:\projects\trang-20081028>java -jar trang.jar spieltag.xml spieltag.xsd
</div>
<p>Das von Trang generierte Schema sieht bei mir wie folgt aus:</p>
<div class="codebox">
<pre><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:schema </span><span style="color: #FF0000; ">xmlns:xs</span><span style="color: #0000FF; ">=&quot;http://www.w3.org/2001/XMLSchema&quot;</span><span style="color: #FF0000; "> elementFormDefault</span><span style="color: #0000FF; ">=&quot;qualified&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;spieltag&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:complexType </span><span style="color: #FF0000; ">mixed</span><span style="color: #0000FF; ">=&quot;true&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
      </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:sequence</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">minOccurs</span><span style="color: #0000FF; ">=&quot;0&quot;</span><span style="color: #FF0000; "> maxOccurs</span><span style="color: #0000FF; ">=&quot;unbounded&quot;</span><span style="color: #FF0000; "> ref</span><span style="color: #0000FF; ">=&quot;game&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
      </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:sequence</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:complexType</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:element</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;game&quot;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:complexType</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
      </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:sequence</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;spieltag&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;nummer&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;beginn&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;mannschaft_heim&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;mannschaft_gast&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;tore_heim_halbzeit&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;tore_gast_halbzeit&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;tore_heim_ergebnis&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
        </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">=&quot;tore_gast_ergebnis&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
      </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:sequence</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:complexType</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:element</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;nummer&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:integer&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;beginn&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;mannschaft_heim&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;mannschaft_gast&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;tore_heim_halbzeit&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;tore_gast_halbzeit&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;tore_heim_ergebnis&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
  </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xs:element </span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=&quot;tore_gast_ergebnis&quot;</span><span style="color: #FF0000; "> type</span><span style="color: #0000FF; ">=&quot;xs:string&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xs:schema</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
</span></pre>
</div>
<div class="subHeadline">Java Klassen mit JAXB Annotationen aus XML Schema generieren</div>
<p>Das JDK liefert einen Binding Compiler f&#252;r JAXB mit dem Namen XJC mit aus der im <code>/bin</code> Verzeichnis unterhalb der Java Runtime zu finden ist. Damit kann man aus einem XML Schema die entsprechenden Java Klassen generieren lassen, aus denen dann beim sp&#228;teren unmarshal Prozess die Java Objekte erstellt werden.</p>
<p>Der Aufruf des Binding Compiler verwendet in diesem Beispiel zwei Parameter. Der Paramter <code>d</code> definiert das Verzeichnis in dem die Klassen gespeichert werden sollen, bei mir das Verzeichnis <code>src</code> relativ zum aktuellen Verzeichnis, und der Paramter <code>p</code> definiert das Java Package in dem die Klassen liegen sollen. Als letztes wird das XML Schema angegeben aus dem die Java Klassen generiert werden sollen:</p>
<div class="codebox">
D:\projects\TipResultParser\xml>xjc -d src -p de.javathreads.jaxb spieltag.xsd
</div>
<p>F&#252;r die obige XML Datei wurden drei Klassen generiert:</p>
<div class="singleImgDiv">
<img src="http://javathreads.de/data/uploads/2010/03/XJCKlassen3.jpg" alt="" title="JAXB Binding Compiler XJC - generierte Klassen" width="500" height="178" class="alignnone size-full wp-image-2382" />
</div>
<p>Im folgenden der interessante Teil aus der klasse <code>Game</code> mit JAXB Annotationen:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#646464">@XmlAccessorType</span>(XmlAccessType.FIELD)
<span style="color:#646464">@XmlType(name</span> = <span style="color:#2A00FF;">""</span>, propOrder = {
    <span style="color:#2A00FF;">"spieltag"</span>,
    <span style="color:#2A00FF;">"nummer"</span>,
    <span style="color:#2A00FF;">"beginn"</span>,
    <span style="color:#2A00FF;">"mannschaftHeim"</span>,
    <span style="color:#2A00FF;">"mannschaftGast"</span>,
    <span style="color:#2A00FF;">"toreHeimHalbzeit"</span>,
    <span style="color:#2A00FF;">"toreGastHalbzeit"</span>,
    <span style="color:#2A00FF;">"toreHeimErgebnis"</span>,
    <span style="color:#2A00FF;">"toreGastErgebnis"</span>
})
<span style="color:#646464">@XmlRootElement(name</span> = <span style="color:#2A00FF;">"game"</span>)
<span style="color:#7F0074;"><b>public</b></span>&#160;<span style="color:#7F0074;"><b>class</b></span>&#160;Game {

    <span style="color:#646464">@XmlElement(required</span> = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;Spieltag spieltag;
    <span style="color:#646464">@XmlElement(required</span> = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;BigInteger nummer;
    <span style="color:#646464">@XmlElement(required</span> = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String beginn;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"mannschaft_heim"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String mannschaftHeim;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"mannschaft_gast"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String mannschaftGast;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"tore_heim_halbzeit"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String toreHeimHalbzeit;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"tore_gast_halbzeit"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String toreGastHalbzeit;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"tore_heim_ergebnis"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String toreHeimErgebnis;
    <span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">"tore_gast_ergebnis"</span>, required = true)
    <span style="color:#7F0074;"><b>protected</b></span>&#160;String toreGastErgebnis;

    <span style="color:#3F7F5F">// Getter und Setter</span>
}</pre>
</div>
<p>Man kann an diesem Beispiel sehr sch&#246;n das Mapping zwischen XML Element und Attribut mit der Annotation <code>@XmlElement</code> sehen:</p>
<div class="codebox">
<span style="color:#646464">@XmlElement(name</span> = <span style="color:#2A00FF;">&#8220;mannschaft_heim&#8221;</span>, required = true)
</div>
<p>Es gibt noch weitaus komplizierte JAXB Konfigurationen von daher empfiehlt es sich eigentlich immer sich die fehlende Gegenseite, wie in diesem Beispiel die Java Klassen, generieren zu lassen. Auch der andere Weg, das marshalling von Java Objektb&#228;umen zu einer XML Datei, l&#228;sst sich sehr einfach generieren.</p>
<div class="subHeadline">JAXB unmarshal durchf&#252;hren und mit Java Objekten arbeiten</div>
<p>Nun kommt der wichtigste Teil des Tutorials, n&#228;mlich die eigentliche Anwendung von JAXB. Die XML Datei soll als Java Objektstruktur zur Verf&#252;gung stehen, so dass die Daten einfach weiterverarbeitet werden k&#246;nnen. Dieser Weg wird, wie am Anfang beschrieben, unmarshal genannt. Bis zum Java Objekt sind es an dieser Stelle nur noch drei Zeilen:</p>
<ul>
<li>JAXBContext Objekt erstellen, welches einem Zugriff auf die JAXB API erm&#246;glicht. Dabei wird als Parameter ein oder mehrere Packages zu den generierten Klassen mit den JAXB Annotationen ben&#246;tigt: <code>JAXBContext jc = JAXBContext.newInstance("de.javathreads.jaxb");</code></li>
<li>Unmarshaller Objekt vom JAXBContext erstellen: <code>Unmarshaller unmarshaller = jc.createUnmarshaller();</code></li>
<li>Die <code>unmarshal()</code> Methode aus dem Unmarshaller Objekt aufrufem um den unmarshalling Prozess zu starten. Als Parameter wird dabei die zu parsende XML Datei erwartet und als R&#252;ckgabewert erh&#228;lt man das entsprechende Objekt f&#252;r das Root Element der XML Datei. In meinem Beispiel ist das die Klasse <code>Spieltag</code>, welche vom Unmarshaller zur&#252;ckgegeben wird: <code>Spieltag sp = (Spieltag) unmarshaller.unmarshal(new File("D:\\projects\\TipResultParser\\xml\\spieltag.xml"));</code></li>
</ul>
<p>Jetzt kann man direkt mit der Objektrepr&#228;sentation der XML Datei auf Java Ebene arbeiten. Noch einmal der Hinweis, dass es sich bei diesen Objekten nicht um ein DOM basierten Baum handelt sondern um reine Content-Objekte, welche den Inhalt und die Struktur der XML Datei wiedergeben.</p>
<p>Als letztes noch mal der komplette Code an einem St&#252;ck f&#252;r die bessere &#220;bersicht:</p>
<div class="codebox">
<pre style="margin:0;padding:0"><span style="color:#7F0074;"><b>package</b></span> de.javathreads.jaxb;

<span style="color:#7F0074;"><b>import</b></span> java.io.File;

<span style="color:#7F0074;"><b>import</b></span> javax.xml.bind.JAXBContext;
<span style="color:#7F0074;"><b>import</b></span> javax.xml.bind.Unmarshaller;

<span style="color:#7F0074;"><b>public</b></span> <span style="color:#7F0074;"><b>class</b></span> Main {

  <span style="color:#7F0074;"><b>public</b></span> <span style="color:#7F0074;"><b>static</b></span> <span style="color:#7F0074;"><b>void</b></span> main(String[] args) <span style="color:#7F0074;"><b>throws</b></span> Exception {
    <span style="color:#3F7F5F">// Package</span>
    JAXBContext jc = JAXBContext.newInstance(<span style="color:#2A00FF;">"de.javathreads.jaxb"</span>);
    Unmarshaller unmarshaller = jc.createUnmarshaller();

    Spieltag sp = (Spieltag) unmarshaller.unmarshal(<span style="color:#7F0074;"><b>new</b></span> File(<span style="color:#2A00FF;">"D:\\projects\\TipResultParser\\xml\\spieltag.xml"</span>));

    <span style="color:#7F0074;"><b>for</b></span> (<span style="color:#7F0074;"><b>int</b></span> i = 0; i < sp.getContent().size(); i++) {
      <span style="color:#7F0074;"><b>if</b></span> (sp.getContent().get(i) <span style="color:#7F0074;"><b>instanceof</b></span> Game) {
        Game g = (Game) sp.getContent().get(i);
        System.out.println(<span style="color:#2A00FF;">"Spiel: "</span> + g.getNummer());
      }
    }
  }
}</pre>
</div>
<p>Ausgabe auf der Konsole:</p>
<div class="codebox">
Spiel: 1<br />
Spiel: 2<br />
&#8230;
</div>
<p>Hinweis zu dem Code bez&#252;glich der Pr&#252;fung mit <code>instanceof Game</code>. Die XML Schnittstelle liefert den Inhalt formatiert und somit mit Sonderzeichen wie &#8220;\t&#8221; und &#8220;\n&#8221; zur&#252;ck, so dass diese Zeichen als Content direkt hinter dem XML Tag beim unmarshal Prozess erkannt wurden. Die Liste, die mir <code>sp.getContent()</code> zur&#252;ckliefert, enth&#228;lt abwechselnd den String &#8220;\t\t\n&#8221; und ein <code>Game</code> Objekt. Das ist aber nicht die Regel und ich muss mal schauen ob ich dieses Verhalten nicht noch irgendwie abstellen kann.</p>
<p>Die Grafiken wurden aus dem offiziellen Sun Artikel &#8220;<a href="http://java.sun.com/developer/technicalArticles/WebServices/jaxb/">Java Architecture for XML Binding (JAXB)</a>&#8221; entnommen. Dort findet man auch eine ausf&#252;hrliche Anleitung f&#252;r den marhall Vorgang, wenn man Java Objekte zu einer XML Datei marshallen m&#246;chte.</p>
]]></content:encoded>
			<wfw:commentRss>http://javathreads.de/2010/04/mit-jaxb-einfach-von-xml-daten-zu-java-objekten/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

