
<?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>pgt &#187; articles</title>
	<atom:link href="http://pgt.de/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://pgt.de</link>
	<description>t3chnology scouting GmbH</description>
	<lastBuildDate>Wed, 09 May 2012 11:54:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Article: Esper als EDA Plattfrom</title>
		<link>http://pgt.de/2008/04/17/article-esper-als-eda-plattfrom/</link>
		<comments>http://pgt.de/2008/04/17/article-esper-als-eda-plattfrom/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 08:14:21 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[cep]]></category>
		<category><![CDATA[eda]]></category>
		<category><![CDATA[esper]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=136</guid>
		<description><![CDATA[<p>I just received the PDF version of our EDA and Esper Article for the german magazine Java Magazin 5.2008.</p> <p>Esper als EDA-Plattform</p> <p>Ist Event-driven Architecture (EDA) gefangen im Gartner Hypecycle oder gelingt mit Esper der Durchbruch für echte Businessintegration mit EDA jenseits des Gipfels der inflationären Erwartungen?</p> <p>PDF: Esper als EDA-Plattform Christian Dedek Papick [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="/wp-content/uploads/2008/04/cover_orig47f09186b4ccf.jpg" alt="" width="200" height="283" />I just received the PDF version of our EDA and Esper Article for the german magazine <a href="http://it-republik.de/jaxenter/java-magazin-ausgaben/Model-Driven-Development-000247.html" target="_blank">Java Magazin 5.2008</a>.</p>
<blockquote><p><strong>Esper als EDA-Plattform</strong></p>
<p>Ist Event-driven Architecture (EDA) gefangen im Gartner Hypecycle oder gelingt mit Esper der Durchbruch für echte Businessintegration mit EDA jenseits des Gipfels der inflationären Erwartungen?</p>
<p>PDF:<br />
<a href="../wp-content/uploads/2008/04/taboada_eda.pdf">Esper als EDA-Plattform<br />
Christian Dedek<br />
Papick Garcia Taboada</a></p></blockquote>
<p><div style="padding: 50px 10px 50px 10px; text-align:center;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-8682101792434953";
/* blogposts */
google_ad_slot = "3634251742";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2008/04/17/article-esper-als-eda-plattfrom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EDA Artikel im Javamagazin</title>
		<link>http://pgt.de/2008/04/01/eda-artikel-im-javamagazin/</link>
		<comments>http://pgt.de/2008/04/01/eda-artikel-im-javamagazin/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 10:07:43 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[cep]]></category>
		<category><![CDATA[eda]]></category>
		<category><![CDATA[esper]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=181</guid>
		<description><![CDATA[<p>In der nächsten Ausgabe vom Javamagazin ist unser (Christian Dedek und ich) Artikel zu Esper mit EDA:</p> <p>Event Driven Architecture</p> <p>Ist EDA gefangen im Gartner Hypecycle oder gelingt mit Esper der Durchbruch für echte Businessintegration mit EDA jenseits des Gipfels der inflationären Erwartungen?</p> <p>EDA ist das Akronym für: Event Driven Architecture. Sehr oft werden [...]]]></description>
			<content:encoded><![CDATA[<p>In der nächsten Ausgabe vom Javamagazin ist unser (Christian Dedek und ich) Artikel zu Esper mit EDA:</p>
<blockquote><p><strong>Event Driven Architecture</strong></p>
<p>Ist EDA gefangen im Gartner Hypecycle oder gelingt mit Esper der Durchbruch für echte Businessintegration mit EDA jenseits des Gipfels der inflationären Erwartungen?</p></blockquote>
<p>EDA ist das Akronym für: Event Driven Architecture. Sehr oft werden EDA Architekturen auf Systeme reduziert, die lediglich asynchron Nachrichten austauschen (z.Bsp. JMS einsetzen). Unter EDA versteht man allerdings auch die Verarbeitung von Ereignisströmen und die Mustererkennung komplexer Zusammenhänge zwischen Ereignissen. Die Verarbeitung von Ereignisströmen ist unter dem Akronym ESP (Event Stream Processing) bekannt, während CEP (Complex Event Processing) für die Mustererkennung komplexer Zusammenhänge steht.</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2008/04/01/eda-artikel-im-javamagazin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make the Web a better place</title>
		<link>http://pgt.de/2008/03/26/make-the-web-a-better-place/</link>
		<comments>http://pgt.de/2008/03/26/make-the-web-a-better-place/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 10:09:57 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=183</guid>
		<description><![CDATA[<p></p> <p>Mit dem Google Web Toolkit (GWT) soll ein Java- Entwickler schnell in die Lage versetzt werden, JavaScript/Ajax-Anwendungen zu schreiben. Die Nachfrage ist groß, und immer mehr Projekte sollen mit JavaScript im Browser dem Trend des Web 2.0 folgen: von intelligenter Validierung über Drag-and-Drop bis hin zu Mashups mit Google Maps. Der Browser hat [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eclipse-magazin.de/"><img class="alignright" src="/wp-content/uploads/2008/03/gwt-make-the-web-a-better-place-pgtaboada.jpg" alt="GWT Artikel Bild" width="150" height="100" /></a></p>
<blockquote><p>Mit dem Google Web Toolkit (GWT) soll ein Java- Entwickler schnell in die Lage versetzt werden, JavaScript/Ajax-Anwendungen zu schreiben. Die Nachfrage ist groß, und immer mehr Projekte sollen mit JavaScript im Browser dem Trend des Web 2.0 folgen: von intelligenter Validierung über Drag-and-Drop bis hin zu Mashups mit Google Maps. Der Browser hat sich zur beliebtesten Anwendungsplattform entwickelt, die User Experience ist hier das Schlüsselwort.</p></blockquote>
<p>Seitdem das Google Web Toolkit [1] auf der JavaOne 2006 vorgestellt wurde, erfreut sich das Projekt immer größerer Beliebtheit. Was aber ist GWT? Kurz: eine Technologie bzw. ein Framework, mit dem JavaScript-Webanwendungen erstellt werden können. Das Besondere am GWT-Entwicklungsprozess ist nicht das Ergebnis, sondern die Vorgehensweise: Der Entwickler schreibt die gesamte Webanwendung in Java (kein HTML, kein JavaScript). Der Trick besteht darin, den Java-Quelltext nach JavaScript zu übersetzen, sodass die Vorgehensweise das Nutzen aller Fähigkeiten der IDE wie das Refactoring und Debuggen im clientseitigen Code ermöglicht. Das GWT Framework bietet ein grafisches UI-Komponentenmodell, ein Modularisierungskonzept, eine fragmentarische Java-Runtime-Emulation, ein API zur Manipulation der Browser-History, eine eigene RPC Implementierung, Internationalisierung und noch einiges mehr. Hier Googles Leitspruch für GWT:</p>
<blockquote><p>„GWT‘s mission is to radically improve the web experience for users by enabling developers to use existing Java tools to build no-compromise AJAX for any modern browser” [2].</p></blockquote>
<p>Frei übersetzt bedeutet das eine radikale Verbesserung bei der Verwendung von Webanwendungen (für den Endanwender). Bestehende Java-Werkzeuge sollen eingesetzt werden, um ohne Einschränkungen AJAX-Anwendungen auf beliebigen Browsern zu entwickeln.</p>
<p>Es ist schon beeindruckend, was sich hinter dieser neuen Technologie verbirgt. Aber es ist von Google … Schon seit einiger Zeit hat Google das Image des sauberen kleinen Start-ups verloren. Google ist groß, Ziele und Mittel teilweise umstritten. An dieser Stelle erst einmal eine Entwarnung – auch wenn Google drauf steht, ist kein Google drin. Durch die Verwendung von GWT werden keinerlei Dienste von Google (außer GWT selbst) verwendet. Google hat natürlich nichts dagegen, wenn sich immer mehr Produkte bei anderen Google-Technologien bedienen – zum Beispiel Google Search oder Google Maps. Wenn die Hemmschwelle hier bislang bei den nötigen JavaScript-Kenntnissen lag, so ist diese mit GWT letztendlich behoben worden. Auch für JSF gibt es bereits Komponenten, die das Verwenden von Google JavaScript APIs erleichtern:</p>
<blockquote><p>„Naturally, GWT is also a great way to easily take advantage of the latest and greatest Google APIs and browser enhancements, such as Google Gears” [3].</p></blockquote>
<p>GWT ist heute einsatzbereit: Es ist seit Version 1.3 unter der Apache License 2.0 veröffentlicht und seit Version 1.4 trägt GWT nicht mehr den Zusatz „Beta“ im Namen. Die aktuelle Versionsnummer lautet 1.4.61 und kann von der<br />
GWT-Homepage in Google-Code heruntergeladen werden. Das GWT-Team<br />
arbeitet gerade an der neuen Version 1.5. Wichtigste Neuerung, an der aktuell gearbeitet wird, ist die Unterstützung der bei Java 5.0 neu eingeführten Sprachelemente wie Annotations und Generics, denn aktuell wird lediglich der Sprachumfang von Java 1.4.2 unterstützt. Die unterstützten Browserplattformen des Projekts sind im Augenblick die aktuellen Versionen des Microsoft Internet Explorers, Firefox, Opera und Safari.</p>
<blockquote><p>Artikel weiterlesen:<br />
<a title="PDF: Make the Web a better place" href="/wp-content/uploads/2008/03/taboada_gwt.pdf" target="_blank">PDF: Make the Web a better place</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2008/03/26/make-the-web-a-better-place/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Magazin Titelthema: Eclipse &amp; Ajax</title>
		<link>http://pgt.de/2008/02/22/eclipse-magazin-titelthema-eclipse-ajax/</link>
		<comments>http://pgt.de/2008/02/22/eclipse-magazin-titelthema-eclipse-ajax/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 12:35:00 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://pgt.de/?p=248</guid>
		<description><![CDATA[<p>In der Ausgabe Vol. 14 2.08 wurde als Titelthema “Rich Internet Applications” gesetzt. Ich habe den Artikel zu GWT beigesteuert: “Make the Web a Better Place” &#8211; gestern habe ich meinen Belegexemplar bekommen. Als Brasilianer habe ich mich besonders über das Bild auf der ersten Seite gefreut!</p> <p>In meinem Artikel habe ich GWT als [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="/wp-content/uploads/2008/02/eclipse-magazin.gif" alt="" width="200" height="283" />In der Ausgabe Vol. 14 2.08 wurde als Titelthema “Rich Internet Applications” gesetzt. Ich habe den Artikel zu GWT beigesteuert: “Make the Web a Better Place” &#8211; gestern habe ich meinen Belegexemplar bekommen. Als Brasilianer habe ich mich besonders über das Bild auf der ersten Seite gefreut!</p>
<p>In meinem Artikel habe ich GWT als Technologie und als Framework kurz vorgestellt. Einfache Beispiele sollen den Einstieg erleichtern:</p>
<blockquote><p><strong>Google Web Toolkit: Webanwendungen mit GWT entwickeln<br />
</strong><br />
Mit dem Google Web Toolkit (GWT) soll ein Java- Entwickler schnell in die Lage versetzt werden, JavaScript/Ajax-Anwendungen zu schreiben. Die Nachfrage ist groß und immer mehr Projekte sollen mit JavaScript im Browser dem Trend des Web 2.0 folgen: von intelligenter Validierung über Drag-and-Drop bis hin zu Mashups mit Google Maps. Der Browser hat sich zur beliebtesten Anwendungsplattform entwickelt, die User Experience ist hier das Schlüsselwort.</p></blockquote>
<p>Leider wurde Zoltan Horvath in meinem Artikel nicht erwähnt: er hat für mich die Box zu MyGWT geschrieben.</p>
<p>Wir haben beide diese Bibliothek kürzlich in einem Projekt bei <a href="http://www.oio.de/" target="_blank">OIO</a> eingesetzt. An dieser Stelle nochmal ein “Danke” für die Box und fürs Korrekturlesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2008/02/22/eclipse-magazin-titelthema-eclipse-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Antidoto: Spring 2.0, Maven 2.0 and modularization</title>
		<link>http://pgt.de/2007/04/30/antidoto-spring-20-maven-20-and-modularization/</link>
		<comments>http://pgt.de/2007/04/30/antidoto-spring-20-maven-20-and-modularization/#comments</comments>
		<pubDate>Sun, 29 Apr 2007 22:27:48 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Java & Co.]]></category>

		<guid isPermaLink="false">http://pgt.de/wordpress/?p=7</guid>
		<description><![CDATA[Antidoto &#8211; the beginning Interesting ways&#8230; <p>In the last months I participated in projects using spring and maven2 to build coarse grained software modules.</p> <p>While splitting a project in smaller pieces is not really a new concept &#8211; and with maven it is even easy to accomplish &#8211; it still is a major problem [...]]]></description>
			<content:encoded><![CDATA[<h2>Antidoto &#8211; the beginning</h2>
<h3>Interesting ways&#8230;</h3>
<p>In the last months I participated in projects using spring and maven2 to build coarse grained software modules.</p>
<p>While splitting a project in smaller pieces is not really a new concept &#8211; and with maven it is even easy to accomplish &#8211; it still is a major problem to integrate those parts together again.</p>
<p><img src="http://pgt.de/wp-content/uploads/2007/04/20061109-1516-20.jpg" title="W-JAX 2006" alt="W-JAX 2006" align="right" /> In my session at the W-JAX 2006 conference I spoke about the lack of architectural guidance when building software based on coarse grained pieces. With the upcoming session at the Spring Day in Germany, I decided to opensource the actual codebase.</p>
<ul>
<li><strong> 	Why &#8220;antidoto&#8221;?</strong></li>
</ul>
<p>Antídoto is the portuguese word for antidote. An antidote is a substance which can counteract a form of poisoning. <a href="http://antidoto.sf.net" target="_blank"><strong>Antidoto</strong></a> is a java technology mashup providing building blocks for modular architectures. Modern java technologies are component based, but lack modularization capabilities. Here is where the poisoning is happening and where <strong>Antidoto</strong> jumps in.</p>
<ul>
<li><strong> 	Why &#8220;interesting ways&#8221;?</strong></li>
</ul>
<p>Because thats what people say when they see it. &#8220;Thats interesting&#8221;. Thought it would be fair to call them this way&#8230; ;-)</p>
<ul>
<li><strong> 	Why &#8220;the beginning&#8221;?</strong></li>
</ul>
<p>Because it was the beginning of Antidoto. The feedback from colleagues, customers and listeners at the W-JAX conference encouraged me to go ahead and create my first open source project</p>
<p><span id="more-7"></span></p>
<h1> <strong>Form over substance</strong></h1>
<p>The earth is populated with shallow and ignorant people. That&#8217;s why form will always be more important than substance. You can waste your time complaining about how that should not be the case in a perfect world, or you can snap out of it an follow my advice.</p>
<h2><strong>Documents</strong></h2>
<p>If a document is over two pages long, few people will ever read it. And those who do read it won&#8217;t remember it in twenty-four hours. That&#8217;s why all your documents should be over two pages long. You don&#8217;t want your readers to be influenced by a bunch of facts. You want them to look at your creative use of fonts, your brilliant application of white space, and you inspired graphics. Good formatting leaves the reader with the clear impression that you are a genius and therefore whatever you&#8217;re writing about must be a good idea.</p>
<blockquote><p> 	<strong> 	The Dilbert Principle,</strong><br />
Machiavelllian Methods</p>
<p>Scott Adams</p></blockquote>
<p align="center"><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/dilbert2052348060725.gif" title="Dilbert" alt="Dilbert" /></p>
<h2>Goals and background</h2>
<p>The goal of this series of articles is to provide an overall architectural guideline for Java (TM) based enterprise software development. Each software project has its own special requirements which must be analyzed by themselves, but many software projects have common requirements:</p>
<h3>Reusability of Software Components</h3>
<p>The modern development today imposes that software products should not be a monolithic piece of software. Therefore the system should be divided and developed in subsystems. In an assembly process, the deployment artifacts will be generated out of dependent subsystems.</p>
<h3>Increased Software Quality</h3>
<p>Software quality factors are non functional requirements, among them</p>
<ul>
<li> Testability</li>
<li>Security</li>
<li>Reliability</li>
<li>Maintainability</li>
<li>Understandability</li>
<li>Performance and Scalability</li>
</ul>
<p>The new architecture should allow to scale the deployed system to achieve the needed performance, without having to rewrite code, transparently to both the developer and the users.</p>
<h3>Multiple teams and offshoring</h3>
<p>Many projects have a very short development time, so work is accomplished by many teams, on site, off site and off shore. Teams must be able to work together on the same project with minimal impact on efficiency.</p>
<h2> Architectural principles applied</h2>
<p>This architectural guideline is based on common architectural principles.</p>
<h3> Layering</h3>
<h4> Presentation Layer</h4>
<p>The front end consists of one or more web applications, rich clients, integration layer consumers. This layer should only provide view logic (presentation, internationalization, navigation) and no business specific logic.</p>
<p>Any client specific state will be stored in components in this layer.</p>
<h4>Business Layer</h4>
<p>The business layer provides the business logic used by the presentation layer.</p>
<h4>Integration Layer</h4>
<p>The integration layer provides access to the required resources, among them legacy Corba applications and different relational database resources.</p>
<h3>Service Orientation</h3>
<p><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/subsystem-soa.jpg" title="Simple SOA" alt="Simple SOA" align="right" />In short, Service-Oriented Architecture describes a perspective of software architecture that defines the use of services to support the requirements. In this special case, some of the subsystems to be defined may expose such remote services to the overall system.</p>
<p>As the system becomes implemented and the number of point to point connection increases, the usage of a enterprise service bus might be evaluated.</p>
<h3> Modularization</h3>
<p>One of the major goals of modularization is to divide complex monolithic systems in less complex smaller modules.<br />
A modular design is characterized by</p>
<ul>
<li>Functional partitioning into discrete scalable, reusable modules consisting of isolated, self-contained functional elements</li>
<li>Rigorous use of well defined modular interfaces, including object-oriented descriptions of module functionality</li>
<li>Ease of change to achieve technology transparency and, to the extent possible, make use of industry standards for key interfaces.</li>
</ul>
<p>Decomposed modules were renamed to subsystems in this architectural guideline.</p>
<p>A subsystem must have a system wide unique identifying name.  Addressing subsystems is explained in detail later.</p>
<h3>Subsystem encapsulation</h3>
<p>Each subsystem should hide its internal implementation from external components in the system. The architecture can enforce encapsulation by name conventions  (using standard Java packages) and AOP techniques (declaring compilation errors).</p>
<p>Each subsystem “owns? one package name, preferably similar to the groupdId and artifacId names – subsystem these identifiers are explained later. The architectural prototype uses exactly the groupId and artifactId to define the package names.</p>
<p>Unfortunately the Java package encapsulation does not know hierarchical encapsulation. The usage of more than one package name for one subsystem leads to public internal interfaces. In this case the developer should know that public interfaces in hierarchical sub-packages must not used from external subsystems, they are for internal use only.</p>
<p>This is the main reason why a naming convention for subsystem package names should be defined and known by every developer in the development teams.</p>
<h2>Naming the pieces</h2>
<p>Very important in an architecture guideline is to define and document the constituting pieces of the software.</p>
<p>It is of central importance for everybody in the development teams to know how to name the composing parts, and to understand the boundaries and size of modules, subsystems, systems and components &#8211; if these are the names used in the architectural definitions.</p>
<p>For this series of articles I have given the software product and the composing parts the following names:</p>
<ul>
<li>System</li>
<li>Subsystem</li>
<li>Module</li>
<li>Components</li>
</ul>
<p align="center">  <img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/web1-names.jpg" alt="Naming the pieces" /></p>
<h2>Putting pieces together</h2>
<p>Decomposing a software in smaller pieces is not new to the software industry.</p>
<p>Divide and conquer has been the slogan for years. The problem is, once you got the pieces, you have to put them together to work as one again.  This is where the technologies, as we know them today, fail.</p>
<p>Composing a system out of decomposed subsystems means you have to know subsystem dependencies:</p>
<ul>
<li>compile time dependencies</li>
<li>runtime dependencies</li>
</ul>
<p align="center"><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/runtime-compiletime-deps.jpg" alt="Runtime vs. compile time dependencies" /></p>
<p>The compile time dependencies arise as long as we have subsystems interacting with other subsystems. Since this is a very common situation, we will have many compile time depencies.</p>
<p>The runtime dependencies arise as we develop against interfaces. Our software components will not instantiate the needed classes by themselves (see dependency injection, inversion of control). There will be a factory responsible for wiring up component beans and their dependencies. The dependencies described here are runtime dependencies.</p>
<h2>Solving the jigsaw puzzle</h2>
<p><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/wood-animal-elephant.thumbnail.jpg" title="Jigsaw puzzle" alt="Jigsaw puzzle" align="left" /> <strong>Jigsaw puzzle:</strong> puzzle consisting of differently shaped pieces which fit together  to form a picture</p>
<p>Here comes a small example, just to emphasize how complicated things can get when you start developing subsystems and managing their dependencies. We will develop two systems (A &amp; B):</p>
<ul>
<li>WebApp A</li>
</ul>
<blockquote>
<ul>
<li>JSF/ Facelets UI</li>
<li>Business logik bl1 and bl2</li>
<li>Persistence db1 and db2</li>
</ul>
</blockquote>
<ul>
<li>Rich client B</li>
</ul>
<blockquote>
<ul>
<li>RCP client</li>
<li>Business logic bl2 and bl3</li>
<li>Persistence db2 and db3</li>
</ul>
</blockquote>
<p>The next picture is showing the dependencies between the subsystems and the spring libraries, but the dependencies to all other libraries are still missing.</p>
<p align="center"><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/jigsaw.jpg" alt="Chaos" /></p>
<p>The point here is: it is almost impossible to manage all the dependencies here by hand. Imagine if each subsystem in the picture becomes replaced by at least two modules, one for the interfaces and another for the implementation.</p>
<p>There are different approaches to manage dependencies, among them are the OSGi frameworks providing plugin architectures.</p>
<p>The prototype developed along with this architecture guideline does not use an OSGi framework.</p>
<ul>
<li>To manage the compile time dependencies, it uses maven2.</li>
<li>To manage the runtime dependencies, it uses the bean factories from the spring framework.</li>
</ul>
<p>To get along with this jigsaw we need an integration server and automatic builds and testing. This is not new to modern and agile Java development. This is called continuous integration.</p>
<h2>Grouping subsystems</h2>
<p>There are different categories of subsystems. In a very simple approach, we will at least find subsystems containing&#8230;</p>
<ul>
<li>the technical infrastructure</li>
<li>the business logic</li>
<li>the persistence logic</li>
<li>the presentation clients</li>
</ul>
<p>Thank you for reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2007/04/30/antidoto-spring-20-maven-20-and-modularization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seam Artikel im Javamagazin</title>
		<link>http://pgt.de/2006/09/03/seam-artikel-im-javamagazin/</link>
		<comments>http://pgt.de/2006/09/03/seam-artikel-im-javamagazin/#comments</comments>
		<pubDate>Sun, 03 Sep 2006 21:54:14 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Java & Co.]]></category>

		<guid isPermaLink="false">http://pgt.de/wordpress/?p=3</guid>
		<description><![CDATA[<p>JBoss Seam ist ein mächtiges neues Framework, um moderne Web 2.0-Anwendungen zu bauen. Seam behauptet, aus den einzelnen Flicken SOA-Technologien, AJAX, JSF, EJB 3, Java-Portlets, Business Process Management und (BPM) Workflow einen perfekt vernähten Patchwork-Teppich zu machen. Inwieweit das der Realität nahe kommt, erfahren Sie in den folgenden Artikeln:</p> JBoss Seam, Teil 1: Seam [...]]]></description>
			<content:encoded><![CDATA[<p>JBoss Seam ist ein mächtiges neues Framework, um moderne Web 2.0-Anwendungen zu bauen. Seam behauptet, aus den einzelnen Flicken SOA-Technologien, AJAX, JSF, EJB 3, Java-Portlets, Business Process Management und (BPM) Workflow einen perfekt vernähten Patchwork-Teppich zu machen. Inwieweit das der Realität nahe kommt, erfahren Sie in den folgenden Artikeln:</p>
<ul>
<li><a href="http://pgt.de/wordpress/wp-content/uploads/2007/04/jm-1006_monitor_30-34.pdf" title="JBoss Seam, Teil 1: Seam – oder wie nähe ich ein Java EE Patchwork">JBoss Seam, Teil 1: Seam – oder wie nähe ich ein Java EE Patchwork</a></li>
<li><a href="http://pgt.de/wordpress/wp-content/uploads/2007/04/jm-1106_monitor_21-27.pdf" title="JBoss Seam, Teil 2: Java EE Patchwork-Framework im Einsatz">JBoss Seam, Teil 2: Java EE Patchwork-Framework im Einsatz</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2006/09/03/seam-artikel-im-javamagazin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reiche Ernte</title>
		<link>http://pgt.de/2006/07/06/reiche-ernte/</link>
		<comments>http://pgt.de/2006/07/06/reiche-ernte/#comments</comments>
		<pubDate>Thu, 06 Jul 2006 19:23:28 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Java & Co.]]></category>

		<guid isPermaLink="false">http://pgt.de/wordpress/?p=23</guid>
		<description><![CDATA[<p>Mit der IDE for Laszlo haben IBM und Laszlo Systems eine Entwicklungsumgebung für die Entwicklungvon OpenLaszlo-Anwendungen bereitgestellt. Diese basiert auf Eclipse und der Web Tools Platformund ist sogar seit neuestem als Eclipse Technology Project angenommen worden. Die IDE for Laszlo stelltalle notwendigen Werkzeuge zur Verfügung, um bequem eine OpenLaszlo-Anwendung zu entwickeln.</p> <p>pdf: Eclipse Magazin [...]]]></description>
			<content:encoded><![CDATA[<p>Mit der IDE for Laszlo haben IBM und Laszlo Systems eine Entwicklungsumgebung für die Entwicklungvon OpenLaszlo-Anwendungen bereitgestellt. Diese basiert auf Eclipse und der Web Tools Platformund ist sogar seit neuestem als Eclipse Technology Project angenommen worden. Die IDE for Laszlo stelltalle notwendigen Werkzeuge zur Verfügung, um bequem eine OpenLaszlo-Anwendung zu entwickeln.</p>
<p>pdf: <a href="http://pgt.de/wordpress/wp-content/uploads/2007/04/88-91-aus-em-vol-6-monitor.pdf" title="Eclipse Magazin Artikel - Reiche Ernte">Eclipse Magazin Artikel &#8211; Reiche Ernte</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2006/07/06/reiche-ernte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von Sackgassen und Neubaustrassen</title>
		<link>http://pgt.de/2006/06/10/von-sackgassen-und-neubaustrassen/</link>
		<comments>http://pgt.de/2006/06/10/von-sackgassen-und-neubaustrassen/#comments</comments>
		<pubDate>Sat, 10 Jun 2006 06:04:59 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Java & Co.]]></category>

		<guid isPermaLink="false">http://pgt.de/wordpress/?p=20</guid>
		<description><![CDATA[<p>JavaServer Faces (JSF) ist eine relativ junge Spezifikation von Sun für die Entwicklung von grafischen Oberflächen für serverseitige Anwendungen. Als einfaches „User Interface Framework“ geboren, wurde JSF von der Java Community gleich zum Web-Application-Framework (WAF) geschlagen: viele Artikel im Web beschreiben JavaServer Faces als ein Framework zum Erstellen von Webanwendungen. Im gleichen Atemzug wird [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/struts-vs-jsf.png" title="Struts vs. JSF" alt="Struts vs. JSF" align="right" />JavaServer Faces (JSF) ist eine relativ junge Spezifikation von Sun für die Entwicklung von grafischen Oberflächen für serverseitige Anwendungen. Als einfaches „User Interface Framework“ geboren, wurde JSF von der Java Community gleich zum Web-Application-Framework (WAF) geschlagen: viele Artikel im Web beschreiben JavaServer Faces als ein Framework zum Erstellen von Webanwendungen.<span>  </span>Im gleichen Atemzug wird JSF heute mit Struts genannt, mal als Ergänzung, mal als überlegene Technologie und meistens als konkurrierendes Framework. Es gibt verschiedene Artikel im Internet, die einen direkten Vergleich beider Technologien anstreben [1,2]. Derartige Technologievergleiche sind nicht ausreichend, da weder Struts noch JSF alle Facetten der Webentwicklung abdecken. Beide Frameworks lösen teilweise unterschiedliche Probleme, interessant wird es erst dann, wenn man das Umfeld betrachtet.</p>
<p>pdf: <a href="http://pgt.de/wordpress/wp-content/uploads/2007/04/28-33-aus-jm-1005.pdf" title="Titelthema Javamagazin 10.05 - Struts vs. JSF">Titelthema Javamagazin 10.2005 &#8211; Struts vs. JSF</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2006/06/10/von-sackgassen-und-neubaustrassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einführung: AOP / Aspektorientierte Programmierung</title>
		<link>http://pgt.de/2005/12/18/einfuhrung-aop-aspektorientierte-programmierung/</link>
		<comments>http://pgt.de/2005/12/18/einfuhrung-aop-aspektorientierte-programmierung/#comments</comments>
		<pubDate>Sun, 18 Dec 2005 05:56:55 +0000</pubDate>
		<dc:creator>P.G.Taboada</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Java & Co.]]></category>

		<guid isPermaLink="false">http://pgt.de/wordpress/?p=16</guid>
		<description><![CDATA[<p> In diesem Artikel wird die aspektorientierte Programmierung, kurz AOP genannt, einführend erläutert. Als Grundlage dient das Buch „AspectJ in Action“ von Ramivas Laddad, das sowohl eine theoretische Einführung in die AOP enthält als auch einige praktische Beispiele vorstellt.</p> <p> Dies Einführung in die AOP findet in den ersten vier Kapiteln statt:</p> <p class="western"> [...]]]></description>
			<content:encoded><![CDATA[<p> In diesem Artikel wird die aspektorientierte Programmierung, kurz AOP genannt, einführend erläutert. Als Grundlage dient das Buch „<font style="font-style: normal"><a href="http://astore.amazon.de/pgtadmin-21/detail/1930110936/302-2877789-3816061" title="aStore Book" target="_blank">AspectJ in Action</a>“</font><em> </em>von Ramivas Laddad, das sowohl eine theoretische Einführung in die AOP enthält als auch einige praktische Beispiele vorstellt.</p>
<p><span id="more-16"></span><br />
Dies Einführung in die AOP findet in den ersten vier Kapiteln statt:</p>
<ul>
<li>
<p class="western"> 	In dem ersten 	Kapitel wird die Geschichte der AOP und das Umfeld, aus dem AOP 	entstanden ist umrissen.</p>
</li>
<li>
<p class="western"> 	Das zweite 	Kapitel beschäftigt sich mit der theoretischen Einführung 	in die  AOP.</p>
</li>
<li>
<p class="western"> 	Im dritten 	Kapitel wird eine Implementierung der AOP an dem Beispiel von 	AspectJ vorgestellt.</p>
</li>
<li>
<p class="western"> 	Abschließend 	wird im vierten Kapitel die praktische Anwendung von AspektJ gezeigt (noch nicht online)</p>
</li>
</ul>
<p class="western"> Ziel dieser Ausarbeitung ist es, das Grundverständnis für AOP und einen praktischen Einblick in die Arbeit mit AOP zu vermitteln.</p>
<h1><strong>Die Entstehung der aspektorientierten Programmierung</strong></h1>
<p class="western">Diese Seminararbeit entsteht zu einem Zeitpunkt, an dem die AOP kein theoretischer Ansatz mehr ist. Sie wird heute bereits produktiv eingesetzt. Das Umfeld reicht von Literatur sowohl zur Methodologie als auch zu Implementierungen bis hin zu Referenzprojekten.</p>
<h2><strong>Historische Entwicklung</strong></h2>
<p class="western">Der Begriff AOP wurde erstmals 1996 in Veröffentlichungen von Gregor Kiczales im Palo Alto Research Center, von Xerox Corporation erwähnt. Das Team hinter Gregor Kiczales und Cristina Lopes waren die ursprüngliche Entwickler von AspectJ.</p>
<p class="western"> Die Grundidee hinter AOP hat sich aus der frühen Erkenntnis heraus kristallisiert, dass wartbare Systeme erst durch die strikte Trennung ihrer Dienste zu implementieren sind. Diese Erkenntnis wurde <em>Separation of Concerns</em>, kurz SOC, getauft. Bereits 1972 wurde in einem Artikel<a name="sdfootnote1anc" title="sdfootnote1anc"></a><sup>1</sup> von David Parnas [L6] festgehalten, dass Modularisierung und Kapselung der beste Weg für das Erreichen von SOC sei. Beschrieben wurde die Modularisierung als ein Prozess, in dem Dienste in Modulen implementiert werden. Diese Module haben Ihre Implementierung voreinander gekapselt.</p>
<p class="western">Die Evolution der Softwareentwicklung hat viele Techniken und Frameworks zum Erreichen von SOC hervorgebracht. Allen gemeinsam ist das Ziel, komplexe Systeme wartbarer zu machen.</p>
<h2><strong>Das Umfeld</strong></h2>
<p>Die Entwicklung komplexer Systeme stellt besondere Herausforderungen an die Entwickler. Neben der eigentlichen Geschäftslogik (engl. „<em>core concerns“</em>), auch fachliche Anforderungen genannt, müssen  systemtechnische <em>Crosscutting Concerns </em>wie Authentifizierung, Persistenz, verteilte Kommunikation, transaktionales Verhalten und Protokollierung implementiert werden.Das Modell der Geschäftslogik wird in vielen Projekten heute in dem objektorientierten Ansatz entwickelt, da es der menschlichen Denkweise am nächsten liegt: in der objektorientierten Softwareentwicklung werden, vereinfacht dargestellt, Systeme als Ansammlung zusammenarbeitender Objekte modelliert. Objekte besitzen einen Zustand und ein Verhalten, das ihrer Klasse definiert und implementiert wird.Durch diese Vorgehensweise, den Einsatz von Entwurfsmustern [L2] und sogenannten <font style="font-style: normal">Refactoring</font>-Techniken [L3] sollte ein besonders hohes Maß an Wiederverwendbarkeit einzelner Komponenten erreicht werden. Das Versprechen der Wiederverwendbarkeit lässt sich häufig nicht einlösen, da speziell auf der Ebene der Programmierung oftmals nichtfachliche beziehungsweise technische Anforderungen nicht vollständig in separaten Klassen kapseln lassen. Statt dessen durchziehen solche Aspekte eines Softwaresystems in nicht unerheblichem Ausmaß den rein fachbezogenen Teil der Implementierung. Dies führt dazu, dass Klassen zu konkret an einen Einsatzkontext gebunden und nicht mehr beliebig wiederverwendbar sind.</p>
<p class="western"> Die nichtfachlichen, beziehungsweise technischen Anforderungen werden in der Literatur zu aspektorientierter Programmierung als <em>Crosscutting Concerns </em>bezeichnet.</p>
<p class="western"> Technische Anforderungen sind integraler Bestandteil komplexer Software­systeme und nicht wegzudenken. Aus diesem Grund werden Design­entscheidungen oftmals von fachfremden Anforderungen beeinflusst.</p>
<p class="western"> Oft ist es nicht absehbar, welche Dienste in welcher Form in einem System benötigt werden. Da <font style="font-style: normal">Crosscutting Concerns </font>naturbedingt nicht nur in einem Modul, sondern zusätzlich in den Fachklassen zumindest aufgerufen werden, haben Veränderungen in diesem Bereich kritische Auswirkungen auf das gesamte System.</p>
<p class="western"> Speziell für den Entwurf transaktionaler, verteilter, sicherer, unternehmens­kritischer Anwendungen wurde das Framework Enterprise JavaBeans, kurz EJB, von Sun entwickelt. In einem Applikationsserver werden <font style="font-style: normal">Crosscutting Concerns </font>wie Sicherheit, Persistenz, transaktionales Verhalten, Clustering und Ausfallsicherheit für die so genannten enterprise beans von einer EJB-Laufzeitumgebung (EJB container) bereitgestellt. In welchem Umfang und Konfiguration diese Dienste verwendet werden, wird über eine XML-Konfigurationsdatei (engl. „deployment descriptor?) definiert. Die EJB-Laufzeit­umgebung, die alle Komponenten und deren XML-Konfigurationen kennt, stellt diese Crosscutting Concerns bereit. Damit das funktionieren kann, verliert der Entwickler die Kontrolle über den Lebenszyklus der eigenen Komponenten und darf lediglich Dienste, bzw. Schnittstellen bereitstellen. Alle Aufrufe auf die Komponenten werden von der Laufzeitumgebung abgefangen. Die Anzahl der Restriktionen ist hoch; das Framework ist speziell für den Entwurf von Client-Server-Anwendungen in einem sehr engem Rahmen erstellt worden.</p>
<p class="western"> Das EJB-Framework zeigt,</p>
<ul>
<li>
<p class="western"> dass es nicht trivial ist, das Design der eigenen Fachlogik mit den Anforderungen des technischen Rahmenwerkes zu vereinen bzw. getrennt zu entwickeln, und</p>
</li>
<li>
<p class="western"> 	dass ein solches 	Framework sehr umfangreich werden kann</p>
</li>
</ul>
<p class="western"> Projekte, die heute nicht in das Raster von E<font style="font-style: normal">nterprise JavaBeans</font> passen, oder vielleicht nicht in Java entwickelt werden sollen, werden sofort wieder mit der Problematik der Crosscutting Concerns und der Entwicklung eines passenden Frameworks konfrontiert.</p>
<p id="sdfootnote5">&nbsp;</p>
<p class="quelltext-western code"> public class <strong><font color="#008000">MeineGeschäftslogik</font></strong> {<br />
&#8230; geschäftlogik Attribute<br />
&#8230; protokollierungs-API Attribute<br />
&#8230; cache update Status</p>
<p>public void <strong><font color="#008000">loeseAufgabe</font></strong>(<strong><font color="#008000"> Aufgabe-Parameter</font></strong>, Authentifikationsdaten)<br />
{<br />
&#8230; Authentifizierung sicherstellen<br />
&#8230; Objektsperre setzen<br />
&#8230; start protokollieren<br />
&#8230; <strong><font color="#008000">geschäftslogik</font></strong><br />
&#8230; persistenz ausführen<br />
&#8230; ende protokollieren<br />
&#8230; Sperre aufheben<br />
}<br />
}</p>
<p class="western"> <font class="code"><font size="2"><em>Beispiel 1&#8243;Code Tangling&#8221;</em></font></font></p>
<p>An dem oberen Beispiel wird anschaulich dargestellt, wie die Crosscutting Concerns, obwohl in externen Modulen implementiert, in der Geschäftlogik wieder auftauchen. Diese Crosscutting Concerns sind ohne das Erstellen eines entsprechenden Frameworks nicht aus dem Programmcode wegzudenken.</p>
<p class="western"> Die Folgen sind Verminderung der Softwarequalitätsmerkmale Lesbarkeit, Wiederverwendbarkeit, Wartbarkeit und Änderbarkeit. In dem Buch von Ramnivas Laddad [L1] werden in diesem Kontext zwei Phänomene erwähnt: <em>Code Tangling</em> und <em>Code Scattering</em>. Die folgende Grafik skizziert in abstrakter Form ein System, das solche Phänomene aufweisst. Komponenten werden durch die einzelne Puzzlesteine repräsentiert:</p>
<p><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/abbildung1-klein.png" alt="abbildung1-klein.png" /><br />
<em><strong>Abbildung 1 </strong></em></p>
<p class="western" align="justify"> Der Begriff <strong><em>Code Tangling</em></strong> beschreibt die in Beispiel 1 dargestellte Vermengung von <font style="font-style: normal">Core Concerns</font> und C<font style="font-style: normal">rosscutting Concerns</font>. In der Abbildung 1 wird dieses Phänomen in den Komponenten der fachlichen Anforderungen gezeigt.</p>
<p class="western"> Unter <strong><em>Code Scattering</em></strong> versteht man die Streuung der Implementierung eines Dienstes in mehreren Modulen. In der Abbildung 1 wird deutlich gezeigt, dass die Aspekte <font style="font-style: normal">Logging</font> und Authentifizierung sowohl in eigene Komponenten als auch in aspektfremde Komponenten implementiert werden.</p>
<p class="western"> Während C<font style="font-style: normal">ode Tangling </font>negative Auswirkung auf die Software-qualitäts­merkmale Lesbarkeit und Wiederverwendbarkeit hat, führt C<font style="font-style: normal">ode Scattering </font>zu Verschlechterung in der Wartbarkeit und Änderbarkeit des Systems.</p>
<h2 class="western">Mythos AOP</h2>
<p class="western"> Die aspektorientierte Programmierung wird heute nach der Einführung der objektorientierten Programmierung, kurz OOP, als weiterer Paradigmen­wechsel behandelt. Man muss jedoch beachten, das AOP kein neues Paradigma in der Modellierung darstellt. Lediglich in der Implementierung stellt sich aspektorientierte Programmierung als Erneuerung dar.</p>
<p class="western"> Diese Erneuerung ist nicht unwesentlich: dadurch entstand fälschlicherweise der Eindruck, dass durch den Einsatz von aspektorientierter Programmierung die objektorientierte Programmierung ersetzt werde. Dieser Mythos entstand aus dem Unwissen, welche Vorteile und Neuerungen die AOP tatsächlich für die Softwareentwicklung mit sich bringt.</p>
<p class="western"> Vor einiger Zeit hat das „U<font style="font-style: normal">nit Testing</font>“, insbesondere durch den breiten Einsatz von jUnit, in der Java-Gemeinde für Aufsehen gesorgt. Es wurde schnell akzeptiert, dass das automatisierte und atomare Testen sehr positive Auswirkungen auf den Entwicklungsprozess haben kann. In diesem Umfeld entstand der Begriff der „Continuous Integration“ in einem Dokument von Martin Fowler.</p>
<p class="western"> Bestehende Projekte haben festgestellt, dass schlecht entwickelte Komponenten schwierig zu testen sind. Die Testbarkeit von Komponenten hat sich sogar als Indiz für die Designqualität des Codes entwickelt. Mittel- und kurzfristig wurden als Folge zur Einführung des <font style="font-style: normal">Unit-Testings</font><em> </em>Komponenten entwickelt, die kleinste kohärente und sinnvolle Funktionalität abgebildet haben, und somit einfacher zu testen waren. Testbarkeit, Wiederver­wendbarkeit und Änderbarkeit sind erkärte Ziele eines jeden Software­projektes, das erfolgreich sein will. Die grösste Problematik stellen die Crosscutting Concerns dar.</p>
<p class="western">Sicherlich kann man die aspektorientierte Programmierung als nächsten Schritt in der Evolution der Softwareentwicklung betrachten. Schliesslich kommen wir mit dieser Technik dem Ziel deutlich näher, Dienste &#8211; egal welcher Natur &#8211; in eigene Module zu kapseln. Allerdings ist AOP kein Wundermittel gegen schlechtes Design, eher ein Vitamin, das die Software­entwicklung effizienter machen kann.</p>
<h1 class="western">Einführung in die aspektorientierte Programmierung</h1>
<p class="western"> Die Idee hinter der aspektorientierten Programmierung besteht darin, die so genannten <font style="font-style: normal">Crosscutting Concerns </font>komplett in eigene Komponenten auszulagern. Diese werden schliesslich Aspekte genannt. Dadurch wird die ursprüngliche Fachlogik nicht mehr um die orthogonale Funktionalität aufgebläht.</p>
<h2 class="western">Aspektspezifische Anweisungen</h2>
<p class="western">Eine echte Trennung von Diensten auf der Ebene der Programmierung läßt sich durch Auslagern aspektspezifischer Anweisungen in eigenständige Entitäten erreichen.</p>
<p class="western"> Ein solchermaßen aspektorientiert entwickeltes Softwaresystem besteht aus herkömmlichen Klassen, die die fachlichen Anforderungen implementieren, und &#8211; als neues Modularisierungskonzept &#8211; aus Aspekten, die jeweils eine bestimmte technische Anforderung realisieren.</p>
<p class="western"> Aspekte wirken dabei auf Klassen ein, indem sie deren Methoden um zusätzliche Anforderugen erweitern. Sie ergänzen somit das Verhalten von Objekten um aspektspezifische Anteile, ohne dabei das fachliche Verhalten zu beeinflussen.</p>
<p class="western"> Wie in jeder neuen Methodologie oder Technik gibt es auch für die AOP ein „<em>Hello World“</em>: hier verwendet man in der AOP-Literatur die technische Anforderung des Protokollierens (Logging, Tracing) um ein entsprechend anschauliches Beispiel aufzusetzen.</p>
<p class="western"> Die Protokollierung bildet ein Aspekt des Systems, und die Fachklassen werden frei vom Protokollierungscode entwickelt.</p>
<h2 class="western">Allgemeine Vorgehensweise</h2>
<p class="western"> Die Entwicklung einer AOP Software verläuft im wesentlichen nicht anders als bei der OOP: zunächst werden die Anforderungen ermittelt und implementiert. Die Integration aller entwickelten Komponenten bildet schließlich das Gesamtsystem.</p>
<p class="western"> Analog werden in der aspektorientierten Programmierung drei Entwicklungsphasen beschrieben:</p>
<ul>
<li>
<p class="western"> 	<em>Aspect Decomposition</em></p>
</li>
<li>
<p class="western"> 	<em>Concern Implementation</em></p>
</li>
<li>
<p class="western"> 	<em>Aspectual Recomposition</em></p>
</li>
</ul>
<p class="western"> In der folgenden Abbildungen werden die einzelnen Phasen gezeigt. Die Zerlegung der Anforderungen in Aspekte und das Weben (engl. „<em>weaving</em>?) der Aspekte zu einem Endsystem wird metaphorisch dargestellt.</p>
<p class="western"><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/abbildung2-klein.png" alt="abbildung2-klein.png" /><br />
<em><strong>Abbildung 2</strong></em></p>
<h3 class="western">Erste Phase: Aspectual Decomposition</h3>
<p class="western"> In dieser Phase findet die Zerlegung der Anforderungen in die einzelnen Aspekte des Systems statt. Ausgangspunkt sind die an das System gestellten Anforderungen, sowohl die fachlichen als auch die technischen. Die Modellierungsmethodik wird von der aspektorientierten Programmierung nicht vorgeschrieben. Das Zerlegen in einzelne Aspekte wird in der Abbildung 2 durch den <font style="font-style: normal">concern identifier </font>dargestellt.</p>
<h3 class="western">Zweite Phase: Concern Implementation</h3>
<p class="western"> Sobald die Anforderungen in eine Menge von Aspekten zerlegt worden sind, werden diese unabhängig voneinander implementiert. Mit unabhängig ist gemeint, dass die jeweilige Implementierung eines Aspektes kein Wissen über und keinen Zugriff auf andere Aspekte besitzt. So lassen sich die fachlichen Anforderungen definitiv ohne Einwirkung von technischen Aspekten entwickeln. Selbstverständlich sind auch die technischen Anforderungen ohne Einfluss der Fachlogik implementiert. Diese Tatsache führt dazu, dass diese Komponenten wiederverwendbar entwickelt werden können.</p>
<h3 class="western">Dritte Phase: Aspectual Recomposition</h3>
<p class="western">In der letzten Phase werden die Regeln für die Verwebung der einzelnen Aspekte erstellt. Diese Regeln legen die Zusammenarbeit bestimmter Komponenten fest. Der Entwickler definiert nur die Regeln, das zusammengesetzte System wird von der Entwicklungsumgebung erstellt. Diese Tätigkeit wird in der Abbildung 2 durch den W<font style="font-style: normal">eaver</font> dargestellt.</p>
<h2 class="western">Anatomie der AOP</h2>
<p class="western"> Es ist zu beachten, dass AOP keine Implementierung sondern lediglich eine Methodologie darstellt. Analog ist die objektorientierte Programmierung eine Methodologie und Java und Smalltalk sind bekannte Realisierungen.</p>
<p class="western">Eine Realisierung umfasst die Definition der Sprachelemente, der Syntax und das Bereitstellen der benötigten Tools, wie zum Beispiel einen Compiler.</p>
<p class="western"> Somit wird von einer AOP Implementierung eine Sprachdefinition und die entsprechende Implementierung erwartet.</p>
<h3 class="western">Die AOP Sprachdefinition</h3>
<p class="western" align="justify"> Eine für die AOP geeignete Sprachdefinition muss folgende zwei Kern­bereiche festlegen. Diese werden in der Literatur „<em>Implementation of concerns</em>“ und „<em>Weaving rules specification</em>“ genannt.</p>
<ul>
<li>
<p class="western" align="justify"> 	<strong><font style="font-style: normal">Implementation 	of concerns:</font><br />
</strong><br />
Die Sprache, mit der die Komponenten entwickelt werden, da die Hauptaufgabe schließlich nach wie vor die Implementierung der einzelnen Komponenten ist.</p>
<p class="western" align="justify"> 	Üblicherweise 	verwenden AOP Realisierungen an dieser Stelle bestehende 	Programmiersprachen, wie Java, C++, und Python.</p>
</li>
</ul>
<ul>
<li>
<p class="western"> 	<strong>Weaving rules 	specification:<br />
</strong><br />
An dieser Stelle werden die Sprachelemente für das Integrieren der Aspekte definiert. Die Stärke einer AOP Realisierung zeigt sich darin, wie ökonomisch diese Integration beschrieben werden kann.</li>
</ul>
<h3 class="western">Ziele</h3>
<p class="western"> Die Realisierung einer AOP Sprache muss folgende Arbeit leisten: zuerst müssen die einzelnen Aspekte mittels der definierten Integrationsregeln (engl. „<em>weaving rules“</em>) vermengt werden, und schließlich daraus ausführbarer Code, das Endsystem, generiert werden.</p>
<p class="western"><img src="http://pgt.de/wordpress/wp-content/uploads/2007/04/abbildung3-klein.png" alt="abbildung3-klein.png" /><br />
<em><strong>Abbildung 3</strong></em></p>
<p class="western"> Die Abbildung 3 zeigt eine Skizze einer allgemeinen AOP Realisierung. Im Vergleich zu Abbildung 1 sind die einzelnen Komponenten absichtlich einfarbig dargestellt. Die Komponenten werden erst im Endsystem miteinander verwoben.</p>
<p class="western">Üblicherweise werden die Integrationsregeln in eigenen Entitäten abgelegt, wie in Abbildung 3 dargestellt. Der AOP-Compiler, auch <font style="font-style: normal">weaver </font>genannt, nutzt diese Regeln um das Verhalten des Endsystems zu realisieren, in dem die einzelnen Aspekte entsprechend verwoben werden.</p>
<p class="western">Die Auslagerung der Integrationsregeln in eigene Entitäten ist wichtig. So ist es möglich, zusätzliche Integrationsregeln in das Endsystem einzuflechten, ohne bestehenden Code zu verändern.</p>
<p class="western"> Technische und fachliche Aspekte greifen ineinander über: Das Ergebnis ist wieder verwoben. Dieses Problem wird von der AOP nicht gelöst. Es wird lediglich ein besserer Weg zum gleichen Ziel eingeschlagen. Besser in dem Sinn, dass die AOP versuchen will, endlich das Versprechen der objekt­orientierten Methodologie einzulösen: die einzelnen Bausteine eines Systems sollen wartbar und wiederverwendbar sein.</p>
<h2 class="western">Implementierungen</h2>
<p class="western">Die aspektorientierte Programmierung stellt eine Methodologie , aber keine Implementierung dar. Je nach Programmiersprache und Umgebung sind unterschiedliche Implementierungen entstanden.</p>
<p class="western">Die in dieser Seminararbeit verwendete AOP-Implementierung nennt sich AspectJ. Diese wurde von einem Team aus dem Palo Alto Research Center, von Xerox Corporation, dem Eclipse Konsortium gespendet. Die aktuelle Version trägt die Bezeichung AspectJ Version 1.2.</p>
<p class="western"> Der Vollständigkeit halber sollen hier noch weitere Implementierungen aufgezählt werden:</p>
<p class="western"> <strong>AspectC++ </strong></p>
<p class="western"> <a href="http://www.aspectc.org" id="linkification-ext-first" class="linkification-ext">http://www.aspectc.org</a></p>
<p class="western"> ist eine Implementierung für die Programmiersprache C++.</p>
<p class="western"> <strong>AspectWerkz</strong></p>
<p class="western"> <a href="http://aspectwerkz.codehaus.org" class="linkification-ext">http://aspectwerkz.codehaus.org</a></p>
<p class="western"> Eine weitere AOP Implementierung für Java. Interessant an dieser Lösung ist, dass das Verweben zur Laufzeit stattfindet.</p>
<p class="western"> <strong>AspectXML</strong></p>
<p class="western"> <a href="http://www.aspectxml.org" class="linkification-ext">http://www.aspectxml.org</a></p>
<p class="western"> Dieses Projekt realisiert die AOP Ansätze auf XML Dokumente.</p>
<p class="western"> <strong>AspectPerl</strong></p>
<p class="western"> <a href="http://search.cpan.org/%7Emarcel/Aspect-0.08/lib/Aspect/README.pod" class="linkification-ext">http://search.cpan.org/~marcel/Aspect-0.08/lib/Aspect/README.pod</a></p>
<p class="western"> Ein Perl- Modul, das AOP für die Perl- Skriptsprache implementiert.</p>
<p class="western"> <strong>Aspects</strong></p>
<p class="western"> <a href="http://www.logilab.org/projects/aspects/" class="linkification-ext">http://www.logilab.org/projects/aspects/</a></p>
<p class="western"> Eine AOP Implementierung für Python.</p>
<p class="sdfootnote"> Quelle:<font style="font-style: normal"> 	<a href="http://www.aosd.net" class="linkification-ext">http://www.aosd.net</a></font></p>
<h1 class="western">AspectJ: Eine Implementierung von AOP für Java</h1>
<p class="western"> Die AOP Implementierung <a href="http://www.eclipse.org/aspectj/">AspectJ</a> bietet Java-Entwicklern eine Erweiterung der Java-Programmiersprache. AspectJ ist OpenSource und unter der Mozilla Public License Version 1.1 erhältlich. Plugins für Entwicklungsumgebungen wie Eclipse, Netbeans und JBuilder sind erhältlich.</p>
<p class="western">Mit AspectJ bekommt man eine Dokumentation und Tools wie einen Compiler, einen Aspekte Browser und eine erweiterte Version des Tools J<font style="font-style: normal">avadoc</font>, dass mit Aspekten umgehen kann. In der mitgeliefertern Doku­mentation befinden sich unter anderem Installationsanleitungen, Referenzen für die Sprach- Erweiterungen und einige Beispiele.Die Plugins für Ent­wicklungsumgebungen müssen separat bezogen werden.</p>
<p class="western">Die Beigabe der Aspektorientierung erfolgt über die Erweiterung des Java-Sprachumfangs um AOP-Elemente, unter anderem das einer Klasse nicht unähnliche Konstrukt <strong><em>aspect</em></strong>. Neben den bekannten Methoden und Attributen definiert ein Aspekt <strong><em>pointcuts</em></strong> und <strong><em>advices</em></strong>.</p>
<p class="western"> Grundsätzlich unterscheidet AspectJ zwischen <em>Dynamic Crosscutting</em><font style="font-style: normal"> </font>und <em>Static Crosscutting</em>.</p>
<p class="western"> Bei D<font style="font-style: normal">ynamic Crosscutting</font> geht es darum, dass die definierten aspekt­spezifischen Methoden das Laufzeitverhalten (dynamisches Verhalten) modifiziert. Im Gegensatz dazu verändert S<font style="font-style: normal">tatic Crosscutting</font> die statische Struktur des Programmcodes.</p>
<p id="sdfootnote1">&nbsp;</p>
<h2> <font face="Times New Roman,serif"><font size="3">Join Points und Pointcuts</font></font></h2>
<p class="western"> <em>Join Points</em> sind addressierbare Punkte im Quelltext. Beispiele für <em>Join Points </em>sind Methodenaufrufe oder Zugriffe auf Attribute.</p>
<p class="quelltext-western code"> public class Dose {<br />
private boolean istOffen = false;<br />
public void oeffnen()<br />
{<br />
istOffen = true;<br />
}<br />
}</p>
<p align="left">  <font face="Times New Roman,serif"><font size="2"><em>Beispiel 2 Beispiel für Pointcuts und Join Points</em></font></font></p>
<p class="western"> In obigen Beispiel sind u.a. folgende <em>Join Points</em> zu finden:</p>
<ul>
<li>
<p class="western"> 	die Ausführung der Methode „<font face="Courier,monospace">oeffnen()</font>“</p>
</li>
<li>
<p class="western"> 	der schreibende Zugriff auf das Attribut 	„<font face="Courier,monospace">istOffen</font>“</p>
</li>
</ul>
<p class="western"> Unter Pointcut versteht man schließlich die Addressierung eines oder mehrerer J<font style="font-style: normal">oin Points. </font></p>
<p class="western"> Die zwei oben genannten Join Points könnten durch folgende Pointcuts<em> </em>addressiert werden:</p>
<ul>
<li>
<p class="western"> 	<font face="Courier,monospace">execution( 	void Dose.oeffnen() )</font></p>
</li>
<li>
<p class="western"> 	<font face="Courier,monospace">set( 	private boolean Dose.istOffen )</font></p>
</li>
</ul>
<p class="western"> Join Points sind lediglich Bezeichnungen für addressierbare Punkte im Quelltext, während Pointcuts die tatsächlichen addressierten Punkte darstellen.</p>
<p class="western"> Bei der Definition von Pointcuts werden Sprachelemente verwendet, die nicht zum Sprachumfang der Java-Programmiersprache gehören.In der Definition von Pointcuts können auch folgende Platzhalter eingesetzt werden:</p>
<p class="western"> „ .. “  	für beliebig viele Zeichen</p>
<p>„ * “ 	für beliebig viele Zeichen ausser einem Punkt</p>
<p>„ + “	für beliebige Spezialisierungen einer Klasse oder eines Interfaces</p>
<p class="western" align="left">AspectJ bietet ein umfangreiches dynamisches Join Point Modell. Die folgenden Beispiele sollen im Groben einen Eindruck über den Umfang vermitteln.</p>
<p class="western" align="left"> <font face="Times New Roman,serif"><font size="3"><br />
</font></font><font face="Arial,sans-serif">	Das Ausführen einer Methode:<br />
</font><br />
<font face="Times New Roman,serif"><font size="3"><font face="Courier,monospace">		execution( void Dose.oeffnen() )<br />
execution( int *() )</font></font></font></p>
<p class="western"> <font face="Arial,sans-serif">	Das Aufrufen einer Methode:<br />
</font><br />
<font face="Courier,monospace">		call( void Dose.oeffnen()  )<br />
call( * *( long ) )</font></p>
<p class="western"> 	Das Catchen bzw. Behandeln einer Exception:</p>
<p><font face="Courier,monospace">		handler( RemoteException )<br />
handler( RuntimeException+  )</font></p>
<p class="western"> <font face="Arial,sans-serif">	Der Ausführende eines bestimmten Typs ist:<br />
</font><br />
<font face="Courier,monospace">		this( Dose )</font></p>
<p class="western"> <font face="Arial,sans-serif">	Der Aufgerufene eines bestimmten Typs ist:<br />
</font><br />
<font face="Courier,monospace">		target( Dose )</font></p>
<p class="western"> Der ausgefürte Code eines bestimmten Typs ist:</p>
<p class="western" align="left">  <font face="Times New Roman,serif"><font size="3"><font face="Courier,monospace">within( meine.servlets.*  )</font></font></font></p>
<p class="western"> <font face="Arial,sans-serif">	Der ausgeführte Code, der von einer bestimmten Methode<br />
aufgerufen wurde (engl. „<em>call flow</em>“) &#8211; inklusive oder<br />
exclusive der aufrufende Methode:</font></p>
<p><font face="Courier,monospace">		cflow( Dose.oeffnen() )<br />
cflowbelow( Dose.oeffnen() )</font></p>
<p class="western"> <font face="Arial,sans-serif">	Initialisierung eines Objekts:<br />
</font><br />
<font face="Courier,monospace">		initialization( Dose.new(..) )</font></p>
<p><font face="Arial,sans-serif">Aufruf der Konstruktors „</font>super“ <font face="Arial,sans-serif">eines Objektes:<br />
</font><br />
<font face="Courier,monospace">		preinitialization( Dose.new(..) )</font></p>
<p class="western"> <font face="Arial,sans-serif">	Wenn der Klassenkonstruktor aufgerufen wird:</font></p>
<p><font face="Courier,monospace">		staticinitialization( Dose )</font></p>
<p class="western"> <font face="Arial,sans-serif">	Das Lesen oder Schreiben von Instanzattribute:</font></p>
<p><font face="Courier,monospace">		get( Dose.istOffen )</font><br />
<font face="Courier,monospace">		set( Dose.istOffen )</font></p>
<h2> <font face="Times New Roman,serif"><font size="3">Advices</font></font></h2>
<p class="western"> <em>Advices</em> definieren die aspektspezifischen Code-Erweiterungen. <font style="font-style: normal">Advices</font> beziehen sich auf Pointcut<font style="font-style: normal">s und werden an den entsprechenden Stellen durch den AOP Compiler hinzugefügt.</font></p>
<p class="western">Die Syntax eines Advices ähnelt sehr der Syntax eines Methodenaufrufs. Der Unterschied besteht lediglich darin, dass ein Advice noch definieren muss, wann dieser Code ausgeführt werden soll:</p>
<ul>
<li>
<p class="western"> 	<em>before</em>: 		vor dem definiertem Pointcut<em>,</em></p>
</li>
<li>
<p class="western"> 	<em>after</em>:	nach 	dem definiertem Pointcut oder</p>
</li>
<li>
<p class="western"> 	<em>around</em>:	um 	den Pointcut herum.</p>
</li>
</ul>
<p>Somit kann der Entwickler vor dem Aufruf der Methode „<font face="Courier,monospace">void oeffnen()</font>“ ein zusätzliches Verhalten implementieren:</p>
<p class="western"> Innerhalb eines Advices werden die impliziten Variablen</p>
<ul>
<li>
<p class="western"> 	<font face="Courier,monospace">thisJoinPoint</font></p>
</li>
<li>
<p class="western"> 	<font face="Courier,monospace">thisJoinPointStaticPart</font></p>
</li>
<li>
<p class="western"> 	<font face="Courier,monospace">thisEnclosingJoinPointStaticPart</font></p>
</li>
</ul>
<p>dem Entwickler zur Verfügung gestellt. Somit bekommt der Entwickler dynamisch Zugriff auf dem Kontext der aus dem entsprechendem <font style="font-style: normal">Pointcut entstanden ist. Die Kontextinformationen basieren auf der Java-Reflection API, so dass der Entwickler sich nicht in ein neues Objekmodell einarbeiten muss.</font></p>
<h2 class="western">Aspects</h2>
<p class="western"> <font style="font-style: normal">Aspects</font> sehen auf dem ersten Blick wie Java-Klassen aus. Sie können Attribute und Methoden wie eine übliche Java-Klasse definieren. Zusätzlich können <font style="font-style: normal">aspects noch </font>Pointcuts<font style="font-style: normal"> und A</font>dvices<font style="font-style: normal"> defnieren.</font></p>
<p align="left"> <font class="code">public aspect LoggingAspect<br />
{<br />
public pointcut  logPoints() :</font></p>
<p><font class="code">execution( void Dose.oeffnen() );</font></p>
<p><font class="code">before() : logPoints()<br />
{<br />
System.out.println(„Dose wird geöffnet“);<br />
}<br />
}<br />
</font><font class="code"><font size="2"><em>Beispiel 4 LoggingAspect für die Dose</em></font></font></p>
<p class="western"> Im Gegensatz zu Klassen können Aspects nicht instanziiert werden. Aspects bilden die Entitäten, in denen die Integrationsregeln schließlich festgehalten werden.</p>
<h2 class="western">Weitere Möglichkeiten im Überblick</h2>
<p class="western"> Mit Pointcut<font style="font-style: normal">s</font> und A<font style="font-style: normal">dvices</font> sind die Sprachelemente für dynamisches C<font style="font-style: normal">rosscutting</font> definiert worden. AspectJ bietet zusätzlich noch die Möglichkeit, die statische Struktur einer Klasse zu beeinflussen. So kann man Klassen, neue Attribute und Methoden vergeben. Das ist besonders dann wichtig, wenn die neuen Aspekte eigene Zustände in den Instanzen verwalten müssen.</p>
<p class="western"> Im Beispiel 5 wird ein Attribut und eine Methode der Klasse <font face="Courier,monospace">Dose</font> hinzugefügt. In dem A<font style="font-style: normal">dvice wird schließlich auf die eingefügte Methode zugegriffen. In der Pointcut Definition werden auch die Parameter definiert, die später dem Advice zur Verfügung gestellt werden sollen. Eingefangen wird die Doseninstanz in dem Pointcut durch das Sprachelement „</font><em><font face="Courier,monospace">this( )</font></em><font style="font-style: normal">“.</font></p>
<p class="quelltext-western">&nbsp;</p>
<p class="quelltext-western code"> public aspect LoggingAspect {<br />
private Date Dose.oeffnungsDatum = null;<br />
public Date Dose.getOeffnungsDatum() {<br />
if (oeffnungsDatum == null)<br />
oeffnungsDatum = new Date();<br />
return oeffnungsDatum;<br />
}</p>
<p>public pointcut  logPoints(Dose dose) :<br />
execution( void Dose.oeffnen() )<br />
&amp;&amp;<br />
this(dose);</p>
<p>before(Dose dose) : logPoints()<br />
{<br />
System.out.println(„Oeffnungsdatum: “+dose.getOeffnungsDatum();<br />
}<br />
}</p>
<p align="left">  <font class="code"><font size="2"><em>Beispiel 5 LoggingAspect für die Dose</em></font></font></p>
<p class="western"> AspectJ bietet auch die Möglichkeit, Compiler-Fehler und -Warnungen zu definieren. Diese Fehler und Warnungen werden auch an Pointcuts gebunden. So kann man wie im Beispiel 6 gezeigt wird, eine Warnung defnieren, dass der Entwickler nicht in die Konsole schreiben soll, sondern die Logging-API verwenden soll.</p>
<p align="left"> <font class="code">declare warning : get(* System.out) : „Bitte die Logging API verwenden“</font><font class="code"><font size="2"><em><br />
Beispiel 6 Compilerwarnungen definieren</em></font></font></p>
<p class="western"> Über diesen Mechanismus kann die Einhaltung einiger Programmierstandards innerhalb eines Projektes erzwungen werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://pgt.de/2005/12/18/einfuhrung-aop-aspektorientierte-programmierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

