ekkes corner - ekkes ecke
ekkes corner - ekkes ecke
HowTo Build an OSGI Enterprise Server: EasybeansServiceTracker
Freitag, 21. November 2008
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.
Innerhalb des „Server - Agent“ - Bundles befindet sich der EasybeansServiceTracker, dessen Aufgaben wir hier genauer beschreiben.
Damit wir EasyBeans nutzen können, stellen wir zunächst sicher, dass alle EasyBeans Components gestartet sind. EasyBeans Components sind:
Welche der EasyBeans Components benötigt werden, hängt von den Projektanforderungen ab.
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.
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.
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.
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.
Der EasybeansServiceTracker
Jetzt sollte die Logik im Tracker so ähnlich aussehen:
Ist der ServiceTracker die ideale Lösung ?
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.
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 ?
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.
Den Index der Blogserie finden Sie hier - Diskussionen bitte in der englischen Ausgabe.