Question

Mon application CQ5 doit se connecter à une RDBMS externe. Comment configurer et me connecter à la source de données JDBC ?

Réponse, résolution

Par exemple, créez une source de données JDBC pour vous connecter à la base de données H2

Installez le pilote JDBC pour votre base de données.

  • Si votre fournisseur de base de données offre un pilote JDBC jar en tant que regroupement OSGi, vous pouvez le déployer directement dans la console Felix.
  • Si le regroupement OSGi avec votre pilote n’est pas disponible, vous pouvez ajouter le JAR au classpath partagé de votre serveur d’applications, par exemple crx-quickstart/server/lib/container sous CQSE et créer un regroupement d’extension.
    • Créez un fichier manifeste. Pour cet exemple, nous l'appellerons h2ext.mf. Voir la liste des codes ci-dessous.
      Veuillez noter que la ligne vierge à la fin d'un fichier manifeste jar est requise.
    • Créez un fichier jar avec le manifeste ci-dessus à l’aide de la commande suivante.
      jar -cfm org.h2.jdbc.driver.extension-1.1.119.jar h2ext.mf 
    • Installez org.h2.jdbc.driver.extension-1.1.119.jar en utilisant la console Felix. Cela devrait ajouter le package org.h2 à la liste d'exportation du Groupe Système.
    • Reportez-vous à la section 3.15, Regroupements d'Extension, de la plate-forme centrale de service OSGi pour plus d'informations sur les Regroupements d'Extensions.
  • Une autre option consiste à intégrer le pilote JDBC dans un autre regroupement OSGi. Si vous utilisez CRXDE pour créer un regroupement OSGi, vous pouvez placer le jar du pilote dans le répertoire de libération du regroupement. CRXDE l’incorpore automatiquement.
  • Une autre possibilité consiste à ajouter le jar à l’objet classpath partagé de votre serveur d’application et à utiliser la propriété org.osgi.framework.bootdelegation dans sling.propeties pour charger la classe du pilote. Cliquez sur pour plus d'iformations Par exemple, si vous utilisez la base de données H2, copiez H2-1.1.119.jar dans crx-quickstart/server/lib/container. Ensuite ajoutez la ligne «sling.bootdelegation.class.org.h2.Driver= org.h2» à sling.properties.

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

 

Configuer le pool de connexions JDBC

Naviguer jusqu'au guide de Configuration dans la console Felix (http://localhost:4502/system/console/configMgr). Utilisez la fabrique de configuration du pool de connexion JDBC pour créer un nouveau pool de connexion. Par exemple, les paramètres suivants peuvent être définis.

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

Obtenez une occurence de la DataSource.

Une fois configuée, l’instance de la source de données est acquise par l’appel de la méthode getDataSource(String datasourceName) du service DataSourcePool (com.day.commons.datasource.poolservice.DataSourcePool), lui transmettant le nom de la source de données.

Exemple de composant OSGi

Dans cet exemple, nous créons un service OSGi simple qui peut être utilisé pour obtenir une instance d’une DataSource. Cet exemple n’est pas réaliste, car il reproduit la même API que com.day.commons.datasource.poolservice.DataSourcePool sans y ajouter de fonctionnalités. Il indique toutefois comment DataSourcePool peut être utilisé dans votre propre code.

Créons d’abord une interface pour notre service.

package com.day.test.datasource;
import javax.sql.DataSource;

public interface DatasourceUtil {
    public DataSource getDataSource(String dataSourceName);
}

La mise en place. Comme vous pouvez le constater, en plus de masquer le DataSourceNotFoundException elle n'ajoute aucune valeur :).

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;
    }
}

 Cette classe utilise une spécification de services déclaratifs OSGi pour obtenir une instance de service DataSourcePool puis appelle sa getDataSource (dataSourceName) pour obtenir la source de données. Le module externe Maven SCR utilise les annotations de scr Java pour générer des descripteurs XML pour les services déclaratifs OSGi. Le fichier zip joint contient l'exemple POM.

Vous pouvez télécharger un exemple complet ici : datasourceutil.zip. Il inclut un POM maven pour le générer. Pour créer ce projet à l'aide de POM consultez Utiliser le CQ5 comme référentiel de maven.

Exemple de JSP

Il s'agit d'un package CRX qui contient un exemple de JSP - datasource-example-jsp.zip. C'est un composant CQ qui peut être ajouté à n’importe quelle page avec un système de paragraphes. Il peut être utilisé pour tester votre connexion à la source de données.

5.3 Remarque

Ajouté est un lot d'exemple à créer avec CRXDE / CRXDE Lite contenant le pilote d'installation oracle oracle_example_driver.zip, aller voir à /apps/oracle. Dans Activator.java se chargent la classe de pilote (pas forcément nécessaire dans les versions ultérieures). Vérifiez que vous disposez bien de la dernière version day.commons.datasource.jdbcpool (1.0.8) installée avant de l'utiliser.

S’applique à

CQ5.2.1, CQ5.3

Telechargement

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne