ekkes corner - ekkes ecke
Logging in OSGI Enterprise Anwendungen, Teil 4
Sonntag, 19. Oktober 2008
Teil 4 wird zeigen, wie wir unser Logging - Framework und die verschiedenen Brücken innerhalb einer OSGI Enterprise Anwendung starten.
Zur Erinnerung: Am Ende des vorigen (dritten) Teils meiner Blog - Serie "Logging in OSGI Enterprise Applications" waren wir in der Lage alle Ereignisse aus „klassischen“ Log-Frameworks, OSGI LogServices, sowie Bundle- als auch Framework - Ereignisse „einzusammeln“ und über eine gemeinsame SLF4J Log - Implementierung (LOGBack) zu loggen:

Wenn wir diese Logging - Bundles innerhalb einer OSGI Anwendung nutzen möchten, kommt es darauf an, diese korrekt zu starten, damit auch alle Logging Ereignisse von unseren Bundles gefangen und ausgegeben werden.
Als Beispiel nehme ich wieder meinen OSGI - Equinox - Riena - EasyBeans - Hibernate - Server:

Aus der OSGI Launch Konfiguration:

Der Default Start - Level ist im Beispiel auf 3 gesetzt - unser osgi-over-slf4j - Bundle muss vorher gestartet werden (zB Start-Level = 2) und das EasyBeans - Agent - Bundle danach (zB Start-Level = 4)
Ausserdem müssen wir beachten, dass einige der Bundles NICHT mit Auto-Start = true gestartet werden dürfen ! Diese Bundles werden über den EasyBeans Agenten in kontrollierter Reihenfolge gestartet.
Was passiert jetzt beim Starten des Servers ?
1.Das OSGI - Framework Equinox wird gestartet
2.Unser org.ekkehard.osgi.over.slf4j Bundle wird gestartet. Der Activator ruft in der start() Methode SLF4JBridgeHandler.install() auf, damit das java.util.logging aufgefangen werden kann von SLF4J - ausserdem enthält der Activator Logger - Statements. All dies bewirkt, dass die SLF4J - API und SLF4J - Implementierungs - Bundles (LOGBack) gestartet werden: unser Logging Framework steht bereit !
3.Alle Bundles mit Auto-Start = true werden danach vom Framework gestartet. Dazu gehören u.a. die Riena Bundles. Riena benutzt LOG4J - das bewirkt das Starten der LOG4J - Bridge. Ausserdem benutzt Riena die Equinox - Extended - OSGI - Log - Services.
4.Nachdem alle Default - Start - Level - Bundles gestartet wurden, wird der easybeans.agent gestartet. Dieser Agent startet dann alle EasyBeans Komponenten und Hibernate. EasyBeans benutzt Commons - Logging und java.util.logging - Hibernate benutzt SLF4J. Danach sind also all unsere Logging Framework Bridges gestartet und aktiv. EasyBeans startet und aktiviert jetzt noch die Entity - Bundles und EJB3 - Bundles unseres Servers und registriert die Business - Interfaces (Local oder Remote) als OSGI - Services.
5.Das org.ekkehard.server Bundle trackt die OSGI Managed Services und erkennt, wenn alle benötigten Services von EasyBeans und Hibernate konfiguriert wurden und zur Verfügung stehen. Dann registriert der org.ekkehard.server die Services als Remote Services für Eclipse Riena.
Anmerkung: Dies ist natürlich nur ein kleiner Auszug all der Aktivitäten, die beim Start der Anwendung erfolgen. Mehr zu Punkt 4. und 5. später in einer anderen Blog - Serie über den Server.
Keine schwarzen Löcher ?
Wenn wir alles richtig gemacht haben, dann sollte unsere LOGBack - Implementierung so früh starten, dass uns keine Log-Events verloren gehen.
Um dies auszutesten, setzen wir in der logback-test.xml das Root Level auf DEBUG, die Ausgabe auf Console, schalten den DEBUG - Modus der Konfigurationsdatei selbst ein und starten den Server.

Die Logausgabe sollte so ähnlich aussehen:

Zeile 1: equinox - osgi - Konsole
Zeile 2 - 7: Debug-Ausgabe aus LOGBack Konfigurationsdatei
Zeile 8 - 9: Logging - Ausgaben aus dem osgi-over-slf4j - Bundle
Wir sehen, dass es keine andere Logging - Ausgabe auf der Konsole gibt, die vor dem Start von SLF4J / LOGBack erfolgte :-)
In der nächsten Blog - Ausgabe betrachten wir die Konfigurationsdateien und spezielle Fragment - Bundles sowohl zur Konfiguration als auch zur Erweiterung der LOGBack - Implementierung.
• Teil 1: Ein Überblick
• Teil 2: Alle Log-Ereignisse aus "klassischen" Logging - Frameworks einsammeln
• Teil 3: Alle Log-Ereignisse aus OSGI Log Services einsammeln
• Teil 4: Logging innerhalb einer OSGI Enterprise Anwendung starten
• Teil 5: ... folgt (Stay tuned...)
Im Zusammenhang ebenfalls interessant meine früheren Blogs zum Thema Logging und OSGI:
Diskussionen zu diesem Blog bitte im englischen Blog hier.
...Equinox OSGI Enterprise Anwendungen mit unterschiedlichen Logging-Strategien und Frameworks...