Frage
Meine CQ5-Anwendung muss sich mit einem externen RDBMS verbinden. Wie konfiguriere ich und stelle eine Verbindung zu einer JDBC-Datenquelle her?
Antwort, Auflösung
Als Beispiel erstellen wir eine JDBC-Datenquelle, um eine Verbindung mit H2 Datenbank-Engine herzustellen.
Installieren Sie den JDBC-Treiber für Ihre Datenbank.
- Wenn Ihr Datenbankanbieter ein JDBC-Treiber-JAR als OSGi-Bundle zur Verfügung stellt, können Sie es direkt in die Felix-Konsole einbinden.
- Wenn das OSGi-Bundle mit Ihrem Treiber nicht verfügbar ist, können Sie das JAR zum gemeinsamen Klassenpfad Ihres Anwendungsservers hinzufügen z.B. crx-quickstart/server/lib/container unter CQSE und ein Extension-Bundle erstellen.
- Erstellen Sie eine Manifestdatei. Für dieses Beispiel nennen wir es h2ext.mf. Siehe untenstehende Codeliste.
Beachten Sie, dass eine leere Zeile am Ende einer JAR-Manifestdatei erforderlich ist.
- Erstellen Sie eine JAR-Datei mit obigem Manifest unter Verwendung des folgenden Befehls.
jar -cfm org.h2.jdbc.driver.extension-1.1.119.jar h2ext.mf
- Installieren Sie org.h2.jdbc.driver.extension-1.1.119.jar mithilfe der Felix-Konsole. Dies sollte das org.h2 package zur Exportliste des System-Bundles hinzufügen.
- Weitere Informationen zu Extension-Bundles finden Sie in Abschnitt 3.15, Extension Bundles, der OSGi-Kerndienstplattform.
- Erstellen Sie eine Manifestdatei. Für dieses Beispiel nennen wir es h2ext.mf. Siehe untenstehende Codeliste.
- Eine weitere Möglichkeit besteht darin, den jdbc-Treiber in ein anderes OSGi-Bundle einzubetten. Wenn Sie CRXDE verwenden, um ein OSGi-Bundle zu erstellen, können Sie den Treiber JAR in das Bundle-Lib-Verzeichnis einfügen. CRXDE wird ihn automatisch einbetten.
- Alternativ können Sie die JAR dem gemeinsamen Klassenpfad Ihres Anwendungsservers hinzufügen und die Eigenschaft org.osgi.framework.bootdelegation in sling.propeties verwenden, um die Treiberklasse zu laden. Klicken Sie hier für weitere Informationen. Wenn Sie beispielsweise H2 Database verwenden, kopieren Sie h2-1.1.119.jar nach crx-quickstart/server/lib/container. Fügen Sie anschließend den sling.properties die Zeile „sling.bootdelegation.class.org.h2.Driver=org.h2“ hinzu.
h2ext.mf
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.h2.jdbc.driver.extension Bundle-Version: 1.1.119 Fragment-Host: system.bundle; extension:=framework Bundle-Name: H2 JDBC Driver Extension Bundle-Description: Bundle exporting H2 JDBC Driver Export-Package: org.h2
JDBC Connection Pool konfigurieren
Navigieren Sie zum Konfigurationsmanager in der Felix-Konsole (http://localhost:4502/system/console/configMgr). Erstellen Sie mithilfe der JDBC-Connection-Pool-Konfigurationsfabrik einen neuen Connection Pool. Es könnten zum Beispiel diefolgenden Einstellungen vorliegen.
JDBC driver class: org.h2.Driver JDBC connection URI: jdbc:h2:~/test Usename: sa Password: Validation query: Pool size: 10 Pool wait (msec): 100 Datasource name: h2DataSource
Eine Instanz der Datenquelle aufrufen.
Nachdem die DataSource konfiguriert wurde, wird sie durch Aufrufen der getDataSource(String datasourceName)-Methode des DataSourcePool-Service (com.day.commons.datasource.poolservice.DataSourcePool) ausgelöst und gibt ihm den Datenquellennamen.
Beispiel einer OSGi-Komponente
In diesem Beispiel erstellen wir einen einfachen OSGi-Service, der zum Abrufen einer Instanz einer Datenquelle verwendet werden kann. Dieses Beispiel ist nicht realistisch, da es im Wesentlichen dieselbe API wie com.day.commons.datasource.poolservice.DataSourcePool selbst aufweist, ohne Funktionen hinzuzufügen. Es zeigt jedoch, wie DataSourcePool in Ihrem eigenen Code verwendet werden kann.
Erstellen wir zunächst eine Schnittstelle für unseren Dienst.
package com.day.test.datasource; import javax.sql.DataSource; public interface DatasourceUtil { public DataSource getDataSource(String dataSourceName); }
Nun die Implementierung. Wie Sie sehen können, trägt dies außer dem Ausblenden der DataSourceNotFoundException keinen Nutzen bei :).
package com.day.test.datasource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.sql.DataSource; import com.day.commons.datasource.poolservice.DataSourceNotFoundException; import com.day.commons.datasource.poolservice.DataSourcePool; /** * * This class is an example if how DataSourcePool can be used to obtain the DataSource. * * @scr.component immediate="true" metatype="no" * @scr.service interface="DatasourceUtil" * @scr.property name="service.description" value="Data Source lookup example" * @scr.property name="service.vendor" value="Day Software" */ public class DatasourceUtilImpl implements DatasourceUtil { private static final Logger log = LoggerFactory.getLogger( DatasourceUtilImpl.class); /** @scr.reference policy="static" */ private DataSourcePool dataSourceService; public DataSource getDataSource(String dataSourceName) { log.info("Using DataSourcePool service lookup " + "to get connection pool " + dataSourceName); DataSource dataSource = null; try { dataSource = (DataSource) dataSourceService.getDataSource( dataSourceName); } catch (DataSourceNotFoundException e) { log.error("Unable to find datasource {}.", dataSourceName, e); } return dataSource; } }
Diese Klasse verwendet die OSGi-Spezifikation für deklarative Dienste, um eine Instanz des DataSourcePool-Dienstes zu erhalten. Diese nennt sie getDataSource(dataSourceName), um die Datenquelle zu erhalten. Maven SCR-Plug-in verwendet die SCR Java-Anmerkungen, um XML-Deskriptoren für deklarative Dienste von OSGi zu erstellen. Die angehängte ZIP-Datei enthält ein Beispiel-POM.
Sie können ein vollständiges Beispiel hier herunterladen: datasourceutil.zip. Es enthält eine Maven-POM zum Erstellen. Um dieses Projekt mit POM zu erstellen, lesen Sie bitte unter "CQ5 als Maven-Repository verwenden" nach.
JSP-Beispiel.
Dies ist ein CRX-Paket, das ein JSP-Beispiel enthält - datasource-example-jsp.zip. Es ist eine CQ-Komponente, die jeder Seite mit einem Absatzsystem hinzugefügt werden kann. Sie kann zum Testen Ihrer DataSource-Verbindung verwendet werden.
5.3 Hinweis
Beigefügt ist ein Beispielbündel zum Aufbau mit CRXDE/CRXDE Lite hinzugefügt, das den Oracle Treiberinstallierer oracle_example_driver.zip enthält, schauen Sie sich die /apps/oracle.In the Activator.java it an, laden Sie explizit die Treiber-Klasse (möglicherweise in zukünftigen Versionen nicht mehr erforderlich). Stellen Sie vor der Verwendung sicher, dass Sie die neueste day.commons.datasource.jdbcpool (1.0.8) installiert haben.
Gilt für
CQ5.2.1, CQ5.3
Herunterladen
Herunterladen
Herunterladen
Herunterladen
Herunterladen
Herunterladen
Herunterladen
Herunterladen