<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Just another tech blog ... &#187; Declarative Services</title>
	<atom:link href="http://hexor2k.wordpress.com/tag/declarative-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://hexor2k.wordpress.com</link>
	<description>... about (mobile) Linux and Java</description>
	<lastBuildDate>Thu, 31 Dec 2009 11:15:03 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='hexor2k.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3350773e6f25e0db7b7f27bdf342b466?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Just another tech blog ... &#187; Declarative Services</title>
		<link>http://hexor2k.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hexor2k.wordpress.com/osd.xml" title="Just another tech blog &#8230;" />
		<item>
		<title>Service-Component Tracker: Was gibts Neues?</title>
		<link>http://hexor2k.wordpress.com/2008/10/28/service-component-tracker-was-gibts-neues/</link>
		<comments>http://hexor2k.wordpress.com/2008/10/28/service-component-tracker-was-gibts-neues/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 18:43:24 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Service-Component Tracker]]></category>
		<category><![CDATA[Declarative Services]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=282</guid>
		<description><![CDATA[Nachdem jetzt längere Zeit nix mehr lief, hab ich heute Abend wieder etwas Zeit, mich um das Projekt zu kümmern:
Im letzten Lebenszeichen hatte ich noch die Absicht geäußert, den Code der DS-Implementierung genauer zu untersuchen. Das ist mir aber für den Anfang noch zu mühsam. Stattdessen habe ich zufällig gemerkt, dass das Bundle org.eclipse.equinox.ds den [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=282&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Nachdem jetzt längere Zeit nix mehr lief, hab ich heute Abend wieder etwas Zeit, mich um das Projekt zu kümmern:</p>
<p>Im letzten Lebenszeichen hatte ich noch die Absicht geäußert, den Code der DS-Implementierung genauer zu untersuchen. Das ist mir aber für den Anfang noch zu mühsam. Stattdessen habe ich zufällig gemerkt, dass das Bundle <code>org.eclipse.equinox.ds</code> den einen Service unter dem Interface <code>org.osgi.service.cm.ConfigurationListener</code> registriert. Ich werde mir daher zuerst das CM etwas genauer ansehen um evtl. noch Informationen zu den Service Komponenten darüber abzufragen.</p>
<p>CM steht für <strong>Configuration Managment Admin</strong>, dies ist ein besonderer Framework Service, der es erlaubt, Services mit ihren Parametern zu konfigurieren. Das Interface ConfigurationListener kann als Service im System angemeldet werden. Der Services wird dann automatisch bei allen Events des Admins benachrichtigt. Leider lassen sich darüber keine Informationen abfragen <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Mal sehen, ob DS noch weitere Schnittstellen nach außen hat.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/282/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=282&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/10/28/service-component-tracker-was-gibts-neues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
		<item>
		<title>Service-Component Tracker: Erste Hürden und Erkenntnisse</title>
		<link>http://hexor2k.wordpress.com/2008/10/04/service-component-tracker-erste-hurden-und-erkenntnisse/</link>
		<comments>http://hexor2k.wordpress.com/2008/10/04/service-component-tracker-erste-hurden-und-erkenntnisse/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 20:17:41 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Service-Component Tracker]]></category>
		<category><![CDATA[Declarative Services]]></category>
		<category><![CDATA[Equinox]]></category>
		<category><![CDATA[Felix]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=250</guid>
		<description><![CDATA[Nach dem Aufsetzen der Entwicklungsumgebung habe ich als Zweites den Source-Code von Equinox via CVS ausgecheckt, um bei meinen ersten Schritten etwas zu spicken.
Der erste Versuch war, ein eigenes Bundle zu schreiben, welches alle Funktionalitäten ohne Kenntnis der Interna des DS-Bundles implementiert. Das &#8222;services&#8220; Kommando der Equinox hab ich deshalb auch als erstes angeschaut, da [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=250&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Nach dem Aufsetzen der Entwicklungsumgebung habe ich als Zweites den Source-Code von Equinox via CVS ausgecheckt, um bei meinen ersten Schritten etwas zu spicken.</p>
<p style="text-align:justify;">Der erste Versuch war, ein eigenes Bundle zu schreiben, welches alle Funktionalitäten ohne Kenntnis der Interna des DS-Bundles implementiert. Das &#8222;services&#8220; Kommando der Equinox hab ich deshalb auch als erstes angeschaut, da hier schon Name und ID der Service-Component angezeigt werden. Allerdings geschieht dies nicht, weil es Zugriff auf die Component hat, sondern weil Name und ID als Service-Properties dem Service hinzugefügt werden. Das Kommando zeigt einfach nur diese Properties an.</p>
<p style="text-align:justify;">Aufbauend darauf habe ich schon einmal ein Bundle geschrieben, dass anhand dieser Properties die vorhandenen Service-Components mit Name und ID auflistet.</p>
<p style="text-align:justify;">Auf der Suche im Internet bin ich dann noch auf die DS-Implementierung von Apache Felix gestoßen. Diese scheint schon etwas weiter entwickelt zu sein, hier gibt es das Kommando &#8222;scr&#8220;, welches Service-Components auflisten, anzeigen, starten und beenden kann. Dieser <a href="http://felix.apache.org/site/apache-felix-service-component-runtime.html">Link</a> führt zu einer Beschreibung.</p>
<p style="text-align:justify;">Für eine weitere Betrachtung der DS unter Equinox werde ich nicht umhin kommen, auch tiefer in den Sourcecode zu schauen. Auch wird es wohl darauf hinaus laufen, dass ich das Bundle <code>org.eclipse.equinox.ds</code> noch anpassen muss.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/250/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=250&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/10/04/service-component-tracker-erste-hurden-und-erkenntnisse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
		<item>
		<title>Projekt: Service-Component Tracker</title>
		<link>http://hexor2k.wordpress.com/2008/10/01/projekt-service-component-tracker/</link>
		<comments>http://hexor2k.wordpress.com/2008/10/01/projekt-service-component-tracker/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 18:50:24 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Service-Component Tracker]]></category>
		<category><![CDATA[Declarative Services]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Equinox]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=244</guid>
		<description><![CDATA[Wie schon angedroht, werde ich jetzt mit einem kleinen Projekt zu Hause beginnen. Erstes Ziel soll die Erstellung eines Service-Component Trackers sein, einer Anwendung, welche die Service-Components einer OSGi-Umgebung suchen, anzeigen sowie verändern kann. Folgende Funktionen sollen bereitgestellt werden:


Service-Components anzeigen: dies soll ähnlich zu dem services-Kommando geschehen. Auch soll es möglich sein, Service-Components mittels Wildcards [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=244&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Wie schon angedroht, werde ich jetzt mit einem kleinen Projekt zu Hause beginnen. Erstes Ziel soll die Erstellung eines Service-Component Trackers sein, einer Anwendung, welche die Service-Components einer OSGi-Umgebung suchen, anzeigen sowie verändern kann. Folgende Funktionen sollen bereitgestellt werden:</p>
<p style="text-align:justify;"><span id="more-244"></span></p>
<ul style="text-align:justify;">
<li><strong>Service-Components anzeigen:</strong> dies soll ähnlich zu dem <code>services</code>-Kommando geschehen. Auch soll es möglich sein, Service-Components mittels Wildcards zu suchen.</li>
<li><strong>Service-Components starten und beenden:</strong> Mittels der Komponenten-ID oder dem -Namen soll der Status von Service-Components auf <code>enabled</code> oder <code>disabled</code> verändert werden können.</li>
<li><strong>Neue Instanzen von Service-Component-Factories erzeugen und beenden:</strong> Bei den Service-Component-Factories soll es möglich sein, mittels eines Kommandozeilenbefehls neue Instanzen zu erzeugen und vorhandene Instanzen wieder zu löschen.</li>
</ul>
<p style="text-align:justify;">Bei der Implementierung sollte im ersten Schritt eine Service-Component erstellt werden, welche den Zugriff auf die Service-Components herstellt. Zusätzlich ist eine Service-Component für die oben genannten Funktionen notwendig, falls jede Funktion vom Umfang zu groß wird, ist auch eine Aufteilung auf 3 einzelne Service-Components möglich.</p>
<p style="text-align:justify;">Es werden folgende Technologien benötigt:</p>
<ul style="text-align:justify;">
<li><strong>OSGi:</strong> Die eigentliche Runtime, bereitgestellt durch <strong>Eclipse Equinox</strong></li>
<li><strong>org.osgi.service.components: </strong>Die Implementierung der Service-Components, bereitgestellt durch das Bundle <strong>org.eclipse.equinox.ds</strong></li>
<li><strong>org.eclipse.equinox.log</strong> zur Nutzung von Logging während der Entwicklung</li>
</ul>
<p style="text-align:justify;">Da die Service-Components ein reines OSGi Feature sind, kann auf die Nutzung von <strong>RCP</strong> verzichtet werden, zumindest solange das Projekt sich auf die Kommandozeile beschränkt.</p>
<p style="text-align:justify;">Als Zeitrahmen würde ich maximal 5 Wochen veranschlagen, je nach freier Zeit und nach Schwierigkeiten bei der Implementierung.</p>
<p style="text-align:justify;">So, und jetzt gehts als Erstes ans Einrichten von Eclipse und einem neuen SVN-Repository.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=244&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/10/01/projekt-service-component-tracker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
		<item>
		<title>Declarative Services in Fragment Bundles</title>
		<link>http://hexor2k.wordpress.com/2008/09/30/declarative-services-in-fragment-bundles/</link>
		<comments>http://hexor2k.wordpress.com/2008/09/30/declarative-services-in-fragment-bundles/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 17:52:46 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Declarative Services]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Equinox]]></category>
		<category><![CDATA[Fragment Bundle]]></category>
		<category><![CDATA[Howto]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=196</guid>
		<description><![CDATA[Hier noch eine kleine Info-Sammlung über Declarative Services (DS) in Fragment Bundles (FB). Alle folgenden Infos beziehen sich auf Eclipse Equinox.


Grundsätzlich gilt: es funktioniert. Allerdings unterliegen DS in FB einigen Besonderheiten:

XML-Files: Die Service-Komponenten-Beschreibungen können beliebig im Host- oder Fragment-Bundle abgelegt werden. Sie können beliebige Klassen aus beiden Bundles reservieren, da ja beide zur Laufzeit zu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=196&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Hier noch eine kleine Info-Sammlung über Declarative Services (DS) in Fragment Bundles (FB). Alle folgenden Infos beziehen sich auf Eclipse Equinox.</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><span id="more-196"></span></p>
<p style="text-align:justify;">Grundsätzlich gilt: es funktioniert. Allerdings unterliegen DS in FB einigen Besonderheiten:</p>
<ul style="text-align:justify;">
<li><strong>XML-Files: </strong>Die Service-Komponenten-Beschreibungen können beliebig im Host- oder Fragment-Bundle abgelegt werden. Sie können beliebige Klassen aus beiden Bundles reservieren, da ja beide zur Laufzeit zu einem Bundle verschmolzen werden und sich den Classpath teilen.</li>
<li><strong>Manifest-Files: </strong>Jetzt die schlechte Nachricht, das Element <code>Service-Component<br />
</code> darf nur in der Manifest-File des Host-Bundles eingetragen sein, im Manifest des Fragments wird es ignoriert. Es können jedoch mehrere <code>Service-Component</code>-Elemente im Host-Manifest &#8222;auf Vorrat&#8220; eingetragen werden, wenn man sich dann an den Fehlermeldungen im Log nicht stört.</li>
<li><strong>Konflikte</strong>: Was passiert, wenn man mehrere gleichnamige XML-Files in Host- und Fragmenten liegen, diese aber unterschiedliche Service-Komponenten deklarieren?? Es steht wahrscheinlich in keiner Spezifkation, was dann geschieht, bei Eclipse Equinox passiert folgendes: Es werden zwei eigenständige Service-Komponenten erstellt und gestartet. Es findet keine Überschreibung oder Überlagerung statt. Man kann sich das so vorstellen, als lägen beide in unterschiedlichen Files im gleichen Bundle. Falls es vorkommt, dass die Service-Komponenten einen identischen Namen haben (too much copy-paste <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ),  so kollidieren sie so wie im Normalfall.</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=196&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/09/30/declarative-services-in-fragment-bundles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
		<item>
		<title>Howto OSGI Declarative Services</title>
		<link>http://hexor2k.wordpress.com/2008/08/27/osgi-declarative-services/</link>
		<comments>http://hexor2k.wordpress.com/2008/08/27/osgi-declarative-services/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 19:29:57 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Declarative Services]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Equinox]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=140</guid>
		<description><![CDATA[Nachdem ich auf der Arbeit ständig damit hantiere, gibts jetzt ne kleine Anleitung bzw. Checkliste für Declarative Services (DS)  unter OSGI. Was sind DS? Ganz einfach: Normalerweise müsste man per Hand codieren, welche Services ein OSGI-Bundle anbietet und welche es verwendet. Dadurch entstehen einige Probleme, vor allem muss man sich selbst darum kümmern, was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=140&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Nachdem ich auf der Arbeit ständig damit hantiere, gibts jetzt ne kleine Anleitung bzw. Checkliste für <em>Declarative Services (DS) </em> unter <em>OSGI</em>. Was sind DS? Ganz einfach: Normalerweise müsste man per Hand codieren, welche Services ein OSGI-Bundle anbietet und welche es verwendet. Dadurch entstehen einige Probleme, vor allem muss man sich selbst darum kümmern, was passieren soll, wenn ein Service mal nicht zur Verfügung steht oder sich im Betrieb verabschiedet. Außerdem ist es für einen Außenstehenden oft schwer einzusehen, welche Services das Bundle verwendet bzw. anbietet. Die Ressourcenbelegung ist auch ein Punkt, da die Services sich sofort bei Bundle-Start registrieren und nicht erst, wenn sie benötigt werden. Hier kommen die Declarativen Services ins Spiel. Mit ihnen kann man Services per XML-Datei konfigurieren.</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><span id="more-140"></span></p>
<p>Die folgende Checkliste wurde unter der Verwendung von Eclipse Equinox erstellt.</p>
<h3>Checkliste: Was wird für Declarative Services benötigt?</h3>
<ul>
<li>Die Implementierung der Deklarative Services erfolgt durch das Bundle <strong>org.eclipse.equinox.ds</strong>. Dieses Bundle muss immer mit geladen werden, bevor die DS verwendet werden können.</li>
<li>Zusätzlich wird die Klasse <strong>ComponentContext</strong> aus dem Bundle <strong>org.osgi.service.component</strong> benötigt.</li>
<li>Die eigentliche Implementierung des DS erfolgt als sog. <strong>Service Component, </strong>also einer Klasse, welche den Service (besser gesagt: das Service Interface) implementiert. Im Gegensatz zu einem Activator wird diese nicht abgeleitet oder implementiert eine Interface. Sie muss trotzdem folgende zwei Funktionen enthalten, damit die ServiceComponent funktioniert. Diese Funktionieren ähnlich wie die <em>start </em>und<em> stop </em>Methoden des Bundle-Activators.
<ul>
<li><strong>protected void activate(Component context){&#8230;}</strong></li>
<li><strong>protected void deactivate(Component context){&#8230;}<br />
</strong></li>
</ul>
</li>
<li>Eine <strong>Konfigurationsdatei</strong> in XML: Diese Datei wird üblicherweise in einem Verzeichnis namens <strong>OSGI-INF</strong> abgelegt, der Dateiname ist beliebig. Die XML-Datei selbst folgt dem <a href="http://www.osgi.org/xmlns/scr/v1.0.0/scr.xsd">hier</a> zu findenden Schema. Wichtig ist hier, dass alle Inhalte der XML-Datei, also Tags, Attribute aber Paket- und Klassennamen <strong>richtig </strong>geschrieben sind, ansonsten kann die Service Component nicht aktiviert werden.</li>
</ul>
<ul>
<li>Änderung im Manifest-File des Bundles: Füge eine neue Zeile hinzu, der Inhalt ist <strong>Service-Component: OSGI-INF/service.xml</strong> (wenn die XML-Datei service.xml heißt)</li>
</ul>
<h3>Beispiel:</h3>
<p style="text-align:justify;">Hierzu ein kleines Beispiel: Eine ServiceComponent soll erstellt werden, die einen Service mit dem Interface <strong>MyServiceInterface</strong> bereitstellt. Sie soll außerdem eine Liste von Services des Interface <strong>OtherService</strong> beinhalten. Dazu bindet sie diesen Service (der auch über eine Service Component realisiert werden muss) mit der <strong>cardinality=&#8220;1..n&#8220;</strong>, so dass mindestens ein <strong>OtherService</strong> vorhanden sein muss, um die Service Component zu aktivieren. Die einzige Funktion in <strong>MyServiceInterface</strong> gibt die Anzahl der angebundenen <strong>OtherService</strong> zurück.</p>
<h4>Service Interface:</h4>
<pre><code>package org.example.ds
import ...
public interface MyServiceInterface {
    int getCount();
}</code></pre>
<h4>Implementierungs-Klasse:</h4>
<pre><code>package org.example.ds.internal
import ...
public class MyServiceImplementation implements MyServiceInterface {

    private ComponentContext context;
    private List&lt;OtherService&gt; servicelist = new Vector&lt;OtherService&gt;(0);

    protected void activate(ComponentContext context){
        this.context = context;
    }

    protected void deactivate(ComponentContext context){
        this.context = null;
    }

    protected void bindOtherService(OtherService otherservice){
        this.servicelist.add(otherservice)
    }

    protected void unbindOtherService(OtherService otherservice){
</code><code>        this.servicelist.remove(otherservice)</code>
<code>    }

    </code><code>public int getCount(){
        return this.servicelist.size();
</code><code>    }
}
</code></pre>
<h4>Die XML-Datei im OSGI-INF Ordner:</h4>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;component name="myServiceComponent"&gt;
    &lt;implementation class="org.example.ds.MyServiceImplementation"/&gt;
    &lt;service&gt;
        &lt;provide interface="org.example.ds.MyServiceInterface"/&gt;
    &lt;/service&gt;
    &lt;reference
        name="otherservice"
        interface="org.example.ds.OtherService"
        bind="bindOtherService"
        unbind="unbindOtherService"
        cardinality="1..n"
        policy="static"
    /&gt;
&lt;/component&gt;
</code></pre>
<h3>Fehlersuche:</h3>
<ul>
<li>Das Bundle startet, aber die Service Component nicht. Dies kann viele Ursachen haben:
<ul>
<li>Schreibfehler in der Manifest- oder XML-File. Am besten nochmal nachschauen, ob alle Paket- und Klassennamen stimmen.</li>
<li>Eine geforderte Referenz ist nicht verfügbar. Untersuche alle Referenzen, ob deren Service Components vollständig gestartet wurden.</li>
<li>Eintrag in der <strong>Manifest-File</strong> fehlt oder ist ungültig. Mein absoluter Lieblings-Fehler <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Funktionen wie <strong>activate/deactivate</strong> bzw. <strong>bind/unbind</strong> fehlen oder sind ungültig.</li>
</ul>
</li>
<li><strong>NullPointerException</strong> oder andere krude Exceptions werden geworfen: Dies kann auftreten, wenn Klassenmember in der <strong>activate</strong>-Funtion belegt werden. Diese wird nämlich erst dann aufgerufen, wenn alle Referenzen erfüllt sind, also erst nach den <strong>bind</strong>-Funktionen. Wenn in <strong>bind</strong> schon auf das Member zugegriffen wird, ist es dann noch <strong>null</strong> und die NullPointerException wird geworfen.</li>
<li>Hilfe, ich sehe nicht ob sich irgendwas tut!!!
<ul>
<li>Der Status einer Service Component kann leider nicht einfach über den <strong>status</strong>-Befehl abgefragt werden, da Service Components ein relativ neues Konzept sind.</li>
<li>Eine Service Component meldet ihre Services sofort an der Service Registry an, der Befehl <strong>services</strong> gibt also keinerlei Aufschluss über den Status ser Service Component.</li>
<li>Am besten kann der Lebenszyklus über den Log-Service verfolgt werden, den Equinox mitliefert. Er kann über das Bundle <strong>org.eclipse.equinox.log</strong> angebunden werden</li>
</ul>
</li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/hexor2k.wordpress.com/140/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/hexor2k.wordpress.com/140/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=140&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/08/27/osgi-declarative-services/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
	</channel>
</rss>