<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:iweb="http://www.apple.com/iweb" version="2.0">
  <channel>
    <title>eclipse... RCP... Riena... &#13;OSGI... Equinox... &#13;MDSD... oaw... uml... &#13;Business processes... business rules...</title>
    <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/blog.html</link>
    <description> </description>
    <generator>iWeb 3.0.1</generator>
    <item>
      <title>New Ways Around Generation GAP Pattern - VideoCast</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/5/10_New_Ways_Around_Generation_GAP_Pattern_-_Part_2.html</link>
      <guid isPermaLink="false">b5c5001d-8a33-447e-bfd0-b0c6873ed797</guid>
      <pubDate>Sun, 10 May 2009 15:55:26 +0200</pubDate>
      <description>Um die etwas komplizierte Thematik des Generation Gap Patterns, sowie der VetoRedirectStrategie im oAW Workflow etwas verständlicher darzustellen, gibt es jetzt ergänzend zu meinem Blogeintrag „&lt;a href=&quot;Eintr%C3%A4ge/2009/5/5_Generation_GAP_oder_nicht.html&quot;&gt;New Ways around Generation Gap Pattern&lt;/a&gt;“ das ganze als VideoCast - have Fun !&lt;br/&gt;&lt;br/&gt;Da ich nach der Veröffentlichung meiner ersten Filmchen erfahren habe, dass es ganz unterschiedliche Wünsche (und Kompatibilitätsprobleme) gibt, veröffentliche ich in verschiedenen Formaten und Plätzen - da kann sich jeder das passende raussuchen:&lt;br/&gt;&lt;br/&gt;	•	&lt;a href=&quot;http://vimeo.com/ekkescorner&quot;&gt;http://vimeo.com/ekkescorner&lt;/a&gt; als &lt;a href=&quot;http://vimeo.com/4558181&quot;&gt;HD&lt;/a&gt; Film&lt;br/&gt;	•	&lt;a href=&quot;http://ekkes-corner-tv.org/&quot;&gt;http://ekkes-corner-tv.org&lt;/a&gt; als &lt;a href=&quot;../../ekkes-corner-tv/ekkes-corner-desktop/Eintr%C3%A4ge/2009/5/9_episode_2_-_MDSD_-_new_ways_around_Generation_Gap_Pattern.html&quot;&gt;QuickTime&lt;/a&gt; direkt aus dem Browser&lt;br/&gt;	•	&lt;a href=&quot;http://www.slideshare.net/ekkescorner&quot;&gt;http://www.slideshare.net/ekkescorner&lt;/a&gt; als &lt;a href=&quot;http://www.slideshare.net/ekkescorner/new-ways-around-generation-gap-pattern&quot;&gt;Slides&lt;/a&gt; (ohne Ton und Animation)&lt;br/&gt;	•	iTunes: als VideoCast für iPod/iPhone bzw. AppleTV/Desktop (einfach nach „ekkes-corner“ suchen)&lt;br/&gt;&lt;br/&gt;Viel Spass - Diskussionen bitte wie üblich im &lt;a href=&quot;http://ekkes-corner.org/&quot;&gt;englischsprachigen Blog&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>New Ways Around Generation GAP Pattern</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/5/5_Generation_GAP_oder_nicht.html</link>
      <guid isPermaLink="false">9730f721-3098-4e60-8958-276d2e900f7d</guid>
      <pubDate>Tue, 5 May 2009 17:05:16 +0200</pubDate>
      <description>ModelDrivenSoftwareDevelopment - Best Practices&lt;br/&gt;&lt;br/&gt;Es gibt ein paar&lt;a href=&quot;http://www.infoq.com/articles/model-driven-dev-best-practices&quot;&gt; Grundsätze für MDSD Projekte&lt;/a&gt;, die unstrittig sind:&lt;br/&gt;&lt;br/&gt;	•	generierter Code muss sauber getrennt sein von manuell erstelltem Code&lt;br/&gt;	•	generierter Code sollte nicht in ein VersionsKontrollSystem (CVS, SVN, GiT) eingecheckt werden&lt;br/&gt;&lt;br/&gt;Innerhalb eines MDSD (ModelDrivenSoftwareDevelopment) Projekts gibt es verschiedene Arten von Code (s.a. &lt;a href=&quot;http://www.1160pm.net/2009/04/23/generation-gap-pattern/&quot;&gt;Heiko Behrens Artikel&lt;/a&gt;)&lt;br/&gt;&lt;br/&gt;Manueller Code&lt;br/&gt;&lt;br/&gt;Wird nicht generiert, sondern immer manuell erstellt. Es kann sich dabei um Basisklassen handeln oder Code, der in seiner Struktur so selten auftaucht, dass sich eine Generierung nicht lohnt wie zB bei bestimmten Utility- oder Hilfsklassen.&lt;br/&gt;&lt;br/&gt;Generierter unveränderter Code&lt;br/&gt;&lt;br/&gt;Dieser Code wird generiert und nach der Generierung nie manuell angepasst oder erweitert. Klassen aus diesem Bereich werden immer neu generiert - bestehende Dateien werden beim Generieren überschrieben oder vorher gelöscht.&lt;br/&gt;&lt;br/&gt;Generierter veränderbarer Code&lt;br/&gt;&lt;br/&gt;Bei dieser Art Code ist es üblich und sinnvoll, dass nach der Generierung manuelle Änderungen oder Erweiterungen erfolgen. Solcher Code wird in ein Verzeichnis generiert wird, in dem bereits vorhandene Dateien erhalten bleiben und neue ggf. hinzugefügt werden. (generate-once)&lt;br/&gt;&lt;br/&gt;Generation Gap Pattern&lt;br/&gt;&lt;br/&gt;Das Hauptproblem ist: wie gehen wir mit dem Code um, der nach der Generierung geändert werden kann. Hier kommt das Generation Gap Pattern zum Einsatz:&lt;br/&gt;&lt;br/&gt;Abstrakte Klassen werden in ein Verzeichnis generiert, das immer wieder überschrieben wird.&lt;br/&gt;Die konkreten Klassen werden nur das erste Mal generiert und können dann geändert werden.&lt;br/&gt;&lt;br/&gt;Im praktischen Einsatz ergeben sich einige Probleme mit „Geisterklassen“, wenn konkrete Klassen bei Refactorings und Umbenennungen hängen bleiben. Ausserdem werden alle konkreten Klassen ins VersionsKontrollSystem eingecheckt und man kann nicht auf den ersten Blick erkennen, welche der Dateien wirklich angepasst wurden.&lt;br/&gt;&lt;br/&gt;Um das zu verbessern, hat Heiko Behrens als Lösung „Conditional Generation“ vorgestellt, die die generierten und angepassten Dateien trennt. Im oAW Workflow kann eine „Vetostrategie“ angegeben werden: Vor dem Generieren einer Datei wird getestet, ob es diese bereits unter einem anderen Pfad als angepasste Version gibt und wenn ja, dann erfolgt keine neue Generierung.&lt;br/&gt;&lt;br/&gt;Das alles ist sehr detailliert beschrieben in Heiko Behrens Artikel „&lt;a href=&quot;http://www.1160pm.net/2009/04/23/generation-gap-pattern/&quot;&gt;Generation Gap Pattern&lt;/a&gt;“. Wer den Artikel noch nicht gelesen hat, sollte das jetzt machen, da mein Blog davon ausgeht, dass die dort beschriebenen Vetostrategien bekannt sind !&lt;br/&gt;&lt;br/&gt;Vielen Dank an Heiko Behrens: die oAW „VetoStrategy“ war auch für mich neu, da sie weder im Manual steht noch im Forum erwähnt wurde. Diese Vetostrategy hat mich inspiriert und geholfen, meine Lösungen optimaler zu implementieren als bisher.&lt;br/&gt;&lt;br/&gt;Zunächst muss ich gestehen, daß ich ein Problem habe mit dem „Generation Gap Pattern“ als generelles Pattern beim Generieren von Code in MDSD Projekten. Wenn ich als Softwarearchitekt (speziell bei Enterprise Business Applikationen) ein Datenmodell entwerfe, überlege ich sehr sorgfältig die Vererbungshierarchien - insbesondere wenn diese von einem ORM (Object-Relational-Mapper wie Hibernate oder EclipseLink) in Richtung zur Datenbank umgesetzt werden müssen.&lt;br/&gt;&lt;br/&gt;Eine ganz simple Vererbung:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Wenn jetzt aufgrund des „&lt;a href=&quot;http://www.research.ibm.com/designpatterns/pubs/gg.html&quot;&gt;Generation Gap Patterns (John Vlissides)&lt;/a&gt;“ :&lt;br/&gt;&lt;br/&gt;Image from „&lt;a href=&quot;http://www.research.ibm.com/designpatterns/pubs/gg.html&quot;&gt;Generation Gap Pattern&lt;/a&gt;“ (c) 1996 John Vlissides&lt;br/&gt;&lt;br/&gt;... jede Klasse aufgeteilt wird in eine generierte (meist abstrakte) Klasse und eine zusätzliche (oft das erste Mal generierte) änderbare SubKlasse ...&lt;br/&gt;&lt;br/&gt;übliche Umsetzung des generation Gap Patterns in oAW Projekten&lt;br/&gt;&lt;br/&gt;... dann „verschmutzt“ das aus meiner Sicht die Vererbungshierarchie. In grossen Projekten führt dies dazu, dass hunderte von Klassen „doppelt“ vorhanden sind nur aus einem technischen Grund: es ist ein modellgetriebenes Projekt.&lt;br/&gt;&lt;br/&gt;Ich möchte abstrakte / konkrete Klassen nur dort nutzen, wo sie aufgrund der Softwarearchitektur notwendig sind und Sinn machen, aber nicht, weil ich ein Generatorframework einsetze.&lt;br/&gt;&lt;br/&gt;Wie bei jedem Pattern sollte man sich beim Einsatz immer fragen: ist es hier das richtige Pattern oder sollte ich einen anderen Weg gehen ?&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.1160pm.net/2009/04/23/generation-gap-pattern/&quot;&gt;Heiko Behrens&lt;/a&gt; zeigt auf, wie mit verschiedenen Vetostrategien das Handling der Dateien und Ordner übersichtlicher wird, löst aber nicht das Problem mit dem Aufblähen durch den Verdopplungseffekt.&lt;br/&gt;&lt;br/&gt;Protected Areas (geschützte Bereiche)&lt;br/&gt;&lt;br/&gt;Also stehen wir wieder vor der Frage, wie wir generierten und manuellen Code trennen können, ohne die Grundsätze von MDSD Projekten zu verletzen. &lt;br/&gt;&lt;br/&gt;Es gibt eine Lösung: „ProtectedAreas“ (geschützte Bereiche). Halt halt - bevor es jetzt zum großen Aufschrei kommt, bitte erst weiterlesen - ich setze sie etwas anders ein, als allgemein üblich !&lt;br/&gt;&lt;br/&gt;Was sind „Protected Areas“&lt;br/&gt;&lt;br/&gt;An allen Stellen im Sourcecode, wo es Änderungen oder Erweiterungen geben darf, werden der Beginn und das Ende über spezielle Kommentarzeilen mit einer „Unique ID“ als geschützte Bereiche gekennzeichnet. Innerhalb dieses geschützten Bereichs wird der Defaultcode generiert.&lt;br/&gt;&lt;br/&gt;Wenn der Programmierer etwas ändert, dann „ENABLED“ er den geschützten Bereich und dieser bleibt bei Neugenerierung erhalten. Durch diese „Protected Areas“ bleibt die Klassenstruktur exakt genauso, wie ohne Einsatz eines Generators.&lt;br/&gt;&lt;br/&gt;Wie werden „Protected Areas“ allgemein üblich eingesetzt ?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Was ist der Nachteil ?&lt;br/&gt;&lt;br/&gt;Jetzt haben die Klassen geschützte Bereiche und werden jedes Mal überschrieben und auch mit ins VersionsKontrollSystem eingecheckt - darunter sind dann auch Klassen, in denen keinerlei Änderungen erfolgt sind. Das aber verletzt die Grundregel, dass reiner generierter Code nicht eingecheckt werden soll.&lt;br/&gt;&lt;br/&gt;Ausserdem sieht man auch in diesem Falle nicht, welche Klassen angepasst wurden und welche noch unverändert seit der Generierung sind.&lt;br/&gt;&lt;br/&gt;Protected Regions mit VetoRedirectStrategie&lt;br/&gt;&lt;br/&gt;So sieht mein Lösungsvorschlag aus&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;	•	Als erstes werden die Verzeichnisse „src-gen“ und „veto“ gelöscht&lt;br/&gt;	•	Der Generator scannt das „src-gen-pr“ Verzeichnis und cached die ENABLED ProtectedAreas&lt;br/&gt;	•	„normale nur-generierte“ Klassen werden in das „src-gen“ Verzeichnis generiert, ebenso Klassen mit „ProtectedRegions“ ohne Veto&lt;br/&gt;	•	Im „src-gen-pr“ Verzeichnis befinden sich Klassen mit ENABLED „ProtectedRegions“, die also manuell angepasst wurden.&lt;br/&gt;	•	Beim Generieren prüft der Generator mit der Vetostrategie, ob es eine Klasse bereits im „src-gen-pr“ Verzeichnis gibt. Wenn ja, dann wird der Ausgabepfad umgelenkt in das „veto“ Verzeichnis und die Datei inklusive der ENABLED ProtectedRegions dorthin geschrieben.&lt;br/&gt;	•	Am Ende des Generierungslaufs vergleicht der Generator die Dateien im „veto“ Verzeichnis mit den Dateien aus dem „src-gen-pr“ Verzeichnis. Nur wenn diese unterschiedlich sind, werden sie in das „src-gen-pr“ Verzeichnis kopiert. Dadurch erhalten nur geänderte Dateien ein neues „Modification Date“ und werden ins SourceKontrollSystem commited.&lt;br/&gt;&lt;br/&gt;Der Workflow&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Fazit: Wir erreichen eine saubere Aufteilung zwischen generiertem und manuellem Code, checken nur geänderte Dateien ein und erhalten unsere Vererbungsstruktur.&lt;br/&gt;&lt;br/&gt;Problematisch ist sicher, dass der Programmierer nicht vergessen darf, bei Änderungen in „Protected Regions“ diese auch zu aktiveren (ENABLED) und die Datei ins „src-gen-pr“ Verzeichnis zu verschieben, wenn sie dort noch nicht ist. &lt;br/&gt;Wer prüfen möchte, ob ein Entwickler eine protected region ENABLED hat, aber vergessen, die Datei ins „src-gen-pr“ Verzeichnis zu verschieben: einfach „src-gen-pr“ auf vorhandene ENABLED protected regions scannen.&lt;br/&gt;Wer prüfen möchte, ob ein Entwickler vergessen hat, nach Änderungen eine protected region auf ENABLED zu setzen: eine Checksum einbauen in den default code und eine Komponente programmieren, die vorm Generieren eine entsprechende Prüfung durchführt.&lt;br/&gt;Alles ist möglich - muss natürlich unter dem Gesichtspunkt der generierungs - Performance betrachtet werden.&lt;br/&gt;(Tip: bei Fehlern hilft ggf. die lokale History von Eclipse - es gibt aber derzeit noch einen Bug: der Workflow überschreibt den letzten Eintrag der lokalen History, statt einen neuen hinzuzufügen)&lt;br/&gt;&lt;br/&gt;Ich trage innerhalb einer „ProtectedRegion“ immer einen auffälligen Kommentartext ein:&lt;br/&gt;&lt;br/&gt;Disabled Protected Region:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Enabled Protected Region:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Technische Informationen zur Umsetzung der RedirectVetostrategie&lt;br/&gt;&lt;br/&gt;getestet unter:&lt;br/&gt;	•	Eclipse 3.5M6&lt;br/&gt;	•	openArchitectureWare 4.3.1 (Wer bereits mit den Eclipse Projekten arbeitet, muss nur den Namensraum anpassen)&lt;br/&gt;	•	Apache Commons IO 1.4 (&lt;a href=&quot;http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.commons.io&amp;version=1.4.0&amp;searchType=bundlesBySymbolicName&amp;searchQuery=org.apache.commons.io&quot;&gt;SpringSourceEnterpriseBundleRepository&lt;/a&gt; - (Eclipse Orbit hat nur Version 1.3.2 von 2007)&lt;br/&gt;&lt;br/&gt;Workflow Komponenten&lt;br/&gt;&lt;br/&gt;Workflow Komponente Directory Cleaner (oAW Komponente)&lt;br/&gt;&lt;br/&gt;outlet.src.dir verweist in diesem Falle auf src-gen,&lt;br/&gt;outlet.veto.pr.dir verweist auf veto.&lt;br/&gt;&lt;br/&gt;Workflow Komponente Outlet mit Vetostrategie (Redirect von enabled ProtectedRegions)&lt;br/&gt;&lt;br/&gt;Dieses Outlet wendet eine neue Vetostrategie an - ausserdem wurde die Outlet Klasse überschrieben.&lt;br/&gt;outlet.src.dir verweist auf src-gen,&lt;br/&gt;outlet.src.pr.dir auf src-gen-pr und&lt;br/&gt;outlet.veto.pr.dir auf veto.&lt;br/&gt;&lt;br/&gt;Workflow Komponente „fileReplacer“ (Ersetzen von Dateien in src-gen-pr ?)&lt;br/&gt;&lt;br/&gt;Eine neue Workflow Komponente vergleicht die Dateien im veto Verzeichnis mit den Dateien im src-gen-pr Verzeichnis und ersetzt geänderte.&lt;br/&gt;&lt;br/&gt;Ein kurzer Blick in die neuen Klassen und Interfaces&lt;br/&gt;&lt;br/&gt;Klasse OutletWithVetoRedirection (erweitert oAW Outlet)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Interface VetoRedirectStrategy (erweitert oAW VetoStrategy)&lt;br/&gt;&lt;br/&gt;vetoRedirectSourcePath verweist auf src-gen,&lt;br/&gt;vetoRedirectOutputPath verweist auf veto&lt;br/&gt;&lt;br/&gt;Klasse CondGenVetoRedirectStrategy (implementiert VetoRedirectStrategy)&lt;br/&gt;&lt;br/&gt;hasVeto gibt immer false zurück, da wir ja kein Veto einlegen wie bei den anderen VetoStrategien die Heiko Behrens beschreibt, sondern nur den Ausgabepfad umlenken in das veto Verzeichnis.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Klasse ReplaceVetoRedirectedFiles (erweitert oAW AbstractWorkflowComponent2)&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://commons.apache.org/io/&quot;&gt;Apache Commons IO&lt;/a&gt; macht es sehr leicht, Datei - Inhalte zu vergleichen und in ein anderes Verzeichnis zu kopieren.&lt;br/&gt;outputFile ist eine Datei in veto,&lt;br/&gt;sourceFile die entsprechende Datei in src-gen-pr&lt;br/&gt;&lt;br/&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br/&gt;Wichtige Anmerkung:&lt;br/&gt;Inspiriert zu diesem Blog wurde ich durch den excellenten Artikel von Heiko Behrens: „&lt;a href=&quot;http://www.1160pm.net/2009/04/23/generation-gap-pattern/&quot;&gt;Generation Gap Pattern&lt;/a&gt;“.&lt;br/&gt;&lt;br/&gt;Heiko Behrens gibt konkrete Lösungsmöglichkeiten im Umgang mit dem „&lt;a href=&quot;http://www.research.ibm.com/designpatterns/pubs/gg.html&quot;&gt;Generation Gap Pattern (John Vlissides)&lt;/a&gt;“ beim Einsatz von oAW (&lt;a href=&quot;http://www.openarchitectureware.org/&quot;&gt;openArchitectureWare&lt;/a&gt;) Workflow und Xpand / XTend. Bitte meinen Blogeintrag nicht als Alternative sondern ergänzend zu Heikos Vorschlägen betrachten !&lt;br/&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br/&gt;&lt;br/&gt;Fazit&lt;br/&gt;&lt;br/&gt;Aus meiner Sicht ist die Verwendung von „Protected Areas“ in Verbindung mit „Conditional Generation“ ein in vielen Fällen geeignetes Vorgehen, das die &lt;a href=&quot;http://www.infoq.com/articles/model-driven-dev-best-practices&quot;&gt;Best Practises im Rahmen von MDSD Projekten&lt;/a&gt; nicht verletzt.&lt;br/&gt;&lt;br/&gt;Aber wie immer gilt: „Its Your Choice“ - es hängt vom Projekt ab, was Sinn macht.&lt;br/&gt;&lt;br/&gt;Heiko Behrens hat mehrere Strategien aufgezeigt - wenn man meine ProtectedRegion Strategie dazu ergänzend betrachtet, gibt es sicher für jeden Anwendungsfall das „passende“. &lt;br/&gt;&lt;br/&gt;Es spricht auch nichts dagegen, innerhalb eines grossen Projekts verschiedene (Veto)Strategien beim Generieren von Sourcecode (Artifakten) einzusetzen.&lt;br/&gt;&lt;br/&gt;Ich hoffe, ich konnte einige Anregungen geben - Diskussionen bitte im &lt;a href=&quot;http://ekkes-corner.org/&quot;&gt;englischsprachigen Blog&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>oAW goes Eclipse Modeling</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/5/5_oAW_goes_Eclipse_Modeling.html</link>
      <guid isPermaLink="false">f5a09232-8fbc-4bea-b214-9091f93e340e</guid>
      <pubDate>Tue, 5 May 2009 07:33:29 +0200</pubDate>
      <description>oAW goes Eclipse Modeling&lt;br/&gt;&lt;br/&gt;oAW wurde in den letzten Monaten in Eclipse Projekte integriert, sodass oAW5.0 das erste Mal über Eclipse 3.5 (Galileo) als Bestandteil vom &lt;a href=&quot;http://www.eclipse.org/modeling/&quot;&gt;Eclipse Modeling Projekt&lt;/a&gt; ausgeliefert werden soll:&lt;br/&gt;&lt;br/&gt;	•	oAW Workflow --&gt;&lt;a href=&quot;http://wiki.eclipse.org/Modeling_Workflow_Engine_(MWE)&quot;&gt; Eclipse EMFT Modeling Workflow Engine (MWE)&lt;/a&gt;&lt;br/&gt;	•	oAW Xpand/Xtend --&gt; &lt;a href=&quot;http://www.eclipse.org/modeling/m2t/?project=xpand&quot;&gt;Eclipse M2T Xpand&lt;/a&gt;&lt;br/&gt;	•	oAW Xtext --&gt; &lt;a href=&quot;http://wiki.eclipse.org/Xtext&quot;&gt;Eclipse TMF Xtext&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Beginnend mit Eclipse 3.5 M7 sollte jeder oAW Anwender testen, ob seine oAW Projekte unter Verwendung der Plugins aus Eclipse Modeling fehlerfrei funktionieren und Fehler ggf. per Bugzilla melden.&lt;br/&gt;&lt;br/&gt;Vielleicht wird sich mancher fragen: Wozu denn noch openArchitectureWare, wenn alles unter Eclipse in verschiedenen Projekten des Eclipse Modeling Projects ist ?&lt;br/&gt;&lt;br/&gt;Eclipse Modeling umfasst eine Unmenge an Teilprojekten (siehe &lt;a href=&quot;http://it-republik.de/jaxenter/jax/&quot;&gt;JAX&lt;/a&gt; Beitrag von Jan Köhnlein „&lt;a href=&quot;http://www.slideshare.net/schwurbel/eclipse-modeling-overview&quot;&gt;Eclipse Modeling Overview&lt;/a&gt;“). &lt;br/&gt;&lt;br/&gt;oAW ist eine praxiserprobte und bewährte Zusammenfassung von einigen dieser Projekte zu einer Art Distribution, die es Anwendern erleichtert, MDSD im oAW - Style umzusetzen.&lt;br/&gt;&lt;br/&gt;oAW ist ausserdem eine Community mit viel KnowHow und Support, wenn es um modellgetriebene Entwicklung geht - einfach mal reinschauen ins &lt;a href=&quot;http://www.openarchitectureware.org/forum/?menu=Forum&quot;&gt;Forum&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Bitte testet also Workflow (Eclipse MWE), Xpand (Eclipse M2T) und Xtext (Eclipse TMF) - und bleibt dem &lt;a href=&quot;http://openarchitectureware.org/&quot;&gt;oAW&lt;/a&gt; Projekt treu ;-)&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>OSGI Enterprise Applications: Monster Bundles from 3rdParty</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/4/30_OSGI_Enterprise_Applications__Monster_Bundles_from_3rdParty.html</link>
      <guid isPermaLink="false">ae5c1b89-92bf-412b-bf5c-e4f22b3520b3</guid>
      <pubDate>Thu, 30 Apr 2009 11:16:29 +0200</pubDate>
      <description>Die (&lt;a href=&quot;http://www.osgi.org/Main/HomePage&quot;&gt;OSGI&lt;/a&gt;) - Welt könnte so schön sein, alles brave OSGI Bürger:&lt;br/&gt;&lt;br/&gt;	•	 ein JAR file == ein Bundle&lt;br/&gt;	•	 import-package genutzt für allgemeine Abhängigkeiten&lt;br/&gt;	•	required-bundles wenn überhaupt nur  im eigenen Namensraum&lt;br/&gt;	•	 ...&lt;br/&gt;&lt;br/&gt;Wer aber OSGI Enterprise Businessanwendungen baut, wird auch 3rdParty Bundles / -Projekte / -Frameworks mit einzugliedern haben.&lt;br/&gt;&lt;br/&gt;Und da kann es passieren, dass es auf den ersten Blick sehr gut aussieht: ein paar Bundles, sauber strukturiert, Dependencies sinnvoll, aber..... warum ist das core Bundle so groß ?&lt;br/&gt;&lt;br/&gt;Hier ist die Auflösung „&lt;a href=&quot;http://vimeo.com/4389585&quot;&gt;looking into 3rdParty OSGI bundles&lt;/a&gt;“ - vielleicht sind die Composite Bundles von OSGI R4.2 (&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/eclipse-dev/msg08483.html&quot;&gt;hier&lt;/a&gt; und &lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=534&quot;&gt;hier&lt;/a&gt; und Richard Halls &lt;a href=&quot;http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax&amp;id=10109&quot;&gt;Session&lt;/a&gt; at JAX09) eine Hilfe, so etwas zu kapseln ? Ich werde berichten...&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>JAX09 - HowTo build an OSGI EJB3 Server - Slides online</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/4/29_JAX09_-_HowTo_build_an_OSGI_EJB3_Server.html</link>
      <guid isPermaLink="false">8150caf6-fb80-40b2-a1d4-7581088b577e</guid>
      <pubDate>Wed, 29 Apr 2009 16:35:57 +0200</pubDate>
      <description>Letzte Woche war die &lt;a href=&quot;http://it-republik.de/jaxenter/jax/&quot;&gt;JAX&lt;/a&gt; 2009 in Mainz - es war wieder eine sehr interessante Veranstaltung. Das Wichtigste sind für mich die persönlichen Kontakte und Diskussionen bis in die Nacht hinein.&lt;br/&gt;&lt;br/&gt;Am Freitag während des &lt;a href=&quot;http://it-republik.de/jaxenter/jax/sessions/?tid=1177&quot;&gt;OSGI Experts Day&lt;/a&gt; konnte ich einen Überblick geben über meinen OSGI EJB3 Server.&lt;br/&gt;&lt;br/&gt;	•	&lt;a href=&quot;http://eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; als IDE und Platform für RCP und Server&lt;br/&gt;	•	&lt;a href=&quot;http://www.osgi.org/Main/HomePage&quot;&gt;OSGI&lt;/a&gt; - &lt;a href=&quot;http://www.eclipse.org/equinox-portal/&quot;&gt;Equinox&lt;/a&gt;&lt;br/&gt;	•	Eclipse &lt;a href=&quot;http://www.eclipse.org/pde/&quot;&gt;PDE&lt;/a&gt; (OSGI Bundle Tooling)&lt;br/&gt;	•	Eclipse &lt;a href=&quot;http://www.eclipse.org/riena/&quot;&gt;Riena&lt;/a&gt; (Remoting, UI)&lt;br/&gt;	•	&lt;a href=&quot;http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome&quot;&gt;EasyBeans&lt;/a&gt; (EJB3 OSGI Bundles)&lt;br/&gt;	•	&lt;a href=&quot;http://drools.org/index.html&quot;&gt;Drools&lt;/a&gt; (Regelmaschine, Business-Prozessfluss)&lt;br/&gt;	•	&lt;a href=&quot;http://redview.org/&quot;&gt;redView&lt;/a&gt; (Riena EMF Dynamic Views)&lt;br/&gt;	•	&lt;a href=&quot;http://open-erp-ware.org/&quot;&gt;open-erp-ware&lt;/a&gt; (OSGI - ERP - Enterprise Application)&lt;br/&gt;	•	Model-Driven Development (oAW - &lt;a href=&quot;http://www.openarchitectureware.org/&quot;&gt;OpenArchitectureWare&lt;/a&gt; XPand, XTend, Xtext, Workflow)&lt;br/&gt;	•	und mehr...&lt;br/&gt;&lt;br/&gt;Die Slides können angesehen werden bei:&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.slideshare.net/ekkescorner/howto-build-an-osgi-ejb3-server-1362873&quot;&gt;SlideShare&lt;/a&gt; (ohne die eingebetteten Screencasts)&lt;br/&gt;&lt;a href=&quot;http://www.vimeo.com/4392331&quot;&gt;Vimeo&lt;/a&gt; (als Video inkl. der Quicktime Bildschirmfilme)&lt;br/&gt;&lt;br/&gt;Auf meine Session und die Diskussionen werde ich in den nächsten Tagen noch in weiteren Episoden meines VideoPodcasts bei &lt;a href=&quot;http://ekkes-corner-tv.org/&quot;&gt;ekkes - corner - tv.org&lt;/a&gt; detailliert eingehen.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>redView - dynamic Views for Business Applications</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/4/8_redView_-_dynamic_UI_in_Business_Applications.html</link>
      <guid isPermaLink="false">6749aab3-3126-44db-8c57-c1db8a44c051</guid>
      <pubDate>Wed, 8 Apr 2009 21:01:17 +0200</pubDate>
      <description>Auf der diesjährigen &lt;a href=&quot;http://www.eclipsecon.org/2009/&quot;&gt;EclipseCon&lt;/a&gt; in Santa Clara konnte ich das erste Mal das Open Source Projekt „ &lt;a href=&quot;http://redview.org/&quot;&gt;redView&lt;/a&gt; “ vorstellen, das von Florian Pirchner und mir gestartet wurde.&lt;br/&gt;&lt;br/&gt;Die Session wurde ohne die üblichen „Folien-zum-Mitlesen“ gestaltet. Das Buch „Zen oder die Kunst der Präsentation“ hat mir einige Anregungen gegeben:&lt;br/&gt;&lt;br/&gt;Wenn aber eine Session im ZEN - Style präsentiert wird, dann kann man die Slides hinterher nicht einfach zur Verfügung stellen, was ja auch nicht Sinn einer solchen Präsentation ist. &lt;br/&gt;&lt;br/&gt;Die ausführlichen Informationen zur Session gibt es parallel in einem extra Dokument. &lt;br/&gt;&lt;br/&gt;Diese technischen Details gibt es in Kürze auf der &lt;a href=&quot;http://redview.org/&quot;&gt;redView&lt;/a&gt; Seite zum Download.&lt;br/&gt;&lt;br/&gt;Wer jetzt aber dennoch wissen möchte, worüber ich auf der EclipseCon gesprochen habe, der kann sich einen Video Podcast ansehen:&lt;br/&gt;&lt;br/&gt;ekkes - corner - tv gestartet&lt;br/&gt;&lt;br/&gt;Ergänzend zu meinen Blogs in deutsch und englisch wird es jetzt auch noch regelmäßig ergänzend oder begleitend dazu einen englischen Video Podcast geben bei &lt;a href=&quot;http://ekkes-corner-tv.org/&quot;&gt;ekkes - corner - tv.org&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Ich werde in diesen Video Podcasts berichten und live präsentieren aus den Bereichen:&lt;br/&gt;&lt;br/&gt;	•	Eclipse als IDE und Platform für RCP und Server&lt;br/&gt;	•	OSGI - Equinox&lt;br/&gt;	•	Eclipse PDE (OSGI Bundle Tooling)&lt;br/&gt;	•	Eclipse Riena (Remoting, UI)&lt;br/&gt;	•	EasyBeans (EJB3 OSGI Bundles)&lt;br/&gt;	•	Drools (Regelmaschine, Business-Prozessfluss)&lt;br/&gt;	•	redView (Riena EMF Dynamic Views)&lt;br/&gt;	•	open-erp-ware (OSGI - ERP - Enterprise Application)&lt;br/&gt;	•	Model-Driven Development (oAW - OpenArchitectureWare XPand, XTend, Xtext, Workflow)&lt;br/&gt;	•	und mehr...&lt;br/&gt;&lt;br/&gt;Wer den Video - Podcast abonnieren möchte: einfach in den iTunes Store gehen und nach „ekkes-corner“ suchen und abonnieren. Es gibt zwei Formate: für &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=311645152&quot;&gt;iPod/iPhone&lt;/a&gt; und für &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=311645441&quot;&gt;Desktop/AppleTV&lt;/a&gt;). Alternativ zum iTunes Store direkt im Web lesen: &lt;a href=&quot;http://ekkes-corner-tv.org/&quot;&gt;ekkes-corner-tv.org&lt;/a&gt; oder von dort den RSS Feed abonnieren.&lt;br/&gt;&lt;br/&gt;Die erste Episode befasst sich mit der &lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=391&quot;&gt;redView Session&lt;/a&gt; von der EclipseCon.&lt;br/&gt;&lt;br/&gt;Die EclipseCon war wie immer sehr anstrengend (kurze Nächte) - hat aber auch Spaß gemacht, all die Freunde zu treffen und viel Neues zu lernen.&lt;br/&gt;&lt;br/&gt;Die nächsten Monate werden wieder sehr arbeitsintensiv: &lt;br/&gt;&lt;br/&gt;	•	redView wird Anfang Mai veröffentlicht&lt;br/&gt;	•	der OSGI - Equinox - Server muss unter Galileo laufen&lt;br/&gt;	•	zum Sommer geht die ERP Enterprise App in den Livebetrieb &lt;br/&gt;&lt;br/&gt;Ach ja: und in diesem Monat ist die JAX in Mainz, wo ich am &lt;a href=&quot;http://it-republik.de/jaxenter/jax/sessions/?tid=1177&quot;&gt;OSGI Experts Day&lt;/a&gt; sprechen werde.&lt;br/&gt;&lt;br/&gt;Es wird einige Blogs und Video Podcasts geben... stay tuned...&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>Mit RCP Views UML Diagramme betrachten</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/3/19_Mit_RCP_Views_UML_Diagramme_betrachten.html</link>
      <guid isPermaLink="false">56a6ad81-3674-4ac3-ab95-35c62e7a0801</guid>
      <pubDate>Thu, 19 Mar 2009 18:08:50 +0100</pubDate>
      <description>Wer kennt das nicht ? Als Softwarearchitekt steht man stolz mit UML - Diagrammen beim Business - Anwender - und der versteht das nicht, kann keine Abhängigkeiten, 0..1, 0..* - Beziehungen, Wertobjekte, Vererbungen mit seinen praktischen Anforderungen zusammenbringen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Was wäre, wenn man dem Businessanwender auf Knopfdruck anstelle des UML Diagramms automatisch RCP - Views generieren könnte ? ...wo man auch die versteckten Kleinigkeiten sofort erkennt: ein column-length -Wert von &gt; 30 wird z.B. als mehrzeiliges Feld dargestellt, Enumerations werden mit den einzelnen Literalwerten dargestellt, Indexfelder sind als required markiert usw.&lt;br/&gt;&lt;br/&gt;Utopisch ?&lt;br/&gt;&lt;br/&gt;So kann es aussehen:&lt;br/&gt;&lt;br/&gt;aus UML Modell generiert mit &lt;a href=&quot;http://www.openarchitectureware.org/&quot;&gt;openArchitectureWare&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;aus EMF Modell dynamisch angezeigt mit &lt;a href=&quot;http://redview.org/&quot;&gt;RedView&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;(Hinweis: die ersten 3 Karteireiter zeigen 0..1, bzw. 1..1 Beziehungen, die letzten beiden Karteireiter enthalten eine Table und sind 0..* oder 1..* Beziehungen)&lt;br/&gt;&lt;br/&gt;Neugierig geworden ?&lt;br/&gt;&lt;br/&gt;Dann am Donnerstag um 14:30, Raum 206, die Session&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=391&quot;&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;auf der &lt;a href=&quot;http://www.eclipsecon.org/2009/&quot;&gt;EclipseCon&lt;/a&gt; besuchen !&lt;br/&gt;&lt;br/&gt;Oder wer mehr über das damit zusammenhängende OSGI - Equinox - RIena - Easybeans Serverprojekt erfahren möchte, sollte auf die JAX09 zum &lt;a href=&quot;http://it-republik.de/jaxenter/jax/sessions/?tid=1177&quot;&gt;OSGI ExpertsDay &lt;/a&gt;kommen.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>Bücher und Konferenzen für Eclipse Plugin Entwickler</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/1/29_B%C3%BCcher_und_Konferenzen_f%C3%BCr_Eclipse_Plugin_Entwickler.html</link>
      <guid isPermaLink="false">b637dc6b-00dd-457b-82b6-f6919262656e</guid>
      <pubDate>Thu, 29 Jan 2009 14:26:23 +0100</pubDate>
      <description>Das sind meine Top 3 von aktuellen Fachbüchern zur Entwicklung von Eclipse Plugins im Kontext von modellgetriebener Entwicklung und OSGI...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;	•	OSGI Service Compendium&lt;br/&gt;	•	EMF - Eclipse Modeling Framework&lt;br/&gt;	•	eclipse Plug-Ins&lt;br/&gt;&lt;br/&gt;... jetzt heisst es nur noch warten auf das neue RCP Buch und das Equinox Buch ;-)&lt;br/&gt;&lt;br/&gt;Gestern habe ich in München Eric Clayberg und Dan Rubel getroffen und von Ihnen die neue Ausgabe ihres „eclipse Plug-ins“ Buches bekommen. Da ich aber nicht warten konnte, hatte ich das Plug-ins Buch schon vorher gekauft. Jetzt hat Florian Pirchner Glück und er bekommt eins ab - kann er sicher gut für die redView (Riena EMF Dynamic View) - Entwicklung gebrauchen.&lt;br/&gt;&lt;br/&gt;Es gibt gute Nachrichten für UI Entwickler, die Riena Ridgets verwenden: die Unterstützung durch den SWT Designer wird besser werden, wie mir Eric versichert hat.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; +&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Übrigens: Wer es noch nicht weiss - Riena hat die Freigabe für die Version 1.0 bekommen - Glückwunsch.&lt;br/&gt;&lt;br/&gt;Wir werden ebenfalls versuchen, dynamische SWT Components, die von redView erzeugt werden, im SWTDesigner einfügen zu können.&lt;br/&gt;&lt;br/&gt;Dann wird es möglich sein, komplexe Fenster zu bauen, in die dynamische Komponenten eingesetzt werden - zB immer wiederkehrende Daten wie Adressfelder. ... natürlich inklusive Databinding, Riena Markers und mehr.&lt;br/&gt;&lt;br/&gt;Wer zur &lt;a href=&quot;http://www.eclipsecon.org/2009/&quot;&gt;EclipseCon&lt;/a&gt; fährt, sollte den Vortrag über redView nicht verpassen:&lt;br/&gt;&lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=391&quot;&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;Und wer nicht zur EclipseCON kann oder etwas mehr wissen möchte, über das Gesamtprojekt, der kann sich meinen Talk auf der &lt;a href=&quot;http://it-republik.de/jaxenter/jax/&quot;&gt;JAX 09&lt;/a&gt; / &lt;a href=&quot;http://it-republik.de/jaxenter/eclipseforumeurope/&quot;&gt;Eclipse Forum Europe 09&lt;/a&gt; am &lt;a href=&quot;http://it-republik.de/jaxenter/jax/sessions/?tid=1177&quot;&gt;OSGI Experts Day&lt;/a&gt; ansehen:&lt;br/&gt;&lt;a href=&quot;http://it-republik.de/konferenzen/efe/sessions/efe/speaker/#633&quot;&gt;Wir bauen uns einen OSGI Enterprise EJB3 Server&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>UserInterface in OSGI Enterprise Anwendungen</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2009/1/21_UserInterface_in_OSGI_Enterprise_Anwendungen.html</link>
      <guid isPermaLink="false">f14d4acf-4e72-48e4-bd1a-360e5fb05026</guid>
      <pubDate>Wed, 21 Jan 2009 10:52:33 +0100</pubDate>
      <description>Weihnachten ist vorbei...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;... und es wird Zeit, mal wieder etwas zu veröffentlichen. Die letzten Wochen waren geprägt von harter und intensiver Arbeit, um die OSGI Enterprise Anwendung voranzubringen. Derzeit liegt der Schwerpunkt auf der Ausgestaltung der Benutzeroberfläche (GUI).&lt;br/&gt;&lt;br/&gt;Einen Teil der GUI - Entwicklung werde ich auf der EclipseCon 2009 präsentieren, zusammen mit Florian, dem Plug-In Entwickler des redView - Designers. (redView = Riena - EMF - Dynamic Views)&lt;br/&gt;&lt;br/&gt;Die Idee zu redView wurde vor ein paar Monaten geboren, als ich Florian die Probleme mit einer GUI für eine umfangreiche ERP Anwendung schilderte. Eine Enterprise ERP Anwendung mit hunderten von Entities und einem hohen Anspruch an den Bedienungskomfort, muss mit einem GUI Designer erstellt werden.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Beim GUI Designer ist meine Wahl auf den &lt;a href=&quot;http://www.instantiations.com/windowbuilder/swtdesigner/&quot;&gt;SWTDesigner von Instantiations&lt;/a&gt; gefallen - aus meiner Sicht ein hervorragendes Werkzeug.&lt;br/&gt;&lt;br/&gt;Eine ERP Enterprise Anwendung hat aber neben hoch spezialisierten Fenstern immer auch hunderte von Standard Fenstern, deren Aufbau ähnlich ist und sich zu einem grossen Teil von den darunterliegenden Datenmodellen ableiten lässt. &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Da meine ERP Anwendung eh modellgetrieben ist (unter Einsatz von &lt;a href=&quot;http://www.openarchitectureware.org/&quot;&gt;openArchitectureWare&lt;/a&gt;) liegt natürlich die Idee nahe, den Javacode zumindest der Standard Views zu generieren.&lt;br/&gt;&lt;br/&gt;Aber wie das so ist mit generierten Fenstern in Business - Anwendungen: irgendwas soll dann doch wieder anders dargestellt werden. Wenn man dann diese Fenster mit dem SWTDesigner anpasst, ändert sich der Javacode und es kann nicht mehr neu generiert werden, d.h. der Pflegeaufwand bei Erweiterungen und Anpassungen des Modells ist groß. Aber immerhin: es ist eine gute Idee, sich Fenster für den ersten Start mit dem SWTDesigner vorzugenerieren, dann entfällt zumindest ein Teil der Arbeit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Bei der Suche nach Konzepten, die die GUI - Entwicklung vereinfachen bin ich schon vor einiger Zeit auf&lt;a href=&quot;http://www.eclipse.org/riena/&quot;&gt; Eclipse Riena&lt;/a&gt; gestossen. Riena wird in meinem Enterprise Projekt bereits für den remote Zugriff auf den Server genutzt. (Riena Remote OSGI Services)&lt;br/&gt;&lt;br/&gt;Riena hat es ausserdem geschafft, die GUI Entwicklung  für den Programmierer zu vereinfachen, indem die teilweise komplexe Programmierung von SWT Widgets durch Riena Ridgets gekapselt wird, ohne aber die Flexibilität aufzugeben, bei Bedarf auf alles drunterliegende zugreifen zu können.&lt;br/&gt;&lt;br/&gt;Riena Ridgets enthalten darüber hinaus eine saubere Trennung von UI und Controller und eine vereinfachte Programmierung des Eclipse Databinding. &lt;br/&gt;&lt;br/&gt;In Businessanwendungen unerlässlich sind Entscheidungen wie:&lt;br/&gt;&lt;br/&gt;	•	 soll dieses Element gezeigt werden abhängig vom Usecase oder Daten ?&lt;br/&gt;	•	 ist dieses Element ein Mussfeld (required ?)&lt;br/&gt;	•	 ist es ein read-only Feld ?&lt;br/&gt;	•	 gibt es Validierungsregeln auf Feldebene (Telefonnummer, BLZ, email, von-bis, Datum, ...)&lt;br/&gt;&lt;br/&gt;Riena bietet das Konzept der Marker und Validierungen und UI Filter, das die Programmierung solch komplexer Anforderungen vereinfacht und ausserdem dafür sorgt, dass es in der GUI durchgängig identisch dargestellt wird.&lt;br/&gt;&lt;br/&gt;Ein grosser Teil der Voreinstellungen für Marker und Validierungen lässt sich ebenfalls aus dem Entity - Datenmodell oder den Businessprozess - Modellen ableiten und generieren. (z.B. Attribute, die als Businesskey oder Index markiert sind, werden Mussfelder)&lt;br/&gt;&lt;br/&gt;Nun ergibt sich beim Einsatz von Riena aber das Problem, dass sich die GUI im SWTDesigner nicht mehr so einfach bearbeiten lässt, da der Codegenerator vom SWT Designer das Riena - Konzept der Trennung zwischen Controller und UI noch nicht &amp;quot;kennt&amp;quot; - aber es gibt hoffentlich eine Lösung in Zukunft, um die Integration zu verbessern.&lt;br/&gt;&lt;br/&gt;Riena bietet auch ein komplettes UI mit eigenem LookAndFeel, Navigation und sehr schön gestalteten Perspektiven an, wobei eine Perspektive einer Subapplication entspricht. &lt;br/&gt;&lt;br/&gt;Die Riena Oberfläche ist sehr aufgeräumt, leicht zu bedienen und verwirrt einen Businessanwender nicht mit den vielen Funktionalitäten, die Eclipse RCP im Standard enthält. Aber Riena hat jeweils nur eine View an einer festen Position und es gibt viele Szenarien in einer ERP Anwendung, wo mehrere Fenster geöffnet sein müssen mit Drag and Drop zwischen den Fenstern usw. Da bin ich gespannt, was die nächsten Monate bringen, ob ma1n diese Anforderungen miteinander verbinden kann.&lt;br/&gt;&lt;br/&gt;Aber all das löst immer noch nicht das Dilemma des Fensterdesigns in modellgetriebenen Anwendungen: was lässt sich generieren, ohne Flexibilität bei der Gestaltung der Fenster zu verlieren ?&lt;br/&gt;&lt;br/&gt;Damit bin ich wieder zurück bei meinen Diskussionen mit Florian im Herbst 2008, wobei unsere Vision entstand: &lt;br/&gt;&lt;br/&gt;Was wäre denn, wenn die GUI all den Komfort von Riena beinhaltet und dynamisch erzeugt wird zur Laufzeit aufgrund eines darunterliegenden Metamodells auf Basis von EMF Ecore ?&lt;br/&gt;&lt;br/&gt;... und was wäre, wenn diese EMF Modelle der einzelnen Views selbst generiert werden durch openArchitectureWare aus den UML Daten- und Businessprozess - Modellen ?&lt;br/&gt;&lt;br/&gt;... und dann einen grafischen Designer, mit dem der Businessanwender oder der Businessprogrammierer diese Views verändern kann ? (mit Drag and Drop die Reihenfolge / Position verändern, Validierungsregeln hinzufügen, (Riena) Marker hinzufügen / ändern, Fonts und Farben anpassen....)&lt;br/&gt;&lt;br/&gt;... und dann müssten diese Änderungen, die im EMF Modell der View gespeichert sind, natürlich bei der nächsten Generierung erhalten bleiben, wenn sich im UML Modell etwas ändert.&lt;br/&gt;&lt;br/&gt;Im Oktober war das noch eine Vision - jetzt wissen wir, dass es funktioniert (für das ERP Projekt werden bereits hunderte an Views aus dem UML Modell heraus generiert) und spätestens zur eclipseCon 2009 wird es präsentiert:&lt;br/&gt;&lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=391&quot;&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Eine Entity im UML Modell&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;oAW Xtend erzeugt EMF Elemente aus Informationen aus UML Persistenz Profile&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;redView Designer mit generierten Elementen - das gelb hinterlegte Eingabefeld kommt vom Riena Marker „required“&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Die EMF Outline View des Mitarbeiters mit generierten Elementen&lt;br/&gt;&lt;br/&gt;Die dazu gehörige Properties View.&lt;br/&gt;&lt;br/&gt;Es ist noch einiges an Arbeit, um alle Aspekte des Databindings, der Internationalisierung, Plattformunabhängigkeit (derzeit OSX und Windows getestet), sowie Styles und Themes umzusetzen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Es waren harte Wochen und kurze Nächte, aber es macht Spass mit Flo zu arbeiten und eine Vision umzusetzen.&lt;br/&gt;&lt;br/&gt;Jetzt wird die GUI in der ERP Enterprise Anwendung wie folgt erstellt:&lt;br/&gt;&lt;br/&gt;	•	 Standardfenster werden als EMF Modelle mit oAW generiert&lt;br/&gt;	•	 redView erzeugt dynamische Views aufgrund von EMF Modellen&lt;br/&gt;	•	 Spezialfenster können mit oAW vorgeneriert werden&lt;br/&gt;	•	 Standardfenster werden mit dem redView Designer bearbeitet&lt;br/&gt;	•	 Spezialfenster werden mit dem SWTDesigner bearbeitet&lt;br/&gt;	•	 Riena Ridgets mit Markern und Validierungen werden eingesetzt&lt;br/&gt;&lt;br/&gt;Nachdem ich die letzten Jahre EMF nur indirekt benutzt habe und sich meine Generierungen mit oAW auf UML Modelle und Profiles beschränkten, bin ich jetzt auch bei EMF gelandet wie so viele andere auch. Die Flexibilität von EMF und die gute Integration in oAW begeistern mich - es war sehr einfach, UML- und EMF - Modelle gemeinsam zu nutzen.&lt;br/&gt;&lt;br/&gt;Ich werde darüber noch detailliert berichten. Aufgrund der Komplexität wird hiermit eine weitere Blogserie gestartet &amp;quot;UI in OSGI Enterprise Anwendungen&amp;quot;, wo ich natürlich auch auf einen Vergleich mit anderen Lösungen eingehe, bzw. zeige wie diese integriert werden können.&lt;br/&gt;&lt;br/&gt;Es bleibt spannend - stay tuned.&lt;br/&gt;&lt;br/&gt;Und: die anderen Blogserien übers Logging, Server, Declarative Services gehen auch weiter - es gehört ja alles zusammen.&lt;br/&gt;&lt;br/&gt;ekke </description>
    </item>
    <item>
      <title>EclipseCon 2009 Riena - EMF - oAW and more</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/12/18_EclipseCon_2009_Riena_-_EMF_-_oAW_and_more.html</link>
      <guid isPermaLink="false">0c7a543f-2ee1-44ae-8d87-eb30f551c09c</guid>
      <pubDate>Thu, 18 Dec 2008 11:57:42 +0100</pubDate>
      <description>Dieses Jahr werde ich die EclipseCon nicht nur als Besucher erleben, sondern auch einen Vortrag halten: &lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.eclipsecon.org/2009/sessions?id=391&quot;&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Dies war die zweite gute Nachricht seit der W-JAX, wo ich „Member des oAW Teams“ wurde.&lt;br/&gt;&lt;br/&gt;Ich freue mich schon und werde auch bis dahin im Blog noch einiges berichten über redView (Riena - EMF - Dynamic View), das Teil eines modellgetriebenen OSGI Client - Server - Systems ist und unter EPL als Open Source freigegeben wird.&lt;br/&gt;&lt;br/&gt;Diese Woche war eine Update - Woche: OSX 10.5.6, MagicDraw 16.0, openArchitectureWare 4.3.1RC3 und RC4, Riena M6, EasyBeans neue Snapshots.&lt;br/&gt;&lt;br/&gt;Nachdem das EasyBeans Team einige Erweiterungen für mich vorgenommen hat (zusätzliche Properties für Declarative Services) werde ich auch weiter berichten können über Equinox Declarative Services und den OSGI Enterprise Server.&lt;br/&gt;&lt;br/&gt;stay tuned...&lt;br/&gt;&lt;br/&gt;</description>
    </item>
    <item>
      <title>Logging in OSGI Enterprise Anwendungen, Teil 6</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/12/10_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_6.html</link>
      <guid isPermaLink="false">534bc184-04fb-4936-9af4-f59fc2f0c7ce</guid>
      <pubDate>Wed, 10 Dec 2008 15:02:11 +0100</pubDate>
      <description>In diesem (sechsten) Teil meiner Blog - Serie &amp;quot;Logging in OSGI Enterprise Applications&amp;quot; geht es um das Zusammenspiel von &lt;a href=&quot;http://logback.qos.ch/&quot;&gt;LOGBack&lt;/a&gt; / &lt;a href=&quot;http://www.slf4j.org/&quot;&gt;SLF4J&lt;/a&gt; mit openArchitectureWare.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Die letzten Beiträge aus dieser Blogserie befassten sich alle mit der Runtime einer OSGI Enterprise Application. Das Client - Server - Projekt ist modellgetrieben auf der Basis von Eclipse Modeling: EMF, UML2 und als Herzstück openArchitectureWare. &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Der MDSD - Aspekt der Anwendung wird in einer anderen Blogserie betrachtet.&lt;br/&gt;&lt;br/&gt;Hier geht es ums Logging, wobei wir alles über SLF4J / LogBack umsetzen, wie in den vorherigen Beiträgen erläutert.&lt;br/&gt;&lt;br/&gt;openArchitectureWare (oAW) in Target Platforms&lt;br/&gt;&lt;br/&gt;Wer oAW in einer Target Platform konfiguriert und gleichzeitig als Logging Framework SLF4J mit den Bridges zu Commons Logging und Log4J einsetzt, bekommt ein Problem, da in vielen oAW - Bundles die Dependency zu Logging Bundles nicht über Import-Package sondern als Require-Bundle umgesetzt ist.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Es ist bereits ein &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=257828&quot;&gt;Bugzilla&lt;/a&gt; eröffnet, damit die Dependencies zu „common“ Bundles mit Import - Package gelöst werden, um flexibler zu sein.&lt;br/&gt;&lt;br/&gt;Wer es jetzt benötigt, kann das mit PDE - Hilfe schnell erledigen: Bundles in den Workspace holen, Dependencies anpassen, Bundle neu als Plug-In exportieren.&lt;br/&gt;&lt;br/&gt;openArchitectureWare (oAW) Workflows&lt;br/&gt;&lt;br/&gt;oAW Workflows haben einen eigenen Launcher (Run Configurations | oAW Workflow) und wir müssen den Classpath anpassen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Wir clicken auf User Entries und dann Add Projects...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;...wählen dann unsere Logging - Projekte aus&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;...und speichern die Änderungen mit Apply.&lt;br/&gt;&lt;br/&gt;Im Projekt, das den oAW Workflow startet, muss die logback.xml (oder logback-test.xml) enthalten sein. In dieser Datei konfigurieren wir das Loggingverhalten des Workflows - egal ob Lognachrichten über Log4J, Commons-Logging oder OSGI LogServices erfolgen.&lt;br/&gt;&lt;br/&gt;Zur Kontrolle starten wir den Workflow mit &amp;lt;configuration debug=&amp;quot;true&amp;quot;&gt; in der logback.xml.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Wenn alles korrekt konfiguriert ist, dann erhalten wir in der Konsole zuerst die logback - Konfiguration aufgelistet, bevor der Workflow startet und alle Logausgaben gehen wie konfiguriert auf unsere Appender (Console, Socket, usw)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;	•	 Teil 1:&lt;a href=&quot;Eintr%C3%A4ge/2008/9/24_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_1.html&quot;&gt; Ein Überblick&lt;/a&gt;&lt;br/&gt;	•	 Teil 2: &lt;a href=&quot;Eintr%C3%A4ge/2008/10/3_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_2.html&quot;&gt;Alle Log-Ereignisse aus &amp;quot;klassischen&amp;quot; Logging - Frameworks einsammeln&lt;/a&gt;&lt;br/&gt;	•	 Teil 3: &lt;a href=&quot;Eintr%C3%A4ge/2008/10/11_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_3.html&quot;&gt;Alle Log-Ereignisse aus OSGI Log Services einsammeln&lt;/a&gt;&lt;br/&gt;	•	 Teil 4: &lt;a href=&quot;Eintr%C3%A4ge/2008/10/19_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_4.html&quot;&gt;Logging innerhalb einer OSGI Enterprise Anwendung starten&lt;/a&gt;&lt;br/&gt;	•	 Teil 5: &lt;a href=&quot;Eintr%C3%A4ge/2008/10/31_Logging_in_OSGI_Enterprise_Anwendungen,_Teil_5.html&quot;&gt;Konfiguration von LOGBack beim Einsatz in OSGI Enterprise Anwendungen&lt;/a&gt;&lt;br/&gt;	•	 Teil 6: Logging und openArchitectureWare Workflows&lt;br/&gt;	•	 Teil 7: ... folgt (Stay tuned...)&lt;br/&gt;&lt;br/&gt;Im Zusammenhang ebenfalls interessant meine früheren Blogs zum Thema Logging und OSGI:&lt;br/&gt;&lt;br/&gt;	•	&lt;a href=&quot;Eintr%C3%A4ge/2008/7/18_Logging_%28Riena_-_EasyBeans_-_Equinox%29_reloaded.html&quot;&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;br/&gt;	•	&lt;a href=&quot;Eintr%C3%A4ge/2008/6/15_Catch-22_Logging_in_OSGI_Umgebungen.html&quot;&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Diskussionen zu diesem Blog bitte im englischen Blog &lt;a href=&quot;http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_31.html&quot;&gt;hier&lt;/a&gt;.&lt;br/&gt;</description>
    </item>
    <item>
      <title>Comparing Files And Folders After Codegeneration</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/12/10_Renaming_and_Comparing_Files_And_Folders.html</link>
      <guid isPermaLink="false">04e13741-4d1f-45d1-8a9f-6869c0a575c5</guid>
      <pubDate>Wed, 10 Dec 2008 07:44:17 +0100</pubDate>
      <description>Auch wenn die Möglichkeiten innerhalb von Eclipse sehr gut sind, wenn es darum geht, Dateien umzubennen oder Dateien zu vergleichen, so benötige ich auch externe Tools:&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;Eintr%C3%A4ge/2008/9/11_PDE_Target_Platform_-_Rename_Bundles_%5BOSX%5D.html&quot;&gt;Vor einiger Zeit&lt;/a&gt; hatte ich beschrieben, wie man unter OSX mit dem &lt;a href=&quot;http://www.versiontracker.com/dyn/moreinfo/macosx/31207&quot;&gt;NameChanger&lt;/a&gt; (Freeware) auf einfache Weise Dateien umbenennen kann, die z.B. nicht wie Eclipse Bundles mit name_version benannt sind.&lt;br/&gt;&lt;br/&gt;Für die Erstellung von Locations meiner Target Plattformen benötige ich ein Tool, das es mir erlaubt eindeutige Sets von Dateien (Bundles) zu erzeugen. In meinen Blogeintrag „&lt;a href=&quot;Eintr%C3%A4ge/2008/9/11_PDE_Target_Platform_-_Avoid_Duplicate_Bundles_%5BOSX%5D.html&quot;&gt;Avoid Duplicate Bundles&lt;/a&gt;“ habe ich den Einsatz von FileMerge (unter OSX Bestandteil der XCode Tools) beschrieben.&lt;br/&gt;&lt;br/&gt;Jetzt war ich auf der Suche nach einem intelligenten Tool, das es mir erlaubt festzustellen, ob generierter Code identisch zu einer älteren Version ist. Dabei handelt es sich um generierten Code, der in keinem Sourcecode Repository ist, da er komplett generiert wird. Vor der Generierung werden die entsprechenden Sourcecode - Verzeichnisse gelöscht, daher gibt es auch keine lokale History in Eclipse. &lt;br/&gt;&lt;br/&gt;Während des Testens des &lt;a href=&quot;http://oawbranch.pluginbuilder.org/releases/4.3.1RC2.20081208-2300PRD/&quot;&gt;4.3.1RC2&lt;/a&gt; von &lt;a href=&quot;http://openarchitectureware.org/&quot;&gt;openArchitectureWare&lt;/a&gt; hat es mich interessiert zu wissen, ob der generierte Code identisch ist zur Version 4.3.0.&lt;br/&gt;&lt;br/&gt;Zu beachten ist, dass es einige erlaubte Unterschiede gibt, z.B:&lt;br/&gt;&lt;br/&gt; * generation started at: 9. Dezember 2008 08:04:13 CET&lt;br/&gt;&lt;br/&gt;ist identisch zu Zeilen mit einem anderen Generierungsdatum. FileMerge von OSX war keine grosse Hilfe, da es solche Dateien als unterschiedlich gemeldet hat.&lt;br/&gt;&lt;br/&gt;Nächster Versuch: &lt;a href=&quot;http://www.infinitenexus.com/cf/&quot;&gt;Compare Folders&lt;/a&gt; erlaubt mir, die Grösse der Dateien festzustellen und ob Dateien hinzugefügt oder entfernt wurden.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Aber ich möchte es genauer wissen und habe &lt;a href=&quot;http://www.deltopia.com/&quot;&gt;DeltaWalker&lt;/a&gt; gefunden, das all das ermöglicht, was ich benötige und das beste ist:&lt;br/&gt;&lt;br/&gt;DeltaWalker ist eine Eclipse RCP Anwendung :-)&lt;br/&gt;&lt;br/&gt;...und verfügbar für OSX, Windows, Linux. Und jetzt war es ganz einfach, festzustellen, ob der generierte Code identisch ist:&lt;br/&gt;&lt;br/&gt;Einen Datei - Filter erzeugen, der alle Dateien als identisch ansieht, wo es nur Differenzen in der Codezteile mit dem Generierungsdatum gibt:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Einen Ordner - Filter erzeugen, der die OSX-spezifischen .DS_Store Dateien unterdrückt:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Dann die Verzeichnisse vergleichen:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Alles identisch :-)&lt;br/&gt;&lt;br/&gt;Glückwunsch openArchitectureWare &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;- keine Unterschiede zwischen 4.3.0 und 4.3.1RC2 beim Generieren festgestellt.&lt;br/&gt;&lt;br/&gt;Ohne den Datei - Filter listet DeltaWalker die Unterschiede wie folgt auf:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;...ich vermute, dass DeltaWalker mir noch oft gute Dienste erweisen wird.</description>
    </item>
    <item>
      <title>Properties in Declarative Services und ServiceTracker</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/12/4_Properties_in_Declarative_Services_und_ServiceTracker.html</link>
      <guid isPermaLink="false">42b4a7e0-6b81-4dce-81c4-074fdd52a2e4</guid>
      <pubDate>Thu, 4 Dec 2008 13:12:23 +0100</pubDate>
      <description>Ich habs ja schon in meinem letzten blog &lt;a href=&quot;Eintr%C3%A4ge/2008/12/2_Dependencies_und_Services_in_OSGI_Enterprise_Anwendungen.html&quot;&gt;Dependencies und Services in OSGI Enterprise Anwendungen&lt;/a&gt; vermutet, dass da eine kleine Serie draus wird ;-)&lt;br/&gt;&lt;br/&gt;ServiceTracker vs Declarative Services&lt;br/&gt;&lt;br/&gt;Diesen Punkt habe ich im letzten Beitrag nur kurz angesprochen - hier folgen ein paar weitere Tips beim Umgang mit Properties.&lt;br/&gt;&lt;br/&gt;Der ServiceTracker erhält aufgrund des Filters &lt;br/&gt;&lt;br/&gt;final String filterPool = &amp;quot;(&amp;quot;&lt;br/&gt;	+Constants.OBJECTCLASS&lt;br/&gt;	+ &amp;quot;=&amp;quot;&lt;br/&gt;	+ JDBCPoolComponent.class.getName()&lt;br/&gt;	+&amp;quot;)&amp;quot;;&lt;br/&gt;&lt;br/&gt;Services vom Typ JDBCPoolComponent - uns interessiert das Attribut JndiName:&lt;br/&gt;&lt;br/&gt;private void processDataSources(JDBCPoolComponent service) {&lt;br/&gt;	if (service.getJndiName().equals(&amp;quot;foo_entity_data_source_hsql&amp;quot;)) {&lt;br/&gt;		// do something&lt;br/&gt;	}&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;Jetzt dieUmsetzung mit Declarative Services (equinox.ds): &lt;br/&gt;&lt;br/&gt;In der Referenz der Service Komponente möchten wir feststellen, wenn exakt ein bestimmter JDBCPoolComponent Service verfügbar ist, da wir dann wissen, dass die DataSource bereitsteht. &lt;br/&gt;&lt;br/&gt;Die erste Idee, die Referenz zu deklarieren, könnte sein:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Aber die Referenz wird nicht aufgelöst. Wie finden wir die Ursache heraus ? Dazu prüfen wir zunächst, ob der Filter korrekt ist und das Interface.&lt;br/&gt;&lt;br/&gt;Tip: In der Equinox OSGI Konsole den Filter austesten !&lt;br/&gt;&lt;br/&gt;Wir starten die OSGI Anwendung und geben diesen Befehl in der OSGI Konsole ein:&lt;br/&gt;&lt;br/&gt;services (&amp;amp;(objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)(jndiName=foo_entity_data_source_hsql))&lt;br/&gt;&lt;br/&gt;Es wird kein Service aufgelistet: No registered Services.&lt;br/&gt;&lt;br/&gt;Als nächstes suchen wir nur nach allen Services des Interfaces JDBCPoolComponent: &lt;br/&gt;&lt;br/&gt;services (objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)&lt;br/&gt;&lt;br/&gt;Jetzt werden mehrere Services aufgelistet - darunter unser gesuchter:&lt;br/&gt;&lt;br/&gt;{org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent}={classname=org.ow2.easybeans.component.jdbcpo......, xmlconfig=&amp;lt;?xml v..........iver&amp;quot; jndiName=&amp;quot;foo_entity_data_source_hsql&amp;quot; password=&amp;quot;ea......., service.id=80}&lt;br/&gt;  Registered by bundle: .../easybeans-component-jdbcpool_1.1.0-M3-SNAPSHOT.jar/&lt;br/&gt;&lt;br/&gt;Im aufgelisteten Text entdecken wir auch jndiName=&amp;quot;foo_entity_data_source_hsql&amp;quot;&lt;br/&gt;Sehen wir genauer hin, stellen wir fest, dass dem Property xmlconfig mehrere Informationen zugewiesen sind. Das ist die Lösung:&lt;br/&gt;&lt;br/&gt;services (&amp;amp;(objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)(xmlconfig=*foo_entity_data_source_hsql*))&lt;br/&gt;&lt;br/&gt;Der gesuchte Service wird gefunden und wir können in der Service Komponente die Referenz wie folgt eintragen:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Warum hat der ServiceTracker getJndiName() gefunden, der target Filter aber nicht ?&lt;br/&gt;getJndiName() ist eine Methode des Services JDBCPoolComponent, aber nicht als Property in der Service Registry bekannt ! Target Filter können nicht auf Methoden der Implementierung zugreifen, sondern nur auf Service Properties.&lt;br/&gt;&lt;br/&gt;Hinweis:&lt;br/&gt;Wen die Thematik von OSGI Enterprise Anwendungen interessiert, sei auf meine &lt;a href=&quot;../blog-serien.html&quot;&gt;Blogserien&lt;/a&gt; hingewiesen.&lt;br/&gt;&lt;br/&gt;Ausserdem habe ich einige &lt;a href=&quot;https://www.eclipsecon.org/submissions/2009/search.php?search=ekkehard&quot;&gt;Submissions zur EclipseCon 2009&lt;/a&gt; eingereicht - &lt;br/&gt;Wer meine Erfahrungen live erleben möchte: Kommentare sind willkommen ;-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description>
    </item>
    <item>
      <title>Dependencies und Services in OSGI Enterprise Anwendungen</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/12/2_Dependencies_und_Services_in_OSGI_Enterprise_Anwendungen.html</link>
      <guid isPermaLink="false">a79b7e91-1a4d-4464-8fe1-30bb57567d6f</guid>
      <pubDate>Tue, 2 Dec 2008 15:04:22 +0100</pubDate>
      <description>Das wird wieder eine intensive Woche:&lt;br/&gt;&lt;br/&gt;	•	Umbau meines OSGI Enterprise Servers: Declarative Services anstatt ServiceTracker&lt;br/&gt;	•	&lt;a href=&quot;http://voelterblog.blogspot.com/2008/12/openarchitectureware-431-rc1-available.html&quot;&gt;openArchitectureWare 4.3.1RC1&lt;/a&gt; ist erschienen und muss getestet werden mit meinen Modellierungstemplates&lt;br/&gt;	•	Weitere Tests von Eclipse 3.5M3 durchführen: PDE - Unterstützung für Declarative Services, Cycles in 3rd Party Bundles&lt;br/&gt;	•	Entwicklung von redView (Riena - EMF - Dynamic Views) und Integration in meinen Modellierungsworkflow&lt;br/&gt;&lt;br/&gt;Aber jetzt zum Thema dieses Blogs:&lt;br/&gt;&lt;br/&gt;Dependencies und Services in OSGI Enterprise Anwendungen&lt;br/&gt;&lt;br/&gt;Wer meine Blogserie „HowTo Build an OSGI Enterprise Server“ verfolgt, hat im letzten &lt;a href=&quot;Eintr%C3%A4ge/2008/11/21_HowTo_Build_an_OSGI_Enterprise_Server%3A_EasybeansServiceTracker.html&quot;&gt;Beitrag&lt;/a&gt; gesehen, dass es bei den vielen Abhängigkeiten sehr schwierig wird, das alles mit einem ServiceTracker zu managen. Daher werden die dort definierten Anforderungen alternativ soweit möglich und sinnvoll mit Declarative Services umgesetzt.&lt;br/&gt;&lt;br/&gt;PDE Tooling&lt;br/&gt;&lt;br/&gt;Das erste, was sofort beim Arbeiten mit Declarative Services auffällt, ist das fehlende Tooling: wir müssen die Service - Component in einer XML Datei beschreiben:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;... und einen Verweis auf die Service Komponenten in der MANIFEST.MF eintragen:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Ab Eclipse 3.5 wird dies besser: PDE Tooling unterstützt Declarative Services :-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Managing Dependencies&lt;br/&gt;&lt;br/&gt;Unter OSGI ist die Verwaltung der Abhängigkeiten eine wichtige Sache und nur eine gut durchdachte Struktur ergibt eine gute Anwendung.&lt;br/&gt;&lt;br/&gt;Bisher kennen wir Abhängigkeiten über Import-Package oder Require-Bundle. Diese Abhängigkeiten können wir uns auch anzeigen lassen.&lt;br/&gt;&lt;br/&gt;Klassisch als Plug-In - Dependencies:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;oder visuell:&lt;br/&gt;&lt;br/&gt;(hier ist die &lt;a href=&quot;http://download.eclipse.org/eclipse/pde/incubator/visualization/site&quot;&gt;Updatesite&lt;/a&gt; des Graph Visualization Plug-Ins)&lt;br/&gt;&lt;br/&gt;Aber die Bundle - Abhängigkeiten sind nur die eine Seite der Wahrheit, denn sie berücksichtigt nicht die Service - Abhängigkeiten. &lt;br/&gt;&lt;br/&gt;Betrachten wir das DataSource Beispiel (s.o.):&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Wir haben Abhängigkeiten: Der DataSourceService wird nur zur Verfügung gestellt, wenn jeweils exakt ein Service vom Typ Ejb3ServerComponentsService und JDBCPoolComponent vorhanden ist. Diese beiden Services sind in zwei anderen Bundles deklariert.&lt;br/&gt;&lt;br/&gt;Wenn wir in der Service Komponente für diese Services bind / unbind Methoden definiert hätten, dann wären auf diesem Wege Bundle - Abhängigkeiten über Import-Package entstanden.&lt;br/&gt;&lt;br/&gt;Bisher habe ich noch kein Tool gefunden, das Service - Abhängigkeiten für Equinox visuell aufzeigt.&lt;br/&gt;&lt;br/&gt;Die Thematik ist aber noch wesentlich umfangreicher, denn wir haben verschiedene Strategien, um mit OSGI Services umzugehen:&lt;br/&gt;&lt;br/&gt;	•	Declarative Services (wie hier beschrieben)&lt;br/&gt;	•	ServiceTracker&lt;br/&gt;	•	&lt;a href=&quot;http://wiki.eclipse.org/Riena_Getting_Started_with_injecting_services_and_extensions&quot;&gt;Riena-Service-Injection&lt;/a&gt;&lt;br/&gt;	•	...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Als Architekt benötige ich den Überblick über Bundles, Services und deren Abhängigkeiten. Daher werde ich in meinem modellgetriebenen Serverprojekt den anderen Weg gehen und die Abhängigkeiten modellieren.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Dann mit &lt;a href=&quot;http://www.openarchitectureware.org/&quot;&gt;openArchitectureWare&lt;/a&gt; daraus die Service - Komponenten als XML - Datei erzeugen oder Javacode für ServiceTracker, bzw. Riena - Injection je nach gewählter Strategie.&lt;br/&gt;&lt;br/&gt;Aber dies ist ein Thema für einen anderen Blogeintrag ;-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Declarative Services trace - debug - log&lt;br/&gt;&lt;br/&gt;Während des Refactorings meines Serverprojekts bin ich natürlich an den Punkt gekommen, wo ich mich gefragt habe, warum bestimmte deklarative Serviceabhängigkeiten nicht aufgelöst wurden ;-)&lt;br/&gt;&lt;br/&gt;Mit Unterstützung der Equinox - Newsgroup und intensivem Googeln habe ich ein paar wichtige System Properties kennengelernt, die ich in der Dokumentation nicht gefunden habe:&lt;br/&gt;&lt;br/&gt;	•	equinox.ds.debug=true schaltet den Debugmode ein &lt;br/&gt;	•	equinox.ds.print=true gibt die Logausgaben auf die Konsole - benötige ich nicht, da ich die LogService Ausgaben abfange und logge (s.a. Blogserie Logging)&lt;br/&gt;	•	equinox.ds.perf=true gibt in ms die Ausführungszeiten aus&lt;br/&gt;	•	equinox.scr.waitTimeOnBlock=10000 gibt an, wieviel ms equinox.ds warten soll, bis eine Service Komponente erstellt wurde. War sehr hilfreich, als einige 3rdParty Komponenten im DEBUG Modus Zeiten von mehr als 50000 ms benötigten.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;ServiceTracker vs Declarative Services&lt;br/&gt;&lt;br/&gt;Kann ein Service Tracker komplett durch Declarative Services ersetzt werden ? Nein - das geht leider nicht. &lt;br/&gt;Im ServiceTracker gibt es Zugriff auf alle Methoden eines Services - bei den Declarative Services kann man aber z.B. im target - Filter nur auf die Service Properties zugreifen, die der ServiceRegistry zur Verfügung stehen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Soweit ein erster Bericht über Declarative Services - vielleicht entwickelt sich auch aus diesem Thema eine Blogserie - ich denke es ist interessant für viele Projekte.&lt;br/&gt;&lt;br/&gt;Wen die Thematik von OSGI Enterprise Anwendungen interessiert, sei auf meine &lt;a href=&quot;../blog-serien.html&quot;&gt;Blogserien&lt;/a&gt; hingewiesen.&lt;br/&gt;&lt;br/&gt;Ausserdem habe ich einige &lt;a href=&quot;https://www.eclipsecon.org/submissions/2009/search.php?search=ekkehard&quot;&gt;Submissions zur EclipseCon 2009&lt;/a&gt; eingereicht - &lt;br/&gt;Wer meine Erfahrungen live erleben möchte: Kommentare sind willkommen ;-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description>
    </item>
    <item>
      <title>HowTo Build an OSGI Enterprise Server: EasybeansServiceTracker</title>
      <link>http://web.me.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/11/21_HowTo_Build_an_OSGI_Enterprise_Server%3A_EasybeansServiceTracker.html</link>
      <guid isPermaLink="false">ecf7d975-6180-4019-a265-30f68d37cbe2</guid>
      <pubDate>Fri, 21 Nov 2008 17:23:38 +0100</pubDate>
      <description>Im vorigen Teil dieser Blogserie haben wir gesehen, dass es beim Einsatz von EasyBeans einiges zu beachten gibt bzgl. Startreihenfolge, Serviceabhängigkeiten usw. Zu diesem Zweck haben wir ein „Server - Agent“ - Bundle angelegt, das diese Vorgänge überwacht und steuert.&lt;br/&gt;&lt;br/&gt;Innerhalb des „Server - Agent“ - Bundles befindet sich der EasybeansServiceTracker, dessen Aufgaben wir hier genauer beschreiben. &lt;br/&gt;&lt;br/&gt;Damit wir EasyBeans nutzen können, stellen wir zunächst sicher, dass alle EasyBeans Components gestartet sind. EasyBeans Components sind:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Welche der EasyBeans Components benötigt werden, hängt von den Projektanforderungen ab.&lt;br/&gt;&lt;br/&gt;Eine Komponente ist besonders wichtig, damit die EJB Bundles von EasyBeans korrekt verwaltet werden können: JDBCPool. Diese Komponente registriert die DataSources als JNDI Name.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Nachdem sichergestellt ist, dass alle EZB Komponenten registriert sind und die JDBCPool Komponente alle DataSources registriert hat, können wir unsere „PersistenceContext - Bundles“ und „EJB - Bundles“ starten. Dabei ist wichtig, dass die „PersistenceContext - Bundles“ zuerst gestartet werden, damit Referenzen aus den „EJB - Bundles“ vom EasyBeans EJB3 Container  aufgelöst werden können.&lt;br/&gt;&lt;br/&gt;Während der Erzeugung eines EJB3 - Containers für jedes „PersistenceContext - Bundle“ und jedes „EJB - Bundle“ registriert EasyBans für jedes Business - Interface (@Local, @Remote) einen ManagedService. Der EasybeansServiceTracker trackt alle Remote - Business - Interfaces und registriert diese als Riena Remote Endpoints.&lt;br/&gt;Wenn der EJB3 Container durch EasyBeans fertiggestellt wurde, wird ein EZBContainerService registriert. Das Vorhandensein aller EZBContainerServices für all unsere Bundles führt dann zur Registrierung des RienaEasybeansServerService: unser Server ist einsatzbereit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Der EasybeansServiceTracker&lt;br/&gt;&lt;br/&gt;Jetzt sollte die Logik im Tracker so ähnlich aussehen:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Ist der ServiceTracker die ideale Lösung ?&lt;br/&gt;&lt;br/&gt;Es ist natürlich recht übersichtlich, die ganze Logik „rund um die EasyBeans EJB3 - Container“ an einer zentralen Stelle in unserem EasybeansServiceTracker zu halten und es funktioniert auch.&lt;br/&gt;&lt;br/&gt;Aber bei genauer Betrachtung ist es sehr komplex und schwierig zu managen - zumal unter Beachtung der Nebenläufigkeit. Ausserdem widerspricht es der Flexibilität einer dynamischen OSGI Anwendung: wie soll bei all diesen Abhängigkeiten innerhalb des Servcicetrackers auf das Stoppen / Starten von Bundles oder Services reagiert werden ?&lt;br/&gt;&lt;br/&gt;Daher werden wir die gesamte Thematik der EJB3 - Container innerhalb unserer OSGI Enterprise Anwendung im nächsten Beitrag soweit wie möglich über Declarative Services zu lösen versuchen. Jeder kann dann entscheiden, welche Lösung besser gefällt.&lt;br/&gt;&lt;br/&gt;Den Index der Blogserie finden Sie &lt;a href=&quot;../blog-serien.html&quot;&gt;hier&lt;/a&gt; - Diskussionen bitte in der &lt;a href=&quot;http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server_21.html&quot;&gt;englischen&lt;/a&gt; Ausgabe.</description>
    </item>
  </channel>
</rss>
