<?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>smash-it.de &#187; java</title>
	<atom:link href="http://www.smash-it.de/blog/category/programmierung/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.smash-it.de/blog</link>
	<description></description>
	<lastBuildDate>Wed, 02 Mar 2011 23:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Eclipse &amp; M2Eclipse &#8211; Main class not found</title>
		<link>http://www.smash-it.de/blog/2011/03/03/eclipse-m2eclipse-main-class-not-found/</link>
		<comments>http://www.smash-it.de/blog/2011/03/03/eclipse-m2eclipse-main-class-not-found/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 23:40:00 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[m2eclipse]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2011/03/eclipse-m2eclipse-main-class-not-found/</guid>
		<description><![CDATA[Gestern hatte ich ein merkwürdiges Phänomen. Ich öffnete ein kleines Projekt in Eclipse und wollte es starten, jedoch erhielt ich eine unschöne Fehlermeldung: Could not find main class. Daraufhin habe ich kurz geprüft ob die Main-Methode tatsächlich richtig von mir angelegt wurde und ja das wurde sie. Es ist wirklich nur eine simple Klasse mit [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 10px 2px 0px; display: inline; float: left" align="left" src="http://www.sonatype.com/people/wp-content/uploads/2011/01/MavenIDE1.png" width="240" height="159" />Gestern hatte ich ein merkwürdiges Phänomen. Ich öffnete ein kleines Projekt in Eclipse und wollte es starten, jedoch erhielt ich eine unschöne Fehlermeldung: <strong>Could not find main class</strong>. Daraufhin habe ich kurz geprüft ob die Main-Methode tatsächlich richtig von mir angelegt wurde und ja das wurde sie. Es ist wirklich nur eine simple Klasse mit nichts weiter als einer Main Methode. Warum aber findet Eclipse die Methode nicht zum Ausführen?</p>
<p>Einige Anfragen bei Google ließen mich checken ob der Pfad zu Ant HOME richtig gesetzt ist(siehe: <a href="http://www.herrodius.com/blog/42" class="liexternal">http://www.herrodius.com/blog/42</a>). Der Pfad war vollkommen korrekt doch meine Main Methode wurde nach wie vor nicht gefunden. Ein anderes Projekt im gleichen Workspace lief und so fing ich an die Projekte zu vergleichen. Mit fiel auf, dass das funktionsfähige Projekt ohne Maven Dependency Management auskamen. Also deaktivierte ich das Dependency Management und probierte einen Start aus. Die Main Methode wurde nun gefunden. Danach aktivierte ich das Dependency Management wieder und welch Überraschung – das Main Methode wurde auch weiterhin gefunden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2011/03/03/eclipse-m2eclipse-main-class-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>m2eclipse &#8211; Maven 2 Repository hinzuf&#252;gen</title>
		<link>http://www.smash-it.de/blog/2010/07/19/howto-wie-kann-man-ein-neues-maven-repository-in-helios-anlegen/</link>
		<comments>http://www.smash-it.de/blog/2010/07/19/howto-wie-kann-man-ein-neues-maven-repository-in-helios-anlegen/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 20:55:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Helios]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[Maven Indexes]]></category>
		<category><![CDATA[Maven Repository]]></category>
		<category><![CDATA[Maven2]]></category>
		<category><![CDATA[neues Repository]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2010/07/howto-wie-kann-man-ein-neues-maven-repository-in-helios-anlegen/</guid>
		<description><![CDATA[&#160; Hier möchte ich euch kurz mein heutiges Problemm schildern. Ich habe Eclipse Helios und über den Eclipse Marketplace Sonatype&#8217;s m2eclipse und die dazugehörigen Extras installiert. Ich habe in der Vergangenheit schon gute Erfahrungen mit dem Maven 2 Plugin gemacht. Um ein zusätzliches Repository zu dem Standard Nexus hinzufügen musste man die Maven Indexes View [...]]]></description>
			<content:encoded><![CDATA[<h5>&#160;</h5>
<p align="justify"><a href="http://www.smash-it.de/blog/wp-content/2010/07/image.png" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Maven Indexes" border="0" alt="Maven Indexes" align="left" src="http://www.smash-it.de/blog/wp-content/2010/07/image_thumb.png" width="240" height="143" /></a>Hier möchte ich euch kurz mein heutiges Problemm schildern. Ich habe Eclipse Helios und über den Eclipse Marketplace Sonatype&#8217;s m2eclipse und die dazugehörigen Extras installiert. Ich habe in der Vergangenheit schon gute Erfahrungen mit dem Maven 2 Plugin gemacht. Um ein zusätzliches Repository zu dem Standard Nexus hinzufügen musste man die Maven Indexes View hervorholen. Dort konnte man komfortabel ein weiteres Repository anlegen. Heute habe ich aber nur eine View namens &quot;Maven Repositories&quot; gefunden und keinen Button zum hinzufügen eines weiteren Repositories. Also schaute ich bei Sonatype in die Dokumentation und die zeigte weiterhin den mir bisher bekannten Weg. Wenn die Maven Indexes View also nicht existiert, wie soll ich dann ein neues Repository hinzufügen?</p>
<p align="justify">Lösung: Die Maven Repository View zeigt das lokale ein globales und alle von Projekte referenzierten <a href="http://www.smash-it.de/blog/wp-content/2010/07/image1.png" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 10px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Maven Repositories" border="0" alt="Maven Repositories" align="left" src="http://www.smash-it.de/blog/wp-content/2010/07/image_thumb1.png" width="240" height="154" /></a>Repositories an. Das heißt wenn man in die POM eines Projektes erstmal ein Repository eingetragen hat, sieht man es nach dem Speichern auch in der neuen View. Ich finde den neuen Weg persönlich weniger intuitiv als die vorherige Lösung. Zudem zeigt die Dokumentation von Sonatype noch den alten Weg.</p>
<p align="justify">Beispiel: Für mein jBPM 4.3 Projekt müssen folgende Zeilen in die pom.xml eingefügt werden damit das Repository mit aufgenommen wird. </p>
<p align="justify">&#160;</p>
<pre class="html" name="code">
  <repositories>
     <repository>
  	<id>jboss</id>
  	<name>JBoss Repository</name>
  	<url>http://repository.jboss.com/maven2</url>
    </repository>
  </repositories>
</pre>
<p align="justify">Danach kann wieder komfortabel in Maven Manier nach den gewünschten Dependencies gesucht werden. Da ich speziell mit jBPM 4.3 entwickle möchte ich euch die folgende Quelle ans Herz legen, die Dependencies für jBPM 4 auch nett visualisiert: <a href="http://community.jboss.org/wiki/jBPM4MavenDependencies" class="liexternal">http://community.jboss.org/wiki/jBPM4MavenDependencies.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2010/07/19/howto-wie-kann-man-ein-neues-maven-repository-in-helios-anlegen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Topic Map Tool</title>
		<link>http://www.smash-it.de/blog/2009/10/27/topic-map-tool/</link>
		<comments>http://www.smash-it.de/blog/2009/10/27/topic-map-tool/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 23:27:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Semantik]]></category>
		<category><![CDATA[Topic Map]]></category>
		<category><![CDATA[Topic Map Tool]]></category>
		<category><![CDATA[TU Berlin]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2009/10/topic-map-tool/</guid>
		<description><![CDATA[In diesem Artikel möchte ich kurz das Ergebnis von einem Projekt des letzten Semesters (Knowledge Networks and Semantic Technologies // SoSe2009 // TU Berlin) vorstellen. In dem Projekt ging es um die Analyse vorhandener E-Mails hinsichtlich der vorkommenden Themen und deren Verbreitung in dem E-Mail Netzwerk. Die Ausgangsdaten waren E-Mails vom Konkurs gegangenen US-Gas-Konzern Enron. [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><a href="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot.jpg" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="_TMT_Screenshot" border="0" alt="_TMT_Screenshot" align="left" src="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot_thumb.jpg" width="171" height="171" /></a>In diesem Artikel möchte ich kurz das Ergebnis von einem Projekt des letzten Semesters (Knowledge Networks and Semantic Technologies // SoSe2009 // TU Berlin) vorstellen. In dem Projekt ging es um die Analyse vorhandener E-Mails hinsichtlich der vorkommenden Themen und deren Verbreitung in dem E-Mail Netzwerk. Die Ausgangsdaten waren E-Mails vom Konkurs gegangenen US-Gas-Konzern Enron. Uns lagen knapp 70 000 Mails vor, die das entstandene Topic Map Tool auf interessante Themen untersucht und die Korrelationen von Keywords berechnet. Um wirklich interessante Themen im nicht standardisierten E-Mail Verkehr zu identifizieren, kamen <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html" title="Regular Expressions" target="_blank" class="liexternal">Regular Expressions</a>, Stopword-Listen sowie die <a href="http://lyle.smu.edu/~tspell/jaws/index.html" title="Java API for Wordnet Searching" target="_blank" class="liexternal">Wordnet-Searching-API</a> zum Einsatz. Mit diesen Technologien wurden relevante Keywords aus den E-Mails gesammelt und deren Korrelationen zu anderen relevanten Keywords berechnet. Ein wichtiger Faktor für die Berechnung ist, wie häufig zwei korrelierte Wörter zusammen in einer E-Mail auftauchen. Mit Hilfe von Wordnet konnten semantisch gleiche Wörter zu Clustern zusammengefasst oder gefiltert werden. Ebenso half <a href="http://wordnet.princeton.edu/wordnet/" title="Wordnet" target="_blank" class="liexternal">Wordnet</a> bei einer Filterung nach Wortarten, da vor allem Substantive interessante Schlüsselwörter sind. </p>
<p align="justify">Das Ergebnis der Analyse war ein Datenbank Dump, der im <a href="http://www.commetrix.de/" title="Commetrix" target="_blank" class="liexternal">Commetrix</a> Schema gespeichert wurde. So konnten die Ergebnisse mit Hilfe von <a href="http://www.commetrix.de/" title="Commetrix" target="_blank" class="liexternal">Commetrix</a> visualisiert werden. Die Ergebnisse seht Ihr auf den Screenshots weiter unten.</p>
<p align="justify">Exemplarisch starke Korrelationen bestanden zum Beispiel zwischen den Worten Gas und Price sowie zwischen President und Election. Unzählige weiter Beispiele könnte ich an dieser Stelle auflisten. Zusammenfassend hat die Lehrveranstaltung sehr viel Spaß gemacht und mich für das Thema semantische Netze begeistert. </p>
<h3>&#160;</h3>
<h3>Screenshot der Anwendung</h3>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/10/image1.png" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/10/image_thumb1.png" width="542" height="443" /></a></p>
<h3><a href="http://wordnet.princeton.edu/wordnet/" class="liexternal"></a></h3>
<ul>
<h3>Screenshots der visualisierten Topic Map</h3>
<p>&#160;</p>
<p>   <a href="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot05.jpg" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TMT_Screenshot05" border="0" alt="TMT_Screenshot05" src="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot05_thumb.jpg" width="244" height="244" /></a> <a href="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot03.jpg" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TMT_Screenshot03" border="0" alt="TMT_Screenshot03" src="http://www.smash-it.de/blog/wp-content/2009/10/TMT_Screenshot03_thumb.jpg" width="244" height="244" /></a> </ul>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2009/10/27/topic-map-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbeans erkennt Datenbank nicht</title>
		<link>http://www.smash-it.de/blog/2009/08/17/keine-datenbankverbindung-mit-netbeans/</link>
		<comments>http://www.smash-it.de/blog/2009/08/17/keine-datenbankverbindung-mit-netbeans/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 20:54:39 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Netbeans Persistence.xml Datenbank]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2009/08/keine-datenbankverbindung-mit-netbeans/</guid>
		<description><![CDATA[Datenbankverbindung in Netbeans Projekt funktioniert nicht!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.smash-it.de/blog/wp-content/2009/08/image11.png" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/08/image-thumb8.png" width="163" height="64" /></a>Vor kurzem wurde ich mal wieder gezwungen mit Netbeans zu arbeiten. Und naja was soll ich sagen. Ich habe schon immer eine gewisse Distanz zu der IDE obwohl ich in diesem Semester auch einige Bequemlichkeiten kennengelernt habe. Was mir aber aktuell passiert ist, finde ich so d&#228;mlich!!!</p>
<p> In meinem Java Projekt habe ich eine Datenbank Verbindung in der persistence.xml konfiguriert. So bin ich es aus Eclipse gewohnt und es funktioniert alles bestens. Die Anwendung konnte unter Netbeans jedoch keine Verbindung zu meiner Datenbank herstellen. Und nun haltet <a href="http://www.smash-it.de/blog/wp-content/2009/08/image9.png" class="liimagelink"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/08/image-thumb7.png" width="244" height="135" /></a>euch fest: Wenn man die Datenbank in der IDE gesondert eintr&#228;gt unter dem Tab &quot;Services&quot; ist Netbeans so schlau und erkennt, dass die Verbindung scheinbar doch richtig konfiguriert wurde und stellt die Verbindung zur Datenbank her. Warum reicht es Netbeans denn nicht wenn die Verbindung in der XML eingetragen ist? Wenn jemand von euch Details dazu hat, lasst es mich doch bitte wissen. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2009/08/17/keine-datenbankverbindung-mit-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Plugins</title>
		<link>http://www.smash-it.de/blog/2009/08/10/meine-eclipse-plugins/</link>
		<comments>http://www.smash-it.de/blog/2009/08/10/meine-eclipse-plugins/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 15:08:19 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Eclipse Plugins]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2009/08/meine-eclipse-plugins/</guid>
		<description><![CDATA[An dieser Stelle möchte ich kurz eine Liste meine Eclipse Plugins präsentieren. Vielleicht ist für euch etwas neues dabei oder ihr habt unter Umständen nette Empfehlungen für mich. Versionierung Subclipse oder Subversive: Subversion Clients Code Analyse: JDepend: Tool zur Analyse von Architektur und Abhängigkeiten PMD: Code Analyse, sucht nach potentiellen Bugs und Problemen Codestyle: Checkstyle: [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">An dieser Stelle möchte ich kurz eine Liste meine Eclipse Plugins präsentieren. Vielleicht ist für euch etwas neues dabei oder ihr habt unter Umständen nette Empfehlungen für mich.</p>
<p>Versionierung</p>
<ul>
<li><a href="http://subclipse.tigris.org/update_1.6.x" title="Subclipse 1.6" target="_blank" class="liexternal">Subclipse</a> oder <a href="http://community.polarion.com/projects/subversive/download/1.1/update-site/" title="Subversive" target="_blank" class="liexternal">Subversive</a>: Subversion Clients</li>
</ul>
<p>Code Analyse:</p>
<ul>
<li><a href="http://andrei.gmxhome.de/eclipse/" title="JDepend" target="_blank" class="liexternal">JDepend</a>: Tool zur Analyse von Architektur und Abhängigkeiten</li>
<li><a href="http://pmd.sourceforge.net/eclipse" title="PMD" target="_blank" class="liexternal">PMD</a>: Code Analyse, sucht nach potentiellen Bugs und Problemen</li>
</ul>
<p>Codestyle:</p>
<ul>
<li></li>
<li><a href="http://eclipse-cs.sourceforge.net/update/" title="Checkstyle" target="_blank" class="liexternal">Checkstyle</a>: Regelsystem zur Einhaltung von Code Konventionen</li>
<li><a href="http://jautodoc.sourceforge.net/update/" title="JAutodoc" target="_blank" class="liexternal">JAutodoc</a>: automatische Generierung von Javadoc Kommentaren</li>
</ul>
<p>Testing / Code Coverage:</p>
<ul>
<li><a href="http://update.eclemma.org/" title="Emma for Eclipse" target="_blank" class="liexternal">Emma for Eclipse</a> oder <a href="http://update.atlassian.com/eclipse/clover" title="Clover" target="_blank" class="liexternal">Clover</a> (Llizenzpflichtig)</li>
</ul>
<p>Build</p>
<ul>
<li><a href="http://m2eclipse.sonatype.org/update/" title="Maven2 for Eclipse" target="_blank" class="liexternal">Maven2 for Eclipse</a>: Integration des Build Tools in die Eclipse IDE</li>
</ul>
<p>Development</p>
<ul>
<li><a href="http://download.jboss.org/jbosstools/updates/development" title="JBoss Tools" target="_blank" class="liexternal">JBoss Tools</a>: nützlich für die Entwicklung mit dem JBoss Application Server</li>
</ul>
<p>&nbsp;</p>
<p align="justify">Seid Ihr mit meiner Plugin Sammlung zufrieden oder gibt es Plugins, die hier unbedingt mit auftauchen sollten? Mir fällt noch eines ein, dass ich schon ewig nicht mehr benutzt habe &#8211; der Visual Editor. Da die Entwicklung des Visual Editors nur schleppend voran ging und die Unterstützung in neueren Eclipse Versionen nicht immer gegeben war, habe ich mich regelmäßig mit dem guten Editor von Netbeans beholfen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2009/08/10/meine-eclipse-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BPEL mit Netbeans</title>
		<link>http://www.smash-it.de/blog/2009/06/20/tutorial-bpel-prozess-in-netbeans/</link>
		<comments>http://www.smash-it.de/blog/2009/06/20/tutorial-bpel-prozess-in-netbeans/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 13:25:16 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Netbeans WebService BPEL Glassfish Tutorial]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2009/06/tutorial-bpel-prozess-in-netbeans/</guid>
		<description><![CDATA[Der folgende Artikel soll helfen einen BPEL Process mit Netbeans zu erstellen und auf den Glassfish Application Server zu deployen. Doch zun&#228;chste beschreibe ich kurz das vorhaben. Der BPEL Prozess nutzt insgesamt drei Web Services (YingService, YangService und MatchService). Der YingService ben&#246;tigt keinen Parameter und liefert den String &#34;Ying&#34; zur&#252;ck. Der YangService arbeitet analog zum [...]]]></description>
			<content:encoded><![CDATA[<p>Der folgende Artikel soll helfen einen BPEL Process mit Netbeans zu erstellen und auf den Glassfish Application Server zu deployen. Doch zun&#228;chste beschreibe ich kurz das vorhaben. Der BPEL Prozess nutzt insgesamt drei Web Services (YingService, YangService und MatchService). Der YingService ben&#246;tigt keinen Parameter und liefert den String &quot;Ying&quot; zur&#252;ck. Der YangService arbeitet analog zum YingService. Diese beiden Service arbeiten parallel! Der MatchService nimmt zwei Parameter vom Typ String entgegen und konkateniert diese beiden Strings und den String &quot;Fit&quot;. Danach wird der zusammengesetzte String vom MatchService zur&#252;ckgeliefert. Die einzelnen Web Services interessieren den Benutzer des BPEL Prozesses nicht, da dieser nach au&#223;en wie ein simpler Web Service (z.B. YingService) wirkt.</p>
<p>Nachdem das Ziel beschrieben ist kann die Arbeit beginnen. Ich habe sehr viele Screenshots verwendet um den Weg m&#246;glichst anschaulich zu machen. </p>
<p>Insgesamt werden 4 Projekte angelegt. Beginnen m&#246;chte ich mit einem Projekt, dass die einzelnen WebServices (YingService, YangService und MatchService) enth&#228;lt, die dann im BPEL Prozess verwendet werden.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="170" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb.png" width="244" border="0" /></a>Dazu legen wir einfach eine neue Web Application an und f&#252;gen anschlie&#223;end die drei WebServices hinzu. </p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p> <span id="more-723"></span>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image1.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="254" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb1.png" width="244" border="0" /></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image2.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb2.png" width="244" border="0" /></a> </p>
<p>Jeder dieser WebServices hat jeweils eine Methode, die man &#252;ber Add Operation hinzuf&#252;gen kann. In dem dazugeh&#246;rigen Dialog kann man sowohl Parameter als auch R&#252;ckgabetyp festlegen. In diesem Beispiel habe ich die Methoden sayYing(), sayYang() und concateStrings(String ying, String yang) genannt. Jede dieser Methoden gibt einen String zur&#252;ck.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image3.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="141" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb3.png" width="244" border="0" /></a> </p>
<p>Das wiederholt man einfach noch f&#252;r die anderen beiden Web Services.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image4.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="126" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb4.png" width="244" border="0" /></a></p>
<p>Sind alle Web Services angelegt kann man sich daran machen ein BPEL Modul anzulegen. Dazu legt man ein neues Projekt an w&#228;hlt im Dialog &quot;SOA&quot; und anschlie&#223;end &quot;BPEL Module&quot;.</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image5.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb5.png" width="237" border="0" /></a>In diesem BPEL Module ben&#246;tigt man nun noch einen BPEL Prozess, den man &#252;ber &quot;New&quot; ganz einfach anlegen kann. Ich habe diesen Prozess ConcatProcess.bpel genannt.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image6.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="393" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb6.png" width="240" border="0" /></a> </p>
<p>Um diesem neuen BPEL Prozess die zuvor erstellten Web Services aus dem anderen Projekt bekannt zu machen, nutzt man den komfortablen Befehl &#8222;Generate and Copy WDSL&#8220; in dem zuvor erstellten Projekt. Als Ziel w&#228;hlt man ein Verzeichnis in dem BPEL Module. Ich habe dazu ein Verzeichnis &quot;wsdls&quot; angelegt.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image7.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="380" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb7.png" width="242" border="0" /></a> </p>
<p>Die Abbildung links zeigt den momentanen Stand in meinem BPEL Module. Wenn die *Wrapper.wsdls und die *.xsds bei euch noch nicht vorhanden sind, liegt es daran, dass ihr die WebServices noch nicht im Prozess verwendet habt. Diese Dateien werden aber automatische erzeugt und sollten euch nicht verwundern.</p>
<p>Bitte &#252;berpr&#252;ft an dieser Stelle den Code der wsdl Dateien. Denn beim Kopieren wurde ein URL zur&#252;ckgesetzt, die nun angepasst werden muss.</p>
<p>Der folgende Code zeigt das Problem. Die Adress Location soll mit der aktuellen Service URL ersetzt werden.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<pre class="html" name="code">...
<service name="YingServiceService">
<port name="YingServicePort" binding="tns:YingServicePortBinding">
      <soap:address location="REPLACE_WITH_ACTUAL_URL" />
    </port>
  </service>
...</pre>
<pre class="html" name="code">...
<service name="YingServiceService">
<port name="YingServicePort" binding="tns:YingServicePortBinding">
      <soap:address location="http://localhost:8080/TestWS/YingServiceService?wsdl" />
    </port>
  </service>
...</pre>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image8.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="263" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb8.png" width="245" border="0" /></a> </p>
<p>Nun &#246;ffnet man den ConcatProcess.bpel und geht in den Designer Modus. Doch bevor der Process mit Hilfe des Designers erstellt wird, legt man am besten noch ein WSDL Dokument an, dass den BPEL Prozess nach au&#223;en repr&#228;sentiert. <a href="http://www.smash-it.de/blog/wp-content/2009/06/image9.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb9.png" width="246" border="0" /></a> </p>
<p>Da der ConcatProcess keinen Eingabe-Parameter hat, kann man den Eintrag getrost entfernen.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image10.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="227" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb10.png" width="248" border="0" /></a> </p>
<p>In diesem Beispiel werden SOAP und der Binding SubType &quot;RPC literal&quot; verwendet.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image11.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb11.png" width="244" border="0" /></a></p>
<p>In der Abbildung links sieht man erstmalig den Designer auf dem schon der Prozess zu sehen ist. Man kann nun munter die WSDL Datei auf solche Fl&#228;chen ziehen, wie sie im&#160; roten K&#228;stchen zu sehen sind. Die drei WebServices (YingService, YangService und MatchService) zieht man auf die rechten graue Fl&#228;che und das gerade eben erstellte wsdl Dokument auf die linke graue Fl&#228;che.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image12.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="295" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb12.png" width="247" border="0" /></a></p>
<p>Die linke Abbildung zeigt die Palette mit BPEL Elementen. Uns sollen nur die Element Invoke, Receive, Reply, Assign&#160; und Flow interessieren.</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image13.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="229" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb13.png" width="244" border="0" /></a> </p>
<p>Bitte positioniert die einzelnen Elemente wie links dargestellt in der Oberfl&#228;che. Um die Verbindungslinien zwischen den Elementen k&#252;mmern wir uns in den n&#228;chsten Schritten.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image14.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb14.png" width="244" border="0" /></a>Zuerst macht man einen Doppelklick auf das Receive Element und nimmt die links abgebildeten Einstellungen vor.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image15.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="147" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb15.png" width="244" border="0" /></a>Als n&#228;chstes macht man ein Doppelklick auf eines der Invoke Element im Flow und erstellt einen Partnerlink zum YingService. Dazu erstellt man sowohl Input als auch Output-Variable. Den Vorgang wiederholt man f&#252;r den YangService.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image15.png" class="liinternal"></a></p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image16.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="115" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb16.png" width="244" border="0" /></a></p>
<p>Nun klickt man auf das oberste Assign Element und ein Mapper &#246;ffnet sich. In solch einem Mapper kann man die Variablen zwischen zwei Elementen zuordnen. Da wir im Receive keine Variable erhalten haben, erstellen wir String Literale, den Variablen SayYingIn und SayYangIn zugeordnet werden. </p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image17.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="116" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb17.png" width="246" border="0" /></a> Bei dem n&#228;chsten Assign Element sind bereits Variablen vorhanden, sodass die Mapping Pfeile vom linken zum rechten Baum f&#252;hren (siehe Abbildung links). </p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image18.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="182" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb18.png" width="244" border="0" /></a>Im letzten Assign ordnet man die Output Variable des MatchService der Gesamt-Prozess-Output Variable zu, die man vorher im Dialog des Reply Elements erstellt.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image19.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="170" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb19.png" width="244" border="0" /></a>Als n&#228;chstes legen wir ein neues Projekt (Composite Application) an, das sp&#228;ter den BPEL Prozess benutzt.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image20.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="185" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb20.png" width="244" border="0" /></a>Im n&#228;chsten Schritt f&#252;gen wir den erstellten Prozess der Composite Application hinzu.&#160; </p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image21.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="136" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb21.png" width="244" border="0" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image22.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb22.png" width="244" border="0" /></a>Nach dem Hinzuf&#252;gen des Prozesses sollte die Darstellung der Composite Application in etwas so aussehen. </p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image23.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="270" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb23.png" width="248" border="0" /></a>Nun kann es an das Deployment der einzelnen Projekte gehen. Zuerst sollte man den Glassfish Application Server starten. Ich nutze momentan noch den Server in der Version 2. Dieses Tutorial funktioniert aber auch mit der Version 3.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image24.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="301" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb24.png" width="246" border="0" /></a>Als erstes wird das Projekt mit den drei einzelnen WebServices auf dem Server deployed. Dazu reicht ein rechtsklick auf das Projekt und Deploy. Das Deployment dauert einen Augenblick.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image25.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="174" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb25.png" width="244" border="0" /></a> </p>
<p>Das erfolgreiche Deployment &#252;berpr&#252;ft man am besten in der Oberfl&#228;che des Glassfish Servers. Die erreicht man im Browser &#252;ber localhost:4848. Die Anmeldedaten sind standardm&#228;&#223;ig admin und adminadmin. Links unter Web Services sollten die Web Services zu sehen sein.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image26.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb26.png" width="248" border="0" /></a>Nun kann man die Composite Application deployen. Diese findet man dann in der Glassfish Oberfl&#228;che unter JBI / Dienstgruppen.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image27.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb27.png" width="246" border="0" /></a>Zum Testen der Composite Application erstellt man einfach einen WebService Client. In dem Dialog tr&#228;gt man als WSDL URL das folgende ein: </p>
<p><a href="http://localhost:9080/ConcatProcessService/ConcatProcessPort?wsdl" title="http://localhost:9080/ConcatProcessService/ConcatProcessPort?wsdl" class="liexternal">http://localhost:9080/ConcatProcessService/ConcatProcessPort?wsdl</a></p>
<p><a href="http://www.smash-it.de/blog/wp-content/2009/06/image28.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="148" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/06/image-thumb28.png" width="244" border="0" /></a></p>
<p>Danach sieht man den Client in der Projektstruktur. Wenn man den Baum so weit wie m&#246;glich &#246;ffnet sieht man die WebService Operation. Zieht man diese Operation mit der Maus in die main Methode sieht man den daraus entstehenden Code. Dieser Code gibt das Ergebnis der WebService Operation per println aus. </p>
<p>&#160;</p>
<p>Ich hoffe dieses Tutorial hat euch geholfen einen BPEL Prozess zu erstellen und zur Ausf&#252;hrung zu bringen. Viel Spa&#223; beim arbeiten mit BPEL!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2009/06/20/tutorial-bpel-prozess-in-netbeans/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Eclipse mit spezieller Java Version starten</title>
		<link>http://www.smash-it.de/blog/2009/03/24/eclipse-mit-spezieller-java-version-starten/</link>
		<comments>http://www.smash-it.de/blog/2009/03/24/eclipse-mit-spezieller-java-version-starten/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 07:27:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/?p=480</guid>
		<description><![CDATA[Eclipse mit bestimmter Java VM starten.]]></description>
			<content:encoded><![CDATA[<p align="justify"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="89" alt="image" src="http://www.smash-it.de/blog/wp-content/2009/03/image3.png" width="133" border="0"> Mit dem folgenden einfachen Listing kann man Eclipse in einer speziellen Java Version starten. Wenn man wie ich gezwungen wird weiter mit Java 1.5 zu arbeiten aber trotzdem schon 1.6 installiert hat um up to date zu sein, kann man von der IDE bis zum Programm alles mit der alten Version starten. Dazu fügt ihr einfach den&nbsp; &#8220;-vm C:\Programme\Java\jdk1.5.0_16\bin&#8221; an eure Verknüpfung an.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2009/03/24/eclipse-mit-spezieller-java-version-starten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST mit Eclipse und Tomcat</title>
		<link>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/</link>
		<comments>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 11:02:43 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Jersey]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/</guid>
		<description><![CDATA[Motivation: Der SOA Zug rollt bzw. ist eigentlich schon lange lange unterwegs und WebServices sind ein Trendthema. Ein Web Service lässt sich mit dem SOAP basierten Ansatz oder mit der REST Idee realisieren. Auf SOAP und Frameworks wie Axis2 werde ich hier nicht eingehen. Nun eine kurze Erklärung zu REST: Der größte Unterschied zu dem [...]]]></description>
			<content:encoded><![CDATA[<h6><strong>Motivation:</strong></h6>
<p align="justify">Der SOA Zug rollt bzw. ist eigentlich schon lange lange unterwegs und WebServices sind ein Trendthema. Ein Web Service lässt sich mit dem SOAP basierten Ansatz oder mit der REST Idee realisieren. Auf SOAP und Frameworks wie Axis2 werde ich hier nicht eingehen. Nun eine kurze Erklärung zu REST: Der größte Unterschied zu dem SOAP basierten Ansatz ist, dass es die HTTP Methoden wie GET, POST, PUT, DELETE, HEADER benutzt. In dem Glaubenskrieg zwischen den &#8220;Seifenliebhabern&#8221; und den REST-Anhängern wird das immer als Argument gebracht, dass REST als Web Service viel näher am Internet (HTTP) ist. Denn REST arbeitet wie gesagt mit den HTTP Methoden und die Daten des Service sind per Link erreichbar.</p>
<p align="justify">Ich habe mich vor kurzem mit der Materie auseinandergesetzt und versucht eine leichte Erklärung zu finden, die mir zeigt wie ich ein REST Projekt erstelle, es auf dem Tomcat Server zum laufen bringe und anschließend benutze. Weil ich die Ergebnisse bei der Suche nach solchen Tutorials nicht besonders befriedigend fand, dachte ich mir, es wäre an der Zeit so ein einfaches Tutorial zu schreiben.</p>
<p><span id="more-347"></span></p>
<h6>Projekt Setup:</h6>
<ul>
<li><a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip" target="_blank" class="lizip">Eclipse JavaEE 3.4 (Ganymede)</a></li>
<li><a href="http://mirror.moooo.org/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.zip" target="_blank" class="lizip">Tomcat 6.0.18</a></li>
<li><a href="https://jersey.dev.java.net" target="_blank" class="liexternal">Jersey</a> (REST Referenz Implementierung)</li>
</ul>
<p>Außerdem verwende ich das Kommandozeilentool <a href="http://www.gknw.net/mirror/curl/win32/curl-7.19.2-devel-mingw32.zip" target="_blank" class="lizip">Curl</a> zum Testen der Anwendung. Mit dem Tool können einfach Request an eine URL geschickt und die Antwort ausgewertet werden.</p>
<p>Nun kann man direkt in Eclipse loslegen indem man ein neues Dynamisches Web Projekt anlegt.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image3.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb3.png" border="0" alt="image" width="467" height="467" /></a></p>
<p align="justify">Nach dem Anlegen des Projektes habe ich lediglich das Paket de.smashit.resources angelegt und die Datei web.xml im Ordner WEB-INF erstellt. Den Inhalt der web.xml findet Ihr weiter unten.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image4.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb4.png" border="0" alt="image" width="233" height="211" /></a></p>
<p align="justify">Für das Entwickeln eines RESTful Webservice sind auch einige Bibliotheken von Nöten, die im Ordner WEB-INF/lib liegen müssen. <a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/rest_libs.zip" title="REST Libraries" target="_blank" class="lizip">Hier</a> erhaltet ihr die von mir verwendete libs.</p>
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">Das folgende Listing zeigt eine einfache Ressourcenklasse, die im Paket de.smashit.resources liegt. Diese Ressource ist über die URL <a href="http://localhost/RestDemo/helloworld" class="liexternal">http://localhost/RestDemo/helloworld</a> erreichbar. Die Annotation @Path konfiguriert die URL für die Ressource. Die Annotation @GET und @POST zeichnen die einzelnen Java Methoden aus und sorgen für ein Mapping zu den Http Methoden (GET, POST, PUT, DELETE, HEAD). Die @Produces Annotation gibt an welche Output von der Methode zurückgeliefert wird. In diesem einfachen Beispiel ist es nur einfacher Text aber es gibt noch andere Typen wie: application/xml, text/html, application/json.</p>
<p align="justify">
<pre lang="JAVA" line="1">
package de.smashit.resources;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

//The resource (Java class) will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class HelloRestResource {

// The method will be invoked by HTTP GET requests
// The method will produce content of MIME Media type "text/plain"
@GET
@Produces("text/plain")
public String getClichedMessage() {
return "Hello Rest (GET)";
}

@POST
@Produces("text/plain")
public String setSomething() {
return "Hello Rest (Post)";
}
}</pre>
<p align="justify">Im Ordner WEB-INF die Datei web.xml anlegen und mit folgendem XML Code füllen. In der web.xml wird ein sogenanntes Servlet gemappt (RestServlet), das von der Wurzel Url aus aufrufbar ist (siehe url-pattern). Die Ressourcenklassen müssen sich in den Paketen de.smashit.resources oder test befinden. Jersey sucht sich die Resourcen aus den Paketen raus.</p>
<pre lang="XML" line="1">
< ?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance"
xmlns="<a href="http://java.sun.com/xml/ns/javaee" class="liexternal">http://java.sun.com/xml/ns/javaee"</a>
xmlns:web="<a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" class="liexternal">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a>
xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee" class="liexternal">http://java.sun.com/xml/ns/javaee</a> <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" class="liexternal">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> id="WebApp_ID" version="2.5"&gt;

<display -name>RestDemo</display><display -name>

<servlet>
</servlet><servlet -name>RestServlet</servlet>
<servlet -class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet>

<init -param>
<param -name>
com.sun.jersey.config.property.resourceConfigClass
</param>
<param -value>
com.sun.jersey.api.core.PackagesResourceConfig
</param>
</init>

<init -param>
<param -name>
com.sun.jersey.config.property.packages
</param>
<param -value>
de.smashit.resources;test
</param>
</init>

<load -on-startup>1</load>

<servlet -mapping>
</servlet><servlet -name>RestServlet</servlet>
<url -pattern>/*</url>

</display></pre>
<p align="justify">Das Projekt wird als WebArchive (.war) auf dem Tomcat deployed. Dazu wählt man die Export Funktion von Eclipse und exportiert die war-Datei in den Ordner Webapps des Tomcats. Falls der Tomcat Server bereits läuft, wird die Anwendung automatisch deployed/gestartet und wenn nicht muss nun noch der Server gestartet werden.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image5.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb5.png" border="0" alt="image" width="589" height="376" /></a></p>
<p align="justify">Das Projekt wurde erfolgreich auf dem Tomcat deployed, wenn die Meldung in der Konsole des Tomcat in etwa die Nachricht &#8220;Root resource classes found&#8221; steht. Dann hat der Server die Resource-Klassen in den einzelnen Paketen gefunden und sie erfolgreich geladen.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image6.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb6.png" border="0" alt="image" width="596" height="167" /></a></p>
<p align="justify">Anschließen kann man die Anwendung bequem per Browser oder dem Kommandozeilentool curl testen, indem man eine Anfrage an die Adresse stellt. Sowohl der Browser als auch curl versenden standardmäßig GET-Anfragen. So dass in diesem Fall eine Methode der Ressource ansgesprochen wird, die mit @GET annotiert ist.</p>
<p>Mit Browser:</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image7.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb7.png" border="0" alt="image" width="594" height="215" /></a></p>
<p>oder ein GET Request mit curl:</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image8.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb8.png" border="0" alt="image" width="586" height="110" /></a></p>
<p>oder ein POST Zugriff mit der Option -F</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image9.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb9.png" border="0" alt="image" width="588" height="108" /></a></p>
<p align="justify">
<p align="justify">Hat euch dieses einfache Tutorial gefallen oder geholfen? Ich denke nun sollte jeder die Grundlage von REST verstanden haben und ist in der Lage die vielen Details und Möglichkeiten von REST zu erforschen. In meinen Augen ist der schwierigste Teil der Arbeit im Entwurf eines WebServices mit REST. Den die verwendeten URIs sollten möglichst lange gültig sein und alle gewünschten Anforderungen abdecken. Werden neue Funktionen gewünscht, kommen meist schnell Ressourcen hinzu weil die begrenzte Anzahl der HTTP Methoden nicht viel Spielraum pro Ressource lässt. Also investiert in den Entwurf und Definition der Ressourcen möglichst viel Zeit um eine spätere Änderung wenn möglich zu vermeiden.</p>
<p align="justify">Und nun wünsche ich viel Spaß beim Entwickeln von Anwendungen mit REST WebService.</p>
<p align="justify">
<p align="justify">Links:</p>
<ul>
<li>
<div><a href="http://java.dzone.com/articles/putting-java-rest" title="http://java.dzone.com/articles/putting-java-rest" class="liexternal">http://java.dzone.com/articles/putting-java-rest</a></div>
</li>
<li>
<div></div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lernen einer neuen Programmiersprache</title>
		<link>http://www.smash-it.de/blog/2008/11/08/erlernen-einer-neuen-programmiersprache/</link>
		<comments>http://www.smash-it.de/blog/2008/11/08/erlernen-einer-neuen-programmiersprache/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 16:13:42 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[allgemein]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[JEE]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/?p=205</guid>
		<description><![CDATA[Heute habe ich eine nette Abbildung gefunden, die den nat&#252;rlichen Verlauf beim Lernen einer neun Programmiersprache widerspiegelt. Leicht lassen sich die Erkenntnisse auf Frameworks einer bereits bekannten Sprache adaptieren. Denn auch in diesem Fall muss man hinter die vermeintlich absurden Gedanken anderer Entwickler steigen und ist gl&#252;cklich wenn man endlich auf der gleichen geistigen Ebene [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/11/die-neue-programmiersprache-lernen.png" class="liimagelink"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="258" alt="die-neue-programmiersprache-lernen" src="http://www.smash-it.de/blog/wp-content/uploads/2008/11/die-neue-programmiersprache-lernen-thumb.png" width="198" border="0" /></a>Heute habe ich eine nette Abbildung gefunden, die den nat&#252;rlichen Verlauf beim Lernen einer neun Programmiersprache widerspiegelt. Leicht lassen sich die Erkenntnisse auf Frameworks einer bereits bekannten Sprache adaptieren. Denn auch in diesem Fall muss man hinter die vermeintlich absurden Gedanken anderer Entwickler steigen und ist gl&#252;cklich wenn man endlich auf der gleichen geistigen Ebene gelandet ist. In diesem Sinne, geht es jetzt bei mir weiter mit EJB3, JBoss, Seam und jBPM.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Quelle: <a href="http://www.peterkroener.de/die-neue-programmiersprache-lernen/" title="http://www.peterkroener.de/die-neue-programmiersprache-lernen/" class="liexternal">http://www.peterkroener.de/die-neue-programmiersprache-lernen/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2008/11/08/erlernen-einer-neuen-programmiersprache/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eclipse mit mehr Speicher starten</title>
		<link>http://www.smash-it.de/blog/2008/08/22/eclipse-mit-mehr-speicher-starten/</link>
		<comments>http://www.smash-it.de/blog/2008/08/22/eclipse-mit-mehr-speicher-starten/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 12:28:31 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/?p=130</guid>
		<description><![CDATA[Wer es, so wie ich satt hat auf Eclipse zu warten weil der Rechner mit allen m&#246;glichen Anwendungen l&#228;uft, kann Eclipse mehr Speicher zuweisen und somit f&#252;r einen z&#252;gigeren Ablauf der IDE sorgen. Die &#8220;Out-of-memory&#8221;-Exception geh&#246;rt&#160; von nun an zum alten Eisen Gemacht wird es, in dem man der Eclipse JVM-Parameter mitgibt. Man startet die [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img title="2007_10_22_eclipse.jpg" height="138" alt="2007_10_22_eclipse.jpg" hspace="hspace" src="http://blog.jensfranke.com/images/2007_10_22_eclipse.jpg" width="214" border="0" />Wer es, so wie ich satt hat auf Eclipse zu warten weil der Rechner mit allen m&#246;glichen Anwendungen l&#228;uft, kann Eclipse mehr Speicher zuweisen und somit f&#252;r einen z&#252;gigeren Ablauf der IDE sorgen. Die &#8220;Out-of-memory&#8221;-Exception geh&#246;rt&#160; von nun an zum alten Eisen <img src='http://www.smash-it.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p align="justify">Gemacht wird es, in dem man der Eclipse JVM-Parameter mitgibt. Man startet die IDE mit den folgenden Parametern:</p>
<p align="justify"><code></code></p>
<p align="justify"><code>eclipse.exe -vmargs -Xms256m -Xmx256m</code></p>
<p align="justify">-Xms ist die minimal verwendete JVM-Speichergr&#246;&#223;e   <br />-Xmx ist die maximal verwendete JVM-Speichergr&#246;&#223;e    <br />In diesem Beispiel habe ich die Speichergr&#246;&#223;e auf 256 MB fixiert.</p>
<p align="justify">Weitere Informationen findet ihr unter Help/ Help Contents/ Workbench User Guide/ Tasks/ Running Eclipse</p>
<p align="justify">So l&#228;sst sich zum Beispiel auch die JVM einstellen, mit der Eclipse starten soll.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2008/08/22/eclipse-mit-mehr-speicher-starten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/


Served from: www.smash-it.de @ 2012-02-05 04:15:28 -->
