<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.1.3" -->
<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/"
	>

<channel>
	<title>ghadir.de</title>
	<link>http://www.ghadir.de/blog</link>
	<description>Halbwissen trifft Ahnungslosigkeit</description>
	<pubDate>Mon, 06 Jul 2009 22:42:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>
	<language>en</language>
			<item>
		<title>Welche Bücher sollte ein Informatiker gelesen haben?</title>
		<link>http://www.ghadir.de/blog/?p=45</link>
		<comments>http://www.ghadir.de/blog/?p=45#comments</comments>
		<pubDate>Fri, 29 May 2009 13:46:35 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=45</guid>
		<description><![CDATA[Hiermit komme ich der Bitte nach, ein paar Buchempfehlungen zu geben, die man als praktischer Informatiker gelesen haben sollte. Es gibt tolle theoretische Bücher oder Grundlagenwerke. Es gibt Bücher, die sich eher auf Projektmanagement beziehen. Und es gibt Bücher, die sich auf das Selbstverständnis und das Handwerkszeug beziehen. 
Es fällt mir schwer, meine persönliche Top [...]]]></description>
			<content:encoded><![CDATA[<p>Hiermit komme ich der Bitte nach, ein paar Buchempfehlungen zu geben, die man als praktischer Informatiker gelesen haben sollte. Es gibt tolle theoretische Bücher oder Grundlagenwerke. Es gibt Bücher, die sich eher auf Projektmanagement beziehen. Und es gibt Bücher, die sich auf das Selbstverständnis und das Handwerkszeug beziehen. </p>
<p>Es fällt mir schwer, meine persönliche Top 10 zusammenzustellen. Bemerkenswert ist, wie alt die wertvollen Bücher im Schnitt sind&#8230; Hier ist die Liste der nicht spezifischen Bücher, die sich eher mit zeitlosen Themen befassen:</p>
<p>* Code Complete<br />
* Pragmatic Programmer<br />
* Mythos des Mann-Monats<br />
* Objektorientierte Softwareentwicklung Analyse und Design mit UML 2.0<br />
* Refactoring<br />
* Extreme Programming<br />
* Business Components Factory<br />
* Analysis Patterns<br />
* Programming Pearls<br />
* Release It</p>
<p>Eigentlich müsste man natürlich noch The Art of Computer Programming aufführen, allerdings kenne ich nur einen der das Buch lesen und durcharbeiten kann. Die anderen Menschen, die ich kenne, sind nicht bereit dazu, sich mit der hohen Informationsdichte und Komplexität auseinander zu setzen.</p>
<p>Darüber hinaus könnte man noch ein paar hervorragende Programmiersprachen-spezifische Bücher aufführen, die sicherlich einen Platz in der Top 10 einnehmen könnten. Meine Liste der tollen Management-Bücher habe ich vor gut zwei Jahren vorgestellt: <a href="http://www.ghadir.de/blog/?p=11">Empfehlung zu Management-Büchern</a></p>
<p>Preisfrage: Welches der obigen Bücher sollte man mit ganz großer Vorsicht lesen und besser noch doppelt und dreifach darüber sinnieren?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=45</wfw:commentRss>
		</item>
		<item>
		<title>Die Architektur des Webs ist gescheitert</title>
		<link>http://www.ghadir.de/blog/?p=44</link>
		<comments>http://www.ghadir.de/blog/?p=44#comments</comments>
		<pubDate>Wed, 01 Apr 2009 19:01:40 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=44</guid>
		<description><![CDATA[Das Internet, das wir alle kennen und täglich nutzen, durchdringt nicht nur den Alltag immer stärker sondern findet durch eine Bewegung anerkannter IT-Experten immer größere Beachtung. Bis vor kurzem wurde stark bezweifelt, dass die für das Internet verwendeten Dienste und Anwendungen ausreichen könnten, um ernsthafte Geschäftsanwendungen zu realisieren. Selbstverständlich sah man lange Zeit in Amazon, [...]]]></description>
			<content:encoded><![CDATA[<p>Das Internet, das wir alle kennen und täglich nutzen, durchdringt nicht nur den Alltag immer stärker sondern findet durch eine Bewegung anerkannter IT-Experten immer größere Beachtung. Bis vor kurzem wurde stark bezweifelt, dass die für das Internet verwendeten Dienste und Anwendungen ausreichen könnten, um ernsthafte Geschäftsanwendungen zu realisieren. Selbstverständlich sah man lange Zeit in Amazon, Google und Co. die obligatorischen Ausnahmen, die für einige aus diesem Zweifel eine Regel machten.</p>
<p>Dank technisch versierter Experten wie Fielding, Tilkov oder Vinoski wird mittlerweile auch den Anhängern der klassischen Unternehmens-IT-Disziplinen klar, welche Vorzüge in dem Architektur-Stil des weltweiten Datennetzes (des World Wide Webs) stecken. Rhethorischen Fragen a la &#8220;Warum findet man mit einer Internet-Recherche mehr Informationen über einen bestehenden Vertrag mit einem Vertragspartner als in Eurer Bestandsführung?&#8221; treffen einen Nerv und decken architekturelle Schwächen gängiger Unternehmensanwendungen auf.</p>
<p>Dennoch: Gerade in einer Zeit, die das Zusammenbrechen technischer Barrieren verspricht, gefährdet eine aktuelle Entdeckung den Fortbestand des Internets, wie wir es kennen. Die IP-Adressen - sozusagen die Telefonnummern des Internets - sind aus. </p>
<p>Ohne eine flächendeckende Umstellung auf das neue Protokoll IPv6 wird das Internet nicht mehr lang funktionieren. Der selbst ernannte IT-Experte und System-Analytiker, Max Mustermann, prognostiziert einen Zusammenbruch innerhalb der nächsten 2 hoch 128 Tage. Es bleibt also weniger Zeit als gedacht.</p>
<p>Darüber hinaus führt eine kürzlich entdeckte Lücke in der Spezifikation des Internets (nachzulesen unter <a href="http://ietf.org">ietf.org</a>) in letzter Konsequenz dazu, dass jeder Nutzer eines herkömmlichen Web-Browsers sich angreifbar macht und was noch schlimmer ist, selbst unbeabsichtigt zu einem Angreifer für Internet-Angebote werden kann. Die Angriffsform ist auf Neu-Deutsch unter dem Akronym CSRF (wie sea-surf) bekannt. ZDNet sagt dazu unter Anderem:</p>
<blockquote><p>
	In either case, the browser executes a malicious transaction such as a wire transfer to the cybercrook&#8217;s bank.
</p></blockquote>
<p>Frei übersetzt bedeutet dies: Man kann hier von einem immer schnelleren Verbrauch der jetzt schon kaum mehr verfügbaren IP-Adressen ausgehen. Schuld daran ist die Architektur des Webs - genannt REpresentational State Transfer - oder kurz: REST.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=44</wfw:commentRss>
		</item>
		<item>
		<title>Wenn ich dort wäre&#8230;</title>
		<link>http://www.ghadir.de/blog/?p=43</link>
		<comments>http://www.ghadir.de/blog/?p=43#comments</comments>
		<pubDate>Sat, 14 Feb 2009 12:16:56 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=43</guid>
		<description><![CDATA[&#8230; dann wäre ich wohl ein 3D-Avatar.

Denn dieses Bild wurde mit Terragen gerendert.
]]></description>
			<content:encoded><![CDATA[<p>&#8230; dann wäre ich wohl ein 3D-Avatar.</p>
<p><img src="http://ghadir.de/blog/wp-content/20090211_landscape.png" alt="Seen-Landschaft, umgeben von Bergen"/></p>
<p>Denn dieses Bild wurde mit <a href="http://www.planetside.co.uk/terragen/">Terragen</a> gerendert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=43</wfw:commentRss>
		</item>
		<item>
		<title>Informationsdichte in Texten</title>
		<link>http://www.ghadir.de/blog/?p=42</link>
		<comments>http://www.ghadir.de/blog/?p=42#comments</comments>
		<pubDate>Sat, 31 Jan 2009 21:50:29 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=42</guid>
		<description><![CDATA[Da habe ich am Mittwoch auf der OOP-Konferenz Tom DeMarco gehört. Er hat allen Ernstes gesagt, dass er die Texte eines Kollegen dadurch verbessert, indem er sinnlose Füllsätze einfügt. Dessen Texte seien sonst immer so dicht mit Informationen gepackt, dass man beim Lesen zu viele davon überliest. Durch die Füllsätze bekomme das Gehirn Zeit, alle [...]]]></description>
			<content:encoded><![CDATA[<p>Da habe ich am Mittwoch auf der OOP-Konferenz Tom DeMarco gehört. Er hat allen Ernstes gesagt, dass er die Texte eines Kollegen dadurch verbessert, indem er sinnlose Füllsätze einfügt. Dessen Texte seien sonst immer so dicht mit Informationen gepackt, dass man beim Lesen zu viele davon überliest. Durch die Füllsätze bekomme das Gehirn Zeit, alle Informationen zu verdauen.</p>
<p><img style="float: left; margin: 5px;" width="105" height="150" src="http://bilder.buecher.de/produkte/14/14726/14726645n.jpg" alt="Das Prinzip der Pyramide"/>Meiner Ansicht nach sollte man auf Füllsätze verzichten und Informationen kurz und präzise darstellen. Die Form eines Textes so anzupassen, dass auch einem unaufmerksamen Leser darin enthaltene Kernpunkte auffallen, sollte meiner Meinung nach durch sinnvolle Übergänge und Erläuterungen erfolgen. Sinnlose Füllsätze haben da nichts zu suchen. Frau Minto beschreibt in ihrem Buch <a href="http://www.amazon.de/Das-Prinzip-Pyramide-verst%C3%A4ndlich-kommunizieren/dp/3827371899/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1233441946&#038;sr=8-1">Das Prinzip der Pyramide</a>, wie man seine Informationen klar strukturieren kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=42</wfw:commentRss>
		</item>
		<item>
		<title>Projektrisiko: Google Driven Software-Architecture</title>
		<link>http://www.ghadir.de/blog/?p=41</link>
		<comments>http://www.ghadir.de/blog/?p=41#comments</comments>
		<pubDate>Sat, 20 Dec 2008 16:28:36 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=41</guid>
		<description><![CDATA[Es ist allgemein bekannt, dass das Not-Invented-Here-Syndrom (NIH) zu einem Projektrisiko werden kann. NIH veranlasst Menschen dazu, anstatt bestehende Lösungen zu verwenden lieber alles selbst zu realisieren. 
In Projekten ohne jede Restriktion gibt es allerdings ein anderes Risiko, dass ich Google Driven Software-Architecture nennen will. Im Gegensatz zu NIH stellt man sich gern auf die [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist allgemein bekannt, dass das <a href="http://de.wikipedia.org/wiki/Not-Invented-Here-Syndrom">Not-Invented-Here-Syndrom (NIH)</a> zu einem Projektrisiko werden kann. NIH veranlasst Menschen dazu, anstatt bestehende Lösungen zu verwenden lieber alles selbst zu realisieren. </p>
<p>In Projekten ohne jede Restriktion gibt es allerdings ein anderes Risiko, dass ich Google Driven Software-Architecture nennen will. Im Gegensatz zu NIH stellt man sich gern auf die Schulter von Giganten. (Auch wenn viele Dinge im Internet eher den Nutzen von Teppichkanten anstatt von Giganten bringen&#8230;)</p>
<p>Als Google Driven Software-Architecture bezeichne ich das Bestreben, bereits existierende Problemlösungen (in Form von Werkzeugen, Plattformen, Bibliotheken oder Frameworks) für die eigenen Zwecke einzusetzen, ohne allerdings das Kosten/Nutzen-Verhältnis genügend zu bewerten. </p>
<p>Anstatt also zuerst in einer isolierten Umgebung zu experimentieren, um zu lernen, wie Pragmatik und Philosophie der potenziellen Teillösung wirklich sind und welche Abhängigkeiten und Konsequenzen sich durch einen Einsatz ergeben, wird es erst einmal eingesetzt. (Klingt recht <span style="text-decoration: line-through; ">willkürlich</span> agil&#8230;)</p>
<p>Neben Fragen zu juristischen Konsequenzen (falls eingesetzte Teillösungen nicht richtig lizensiert sind) handelt man sich damit schneller einen Zoo von Abhängigkeiten ein, als einem lieb sein kann. Mit Google Driven Software-Architecture richtig eingesetzt kann man sich kontinuierlich mit dem Lernen neuer Probleme und dem Finden entsprechender Lösungen beschäftigen, die alle nichts mit der Erreichung des Projektziels zu tun haben.</p>
<p>Mein Plädoyer lautet daher genau zu prüfen, welche Konsequenzen sich aus dem Einsatz von vermeintlichen Lösungen ergeben und dies für den eigenen Kontext zu bewerten. Der Verzicht auf den Einsatz von vermeintlichen Lösungen ist manchmal sinnvoll.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=41</wfw:commentRss>
		</item>
		<item>
		<title>Der Von-Neumann-Flaschenhals und das Test-Orakel</title>
		<link>http://www.ghadir.de/blog/?p=40</link>
		<comments>http://www.ghadir.de/blog/?p=40#comments</comments>
		<pubDate>Tue, 15 Apr 2008 22:18:12 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=40</guid>
		<description><![CDATA[Ist es nicht bemerkenswert, wie sich manche Dinge materialisieren, obwohl sie nur eigentlich nur konzeptionell existieren? - Zwei kleine Beispiele sollen dies veranschaulichen &#8230;

Obwohl die Von-Neumann-Rechnerarchitektur aus Steuerwerk, Rechenwerk, Hauptspeicher für Programm-Code und Daten sowie einem Bus und I/O-Einheit besteht, kursierte vor Jahren an meiner Hochschule das Gerücht, dass es eine weitere Kernkomponente zu dieser [...]]]></description>
			<content:encoded><![CDATA[<p>Ist es nicht bemerkenswert, wie sich manche Dinge materialisieren, obwohl sie nur eigentlich nur konzeptionell existieren? - Zwei kleine Beispiele sollen dies veranschaulichen &#8230;</p>
<blockquote><p>
Obwohl die <a href="http://de.wikipedia.org/wiki/Von_neumann_rechnermodell">Von-Neumann-Rechnerarchitektur</a> aus Steuerwerk, Rechenwerk, Hauptspeicher für Programm-Code und Daten sowie einem Bus und I/O-Einheit besteht, kursierte vor Jahren an meiner Hochschule das Gerücht, dass es eine weitere Kernkomponente zu dieser Architektur gibt: den Von-Neumann-Flaschenhals. </p>
<p>Der Von-Neumann-Flaschenhals muss ein fieses kleines Bauteil der Rechnerarchitekturen gewesen sein, der einen wesentlichen Teil des Optimierungspotenzials der Rechnerarchitektur zentralisierte. </p>
<p>In ähnlicher Weise materialisierte sich ein weiteres (eher konzeptionelles) Element: Bei einigen Studenten der <a href="http://www.fh-dortmund.de">FH-Do</a> hat sich herumgesprochen, dass es eine generische Software-Komponente gibt: das Test-Orakel. </p>
<p>Dieser idealer Weise zu kaufende Baustein einer jeden automatisierten Software-Testumgebung löst alle Probleme des täglichen Lebens. Wir haben schon in dem Film Matrix gesehen, dass Orakel nicht nur dazu geeignet sind, die aktuelle Funktionsweise eines Software-Teils zu erkennen, sondern auch wage Andeutungen über dessen Potenzial anzubieten.
</p></blockquote>
<p>Diesen eher komischen Anekdoten kann man etwas Ernstes entnehmen: Hören-Sagen tradiert auch heute Wissen und Erfahrung. Die meisten lassen sich allerdings viel zu häufig in relevanten Teilen von unqualifizierten Informationen leiten. Wie viele bezeichnen sich als Experten für ein beliebiges X und kennen nicht einmal jemanden, der die Spezifikation von X gelesen hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=40</wfw:commentRss>
		</item>
		<item>
		<title>Kinder, nehmt Euch in Acht!</title>
		<link>http://www.ghadir.de/blog/?p=39</link>
		<comments>http://www.ghadir.de/blog/?p=39#comments</comments>
		<pubDate>Tue, 18 Dec 2007 01:29:05 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=39</guid>
		<description><![CDATA[Es scheint Euch an den Kragen zu gehen, Ihr kleinen, süßen Racker. Fight for Kisses kündet vom Zweikampf der Generationen um die Gunst unserer Frauen und Mütter. Herr der Ringe, Rocky, Matrix, Mortal Kombat und Karate Tiger treffen Ödipus&#8230;

Eine wirklich gelungene Werbung &#8230;
]]></description>
			<content:encoded><![CDATA[<p>Es scheint Euch an den Kragen zu gehen, Ihr kleinen, süßen Racker. <a href="http://www.ffk-wilkinson.com">Fight for Kisses</a> kündet vom Zweikampf der Generationen um die Gunst unserer Frauen und Mütter. Herr der Ringe, Rocky, Matrix, Mortal Kombat und Karate Tiger treffen Ödipus&#8230;</p>
<p><a href="http://www.ffk-wilkinson.com"><img src="http://rdcal.blogsome.com/wp-admin/images/thumb-ffc_wilkinson.jpg"/></a></p>
<p>Eine wirklich gelungene Werbung &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=39</wfw:commentRss>
		</item>
		<item>
		<title>Mit Geronimo herumgespielt (Teil 1)</title>
		<link>http://www.ghadir.de/blog/?p=38</link>
		<comments>http://www.ghadir.de/blog/?p=38#comments</comments>
		<pubDate>Sun, 09 Dec 2007 00:01:49 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=38</guid>
		<description><![CDATA[Da ist gerade Ruby on Rails Version 2.0 freigegeben und ich schreibe etwas über Java EE, obwohl ich mich schon darauf freue, die Rails-Unterstützung des iPhones auszuprobieren&#8230;.

	Die verwendeten Java EE Spezifikationen:

Java Servlet-API 2.5
EJB 3 &#38; Java Persistence API
&#8230;
 weitere siehe Java EE Technologie Überblick

	Eigene EJB Artikel &#38; Vorträge:

EJB 3 - Die (R)Evolution
Java Persistence Architecture
JPA-Vortrag beim [...]]]></description>
			<content:encoded><![CDATA[<p>Da ist gerade <a href="http://rubyonrails.org">Ruby on Rails</a> Version 2.0 freigegeben und ich schreibe etwas über Java EE, obwohl ich mich schon darauf freue, die Rails-Unterstützung des iPhones auszuprobieren&#8230;.</p>
<div style="float: right; border: solid 1pt; margin: 3pt; padding: 3pt;">
<p>	Die verwendeten <a href="http://java.sun.com/javaee/technologies/">Java EE Spezifikationen</a>:</p>
<ul>
<li><a href="http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index.html">Java Servlet-API 2.5</a></li>
<li><a href="http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html">EJB 3 &amp; Java Persistence API</a></li>
<li>&#8230;</li>
<li> weitere siehe <br/><a href="http://java.sun.com/javaee/technologies/">Java EE Technologie Überblick</a></li>
</ul>
<p>	Eigene EJB Artikel &amp; Vorträge:</p>
<ul>
<li><a href="http://www.sigs-datacom.de/sd/publications/pub_article_show.htm?&#038;AID=2004&#038;Table=sd_article">EJB 3 - Die (R)Evolution</a></li>
<li><a href="http://www.sigs-datacom.de/sd/publications/pub_article_show.htm?&#038;AID=2045&#038;Table=sd_article">Java Persistence Architecture</a></li>
<li><a href="http://jfs2007.de/abstracts.html#D1">JPA-Vortrag beim JFS 2007</a></li>
</ul>
</div>
<p>Ich habe in den vergangenen Jahren Erfahrungen mit verschiedenen Applikationsservern gesammelt. Um zu sehen, was der aktuelle <a href="http://geronimo.apache.org">Apache Geronimo</a> kann, habe ich mal ein wenig damit herum gespielt.</p>
<p>Meine Experimente unterteile ich in drei Teile:</p>
<ol>
<li>Ein Durchstich (erledigt)</li>
<li>Verwendung in der Entwicklung / Hot deployment und Entwicklung mit Exploded-Verzeichnissen (erledigt)</li>
<li>Austesten der Persistenz-Engine</li>
</ol>
<p>Eigentlich sollte sich noch ein vierter Teil anschließen: Last- und Dauerlasttests. Allerdings würde dieser Nutzungsszenarien und implementierte (Fach- bzw. Prozess-)Logik erfordern, um ein für meine typischen Szenarien aussagekräftiges Ergebnis zu liefern, da ich unterstelle, dass Geronimo grundsätzlich skalierbar und stabil ist.</p>
<h2>Der Durchstich</h2>
<p>Ich habe mit einem minimalen Durchstich begonnen. Dazu habe ich eine Reihe von Projekten in meiner Entwicklungsumgebung angelegt. Die Abhängigkeiten sind so in in der folgenden <a href="#projektstruktur">Abbildung</a> dargestellt.</p>
<p><a name="projektstruktur"> </a><br />
<img src="http://ghadir.de/blog/wp-content/projekte_f_partnerdurchstich.png" alt="Die Projektstruktur"/></p>
<p><span>Abbildung 1. Die Projektstruktur.</span></p>
<p>Weiter habe ich dann ein paar Klassen geschrieben, die für einen kleinen Durchstich nötig waren. Die <a href="#klassenübersicht">nächste Abbildung</a> zeigt die beteiligten Klassen.</p>
<p><a name="klassenübersicht"> </a><br />
<img src="http://ghadir.de/blog/wp-content/partner_durchstich_erforderliche_klassen.png" alt="Die Projektstruktur"/></p>
<p><span>Abbildung 2. Die Projektstruktur.</span></p>
<p>Die Entitäten werden zwar nur von der Management-Komponente bearbeitet allerdings als Transferobjekte auch an die Web-Schicht übergeben. In den folgenden Abschnitten stelle ich auszugsweise die Implementierungen vor. Dabei habe ich mich auf den Fall <em>Partner anlegen</a> beschränkt. Die Ausgabe der Antwortseiten mittels einfachen JSPs habe ich ausgelassen&#8230; </p>
<p>Folgende Auszüge von Java-Klassen erwarten Sie:</p>
<ul>
<li><a href="#partnerservlet">PartnerServlet</a></li>
<li><a href="#partnerservicelocal">PartnerServiceLocal</a></li>
<li><a href="#partnerservicebean">PartnerServiceBean</a></li>
<li><a href="#partner">Partner</a></li>
</ul>
<p>sowie die erforderlichen Konfigurationen:</p>
<ul>
<li><a href="#web.xml">web.xml</a></li>
<li><a href="#persistence.xml">persistence.xml</a></li>
</ul>
<h3>Die Web-Schicht</h3>
<p>Dank Java EE und insbesondere der Servlet-API 2.5 kann man EJBs in Servlets injizieren lassen. Einerseits spart man sich den Lookup und andererseits sind Home-Interfaces obsolet.<br />
Die Zeilen 3 und 4 in <a href="#partnerservlet">Listing 1</a> deklarieren ein Attribut, dass annotiert ist und die Client-Sicht (das Local-Interface) der gewünschten EJB injiziert bekommt. Zwar kann man auf die EJB nun direkt über das Attribut zugreifen, allerdings empfehle ich hier immer den Zugriff über einen Getter, da man auch nachträglich ohne viel Aufwand Anpassungen machen kann, wenn man beispielsweise das Servlet doch in einem Kontainer deployen muss, der nur Servlet-API 2.4 unterstützt und daher das Einweben von EJBs nicht funktioniert. Aus Darstellungsgründen habe ich den Getter hier weggelassen&#8230;</p>
<p><a name="partnerservlet"> </a></p>
<div>
<pre>
 1	public class PartnerServlet extends HttpServlet {
 2
 3	    @EJB( beanName = "ejb/PartnerService")
 4	    PartnerServiceLocal partnerService;
 5
 6	    protected void doGet(HttpServletRequest request,
 7	           HttpServletResponse response)
 8	           throws ServletException, IOException
 9	    {
10	        // ...
11	    }
12
13	    protected void doPost(HttpServletRequest request,
14	            HttpServletResponse response)
15	            throws ServletException, IOException
16	    {
17	        // ...
18
19	        partnerService.partnerAnlegen(
20	            createPartnerFor(
21	            request.getParameterMap()));
22	        response.sendRedirect( "/partner/" );
23	    }
24
25	    private Partner createPartnerFor(Map values) {
26	        //...
27	    }
28	}
</pre>
</div>
<p><span>Listing 1. PartnerServlet (mit eingewebter EJB)</span></p>
<p><a name="web.xml"></a></p>
<div>
<pre>
 1	&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 2	&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4	    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5	    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 6	    version="2.5"&gt;
 7
 8	  &lt;servlet&gt;
 9	    &lt;servlet-name&gt;partner&lt;/servlet-name&gt;
10	    &lt;servlet-class&gt;
11	      de.ghadir.partner.web.PartnerServlet
12	    &lt;/servlet-class&gt;
13	  &lt;/servlet&gt;
14
15	  &lt;servlet-mapping&gt;
16	    &lt;servlet-name&gt;partner&lt;/servlet-name&gt;
17	    &lt;url-pattern&gt;/&lt;/url-pattern&gt;
18	  &lt;/servlet-mapping&gt;
19
20	  &lt;ejb-local-ref&gt;
21	    &lt;ejb-ref-name&gt;ejb/PartnerService&lt;/ejb-ref-name&gt;
22	    &lt;ejb-link&gt;ejb/PartnerService&lt;/ejb-link&gt;
23	  &lt;/ejb-local-ref&gt;
24	&lt;/web-app&gt;
</pre>
</div>
<p><span>Listing 2. web.xml konfiguriert das PartnerServlet und die lokale Referenz auf PartnerService</span></p>
<h3>PartnerManagement - die Session-Komponente</h3>
<p>Die PartnerManagement-Komponente realisiert alle Anwendungsfälle im Zusammenhang mit der Entität Partner. Über eine Menge von Session-Beans können Bearbeitungs-Prozesse realisiert werden und verschiedenen Clients zur Verfügung gestellt werden. In dem Durchstich sind vorerst die einfachen Lebenszyklus-Methoden für zwei Entitäten realisiert. In <a href="#partnerservicelocal">Listing 3</a> und <a href="#partnerservicebean">Listing 4</a> wird stellvertretend der Fall <em>Partner anlegen</em> dargestellt. </p>
<p><a name="partnerservicelocal"> </a></p>
<div>
<pre>
1	@Local
2	public interface PartnerServiceLocal {
3
4	    void partnerAnlegen( Partner p );
5
6		// ...
7	}
</pre>
</div>
<p><span>Listing 3. Lokale Client-Sicht von PartnerService</span></p>
<p><a name="partnerservicebean"> </a></p>
<div>
<pre>
 1	@Stateless( name="ejb/PartnerService")
 2	public class PartnerServiceBean
 3	        implements PartnerServiceLocal
 4	{
 5
 6	    @PersistenceContext( name = "partnerPU" )
 7	    EntityManager em;
 8
 9	    public void partnerAnlegen( Partner p ) {
10	        em.persist( p );
11	    }
12
13		// ...
14	}
</pre>
</div>
<p><span>Listing 4. Bean-Implementierung von PartnerService</span></p>
<h3>Entitätskomponente Partner</h3>
<p><a name="partner"> </a></p>
<div>
<pre>
 1	@Entity
 2	public class Partner {
 3
 4	    @Id
 5	    @GeneratedValue
 6	    private long id;
 7
 8	    // ... Attribute etc. ...
 9
10		// ...
11	}
</pre>
</div>
<p><span>Listing 5. JPA-Entität Partner</span></p>
<p><a name="persistence.xml"> </a></p>
<div>
<pre>
 1  &lt;?xml version="1.0" encoding="UTF-8"?&gt;
 2  &lt;persistence
 3      xmlns="http://java.sun.com/xml/ns/persistence"&gt;
 4    &lt;persistence-unit name="partnerPU"&gt;
 5      &lt;description&gt; ... &lt;/description&gt;
 6      &lt;provider&gt;
 7        org.apache.openjpa.persistence.PersistenceProviderImpl
 8      &lt;/provider&gt;
 9      &lt;class&gt;de.ghadir.partner.entities.Partner&lt;/class&gt;
10  	    &lt;properties&gt;
11        &lt;property name="openjpa.ConnectionURL"
12          value="jdbc:derby:PartnerDB" /&gt;
13        &lt;property name="openjpa.ConnectionDriverName"
14          value="org.apache.derby.jdbc.EmbeddedDriver" /&gt;
15        &lt;property name="ConnectionUserName" value="app" /&gt;
16        &lt;property name="openjpa.jdbc.SynchronizeMappings"
17          value="false" /&gt;
18      &lt;/properties&gt;
19    &lt;/persistence-unit&gt;
20  &lt;/persistence&gt;
</pre>
</div>
<p><span>Listing 6. persistence.xml</span></p>
<h2>Hot-Deployment / Exploded</h2>
<p>Leider kann ich noch keine Aussage darüber treffen, wie Apache Geronimo mit großen Enterprise Anwendungen zurecht kommt. Aber für meine Experimente funktionierte das Hot-Deployment sehr gut.</p>
<table style="border: solid 1pt;" border="1">
<tr>
<td>Anpassung an Komponente</td>
<td>Hot-Deployment</td>
</tr>
<tr>
<td>Entitätskomponente Partner</td>
<td>als Teil der anderen Komponenten</td>
</tr>
<tr>
<td>EJB-JAR PartnerManagement</td>
<td>funktioniert</td>
</tr>
<tr>
<td>WebApp PartnerWeb</td>
<td>funktioniert</td>
</tr>
</table>
<p><span>Tabelle 1. Hot-Deployment und Exploded-Modus</span></p>
<h2>Fazit</h2>
<p>Die Entwicklung mit dem Geronimo Server funktioniert sehr gut. Der Entwicklungszyklus ist dank des Hot-Deployment kurz. Die Unterstützung der aktuellen Java EE Standards erleichtert die Entwicklung ungemein. Ich freue mich schon, die Persistenz-Engine in Bezug auf Beziehungen (einschließlich verschiedener Lade- und Speicherstrategien), Query-Hints, Aggregationen und Co. auszuprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=38</wfw:commentRss>
		</item>
		<item>
		<title>Präsentieren - Fakten oder Ideen vermitteln?</title>
		<link>http://www.ghadir.de/blog/?p=37</link>
		<comments>http://www.ghadir.de/blog/?p=37#comments</comments>
		<pubDate>Sat, 24 Nov 2007 11:05:24 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=37</guid>
		<description><![CDATA[Zu dem Beitrag Die zehn Teilbereiche der Software-Technik habe ich einige wertvolle Kommentare erhalten.



		Kristijan hat auf die Bedeutung des Humors hingewiesen.
	

		Sven T. hat in seinem Kommentar auf eine Übersicht über die Methoden der Didaktik der Uni-Köln verwiesen.
	

		Malte schreibt, dass PowerPoint eine große Hilfe sei. Insbesondere, wenn Folien vorab an die Zuhörer verteilt werden.
	

		Michael Mahlberg empfiehlt [...]]]></description>
			<content:encoded><![CDATA[<p>Zu dem Beitrag <a href="http://www.ghadir.de/blog/?p=27">Die zehn Teilbereiche der Software-Technik</a> habe ich einige wertvolle <a href="http://www.ghadir.de/blog/?p=27#comments">Kommentare</a> erhalten.</p>
<p><img src="http://ecx.images-amazon.com/images/I/41Y3EAGJE9L._AA240_.jpg" alt="Buch Made to Stick" style="float: right;" width="150"/></p>
<ul>
<li>
		Kristijan hat auf die Bedeutung des Humors hingewiesen.
	</li>
<li>
		Sven T. hat in seinem Kommentar auf eine <a href="http://www.uni-koeln.de/hf/konstrukt/didaktik/frameset_uebersicht.htm">Übersicht über die Methoden der Didaktik</a> der Uni-Köln verwiesen.
	</li>
<li>
		Malte schreibt, dass PowerPoint eine große Hilfe sei. Insbesondere, wenn Folien vorab an die Zuhörer verteilt werden.
	</li>
<li>
		<a href="http://shu-ha-ri.blogspot.com/">Michael Mahlberg</a> empfiehlt eine Methode namens SUCCESs (<a href="http://www.presentationzen.com/presentationzen/2007/07/make.html">Erläuterung bei Presentation Zen</a>), die <a href="http://www.ghadir.de/blog/?p=27#comment-195">mir sehr liegt</a>. Zusätzlich hat er das Buch <a href="http://www.amazon.de/Made-Stick-Ideas-Survive-Others/dp/1400064287">Made to Stick</a> empfohlen.
	</li>
</ul>
<p>Bei dem letzten Punkt möchte ich anknüpfen.<br />
Die Grundidee von SUCCESs ist einfach: Ideen müssen so aufbereitet werden, dass sie <em>merkwürdig</em> sind (den Ausdruck habe ich von Gedächtnistrainer <a href="http://www.teamgeisselhart.de/">Oliver Geisselhart</a>):</p>
<ul>
<li>Simple (einfach)
</li>
<li>Unexpected (unerwartet)
</li>
<li>Concrete (konkret)
</li>
<li>Credible (glaubwürdig)
</li>
<li>Emotional
</li>
<li>Stories (Geschichten [enthalten])
</li>
</ul>
<p><a href="http://norvig.com/Gettysburg/sld001.htm"><img src="http://norvig.com/Gettysburg/img001.gif" alt="Foliensatz zur Gettysburg-Rede" width="280" height="210" style="float: left; margin: 5pt"/></a> Abraham Lincoln hat in seiner <a href="http://showcase.netins.net/web/creative/lincoln/speeches/gettysburg.htm">Gettysburg Rede</a> (Englisch) der gefallen Soldaten gedacht. Es heißt, die Rede war eine der größten der amerikanischen Geschichte. <a href="http://norvig.com">Peter Norvig</a> hat die Fakten dieser Rede genommen und zeigt wie sie mit Hilfe von Powerpoint hätte aufgewertet werden können, wenn man im 19. Jahrhundert nur Powerpoint zur Verfügung gehabt hätte.</p>
<p>Vermutlich nehmen die Amerikaner in ihrer Schulzeit die Gettysburg Rede durch, wenn sie den Sezessionskrieg behandeln. Vermutlich hat die Präsentation deshalb auch <a href="http://norvig.com/Gettysburg/making.html">großen Anklang in der Presse</a> gefunden. </p>
<p>Ein fahler Beigeschmack bleibt aber schon: Viel zu viele von uns tendieren dazu, Ihre Präsentation eher am Stil der obigen Powerpoint-Präsentation auszurichten als an den großen Reden der Weltgeschichte. Um wieviel erfolgreicher könnten wir also sein, wenn unsere Zielgruppe aus lebenden, fühlenden und denkenden Menschen bestünde anstatt aus gleichgültigen, rein sachlich orientierten Organismen vom Planeten Vulkan? - Wir präsentieren doch sowieso meistens vor den Ersteren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=37</wfw:commentRss>
		</item>
		<item>
		<title>innoQ blitzt in Wesel</title>
		<link>http://www.ghadir.de/blog/?p=36</link>
		<comments>http://www.ghadir.de/blog/?p=36#comments</comments>
		<pubDate>Sun, 18 Nov 2007 17:59:03 +0000</pubDate>
		<dc:creator>Phillip Ghadir</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ghadir.de/blog/?p=36</guid>
		<description><![CDATA[innoQ veranstaltet regelmäßig Events, bei denen sich die gesamte Firma in Klausur begibt und sich dort austauscht. Bei diesem Event probierten wir erstmalig etwas aus, das sich Blitz-Präsentation nennt. In maximal 5 Minuten konnte jeder eine Idee präsentieren, die ihn in der letzten Zeit inspiriert hat. Die Themen reichten von der Analyse von IT-Trends über [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://innoq.com">innoQ</a> veranstaltet regelmäßig Events, bei denen sich die gesamte Firma in Klausur begibt und sich dort austauscht. Bei diesem Event probierten wir erstmalig etwas aus, das sich Blitz-Präsentation nennt. In maximal 5 Minuten konnte jeder eine Idee präsentieren, die ihn in der letzten Zeit inspiriert hat. Die Themen reichten von der Analyse von IT-Trends über die Seam Carving, einem Konzept der Bildskalierung bis hin zu Android, dem Google-Mobile-Betriebssystem oder auch die Buchvorstellung von Softskills für Software-Entwickler. Sehr heterogen und inspirierend. </p>
<p>Eine Bewertung verschiedener Ansätze für Modell-zu-Modell-Transformationen im Umfeld modellgetriebener Software-Entwicklung zeigte Möglichkeiten, Grundprobleme und vielleicht auch Grenzen deklarativer oder imperativer Beschreibung von Transformationen auf. Besonders interessant waren die Ausführungen zur Schneidung / Modularisierung von Querschnittsthemen in (UML-)Modellen. Das Ganze wurde mit der Vorstellung verschiedener Rahmenwerke für die Modell-zu-Modell-Transformation abgerundet.</p>
<p>Der Vortrag &#8220;Embedded JBoss&#8221; zeigte, wie man EJBs verwenden kann, ohne einen externen Applikationsserver einsetzen zu müssen. Embedded JBoss verzichtet auf Classloader-Hierarchien und erlaubt damit, &#8220;kleinere&#8221; Anwendungen direkt zu realisieren, die EJB-Funktionalität zu verwenden und dennoch auf die schwerfälligen Server zu verzichten. Gut einsetzbar für Modultests (Unit-Tests). Sehr nett fand ich das Konzept des Virtuellen Dateisystems, mit dem man in Java einfach ein &#8220;Dateisystem&#8221; erzeugen kann, in welches Dateien und Verzeichnisse gelegt werden können, die &#8220;irgendwo&#8221; (z.B. im Klassenpfad) existieren. </p>
<p>Alle Vorträge waren hochinteressant und wurden sogar noch durch die Präsentationen zweier externer Gäste bereichert:</p>
<ul>
<li>
Bei der Präsentation zum Thema Geschäftsregelmanagement wurde deutlich, dass es nicht nur vielzitierte Anforderungen zur Pflege und Dynamisierung von Geschäftsregeln sondern auch an die Testbarkeit und das Versions- und Konfigurations-Management von Regelsätzen gibt. Der Vortrag zeigte nicht nur Motivation und Problemstellung sondern beleuchtete Lösungsoptionen aus Sicht der Architektur, des Betriebs, der Entwicklung und des Fachbereichs.
</li>
<li>
Die Frage nach dem Sein und dem Schein wurde in einem Gastvortrag mit dem Titel &#8220;Semantik - Grenzen des maschinellen Verstehens&#8221; betrachtet. Der Vortrag führt verschiedene Begriffe aus der Philosophie und der Erkenntnistheorie ein, anhand derer ein Problem der Philosophie anschaulich wurde: das Fehlen einer formalen Sprache zur Spezifikation der Semantik.
</li>
</ul>
<p>Bei Events wie diesem Frage ich mich immer, warum die Zeit so schnell verfliegt?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghadir.de/blog/?feed=rss2&amp;p=36</wfw:commentRss>
		</item>
	</channel>
</rss>
