2013-01-31 13 views
7

Ich beginne gerade mit Apache Sling und CQ5 Entwicklung. Es gibt dieses Konzept der Verwendung von OSGI-Bundles in Sling.Wie osgi Bundles von Schlingen verwendet werden

Ich kann nicht herausfinden, wie das Sling-Framework tatsächlich mit diesen Bündeln interagiert und wo die Antwort von Bündeln geht?

Antwort

7

OSGi ist ein Modul-Framework und eine Service-Plattform, die von Sling und dem CQ5-Produkt verwendet werden. Sling selbst besteht aus einer Reihe von Bundles, die im Felix OSGi Container enthalten sind. Bundles sind eine Sammlungsgruppe von Komponenten/Diensten und Java-Klassen, die vom Container verwaltet werden. Das Bündel kann angeben, welche Pakete importiert, exportiert und auch die Versionen dieser Abhängigkeiten werden.

Es gibt eine Reihe von Möglichkeiten, wie Sie mit OSGi von Sling interagieren können. Von einer JSP/JSP können Sie die Schleuder-Objekt verwenden (vom Typ SlingScriptHelper), die in Ihrer JSP-Seite höchstwahrscheinlich zur Verfügung, wenn Sie die folgende Zeile enthalten sind:

<%@include file="/libs/foundation/global.jsp"%> 

in Ihrer Komponente oder die folgende:

<cq:defineObjects> 

Sie können es wie so verwenden:

QueryBuilder queryBuilder = sling.getService(QueryBuilder.class); 

Außerdem, wenn Sie Ihre eigene OSGi-Komponenten (zB Servlets, Dienstleistung, etc.) haben Sie können Verweise auf andere injizieren OSGI-Komponenten/-Dienste, die SCR-Anmerkungen verwenden Bertrand beschreibt dies in seiner Antwort auf Getting OSGi services from a bundle in Sling/CQ. Effektiv bedeutet dies die @Reference Annotation zu Ihrem OSGI Komponente Variablen in Komponenten hinzufügen, etwa so:

@Reference 
private SlingRepository repository; 

Wenn die Komponente geladen wird, dann wird die Referenz durch die OSGi Behälter eingespritzt werden.

Ein Bündel hat keine Antwort als solche.

http://localhost:4502/system/console/bundles 

mit seinen Komponenten, Dienstleistungen & Konfiguration erklärt hier: Ein Einsatz Bündel sollte in der Systemkonsole sichtbar sein

http://localhost:4502/system/console/services 
http://localhost:4502/system/console/components 
http://localhost:4502/system/console/configMgr 

(Ersetzen Sie localhost: 4502 mit Ihrem eigenen CQ-Server-Host: port)

Sobald Sie einen Verweis auf eine Komponente erhalten haben, können Sie die Methoden aufrufen und die Rückgabewerte dieser Aufrufe verwenden.

+0

Danke SO VIEL !!! Ich verlor fast die Hoffnung darauf. Das reguläre Material im Internet beantwortet diese Frage nicht. –

+0

Dokumentation am Tag [CQ5 Entwickler-Website] (http://dev.day.com/docs/en/cq/current.html # Developing% 20on% 20CQ) und [blogs] (http://dev.day.com/content/ddc/blog/2008/05/slingosgi.html) ist ziemlich gut. Auch die [Felix/SCR] (http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html) ist hilfreich. Sehen Sie sich schließlich die Unit-/Integrationstests für das [Sling-Projekt selbst] (https://github.com/apache/sling) an, da diese normalerweise die beste Möglichkeit zur Verwendung der verschiedenen Sling-APIs zeigen. Bitte akzeptieren Sie die Antwort, wenn es Ihren Anforderungen entspricht. ;-) – diffa

+0

Eigentlich muss ich CQ5 lernen (inklusive Sling, OSGi, Felix, Bundles etc.) in 3 Tagen !! :) Also ich haue jetzt gerade über Webseiten. Vielen Dank –

Verwandte Themen