Connexion à des bases de données SQL
- Rubriques :
- Developing
Créé pour :
- Developer
Accédez à une base de données SQL externe, de sorte que vos applications CQ puissent interagir avec les données :
Regroupement du pilote de base de données JDBC
Certains fournisseurs de base de données proposent des pilotes JDBC dans un lot OSGi ; MySQL, par exemple. Si le pilote JDBC correspondant à votre base de données n’est pas disponible sous la forme d’un lot OSGi, procurez-vous le fichier JAR du pilote et enveloppez-le dans un lot OSGi. Le lot doit exporter les packages nécessaires pour interagir avec le serveur de base de données. Il doit également importer les packages auxquels il fait référence.
L’exemple suivant utilise la méthode Module externe Bundle pour Maven pour encapsuler le pilote HSQLDB dans un lot OSGi. Le POM demande au module externe d’incorporer le fichier hsqldb.jar identifié comme une dépendance. Tous les packages org.hsqldb sont exportés.
Le module externe détermine automatiquement les modules à importer et les répertorie dans le fichier MANIFEST.MF du lot. Si l’un des packages n’est pas disponible sur le serveur CQ, le lot ne démarre pas lors de l’installation. Deux solutions possibles sont les suivantes :
-
Indiquez dans le POM que les packages sont facultatifs. Utilisez cette solution lorsque la connexion JDBC ne nécessite pas réellement les membres du package. Utilisez l’élément Import-Package pour indiquer les packages facultatifs comme dans l’exemple suivant :
<Import-Package>org.jboss.*;resolution:=optional,*</Import-Package>
-
Encapsulez les fichiers JAR contenant les modules dans un lot OSGi qui exporte les modules et déployez le lot. Utilisez cette solution lorsque les membres du module sont requis pendant l’exécution du code.
La connaissance du code source vous permet de décider quelle solution utiliser. Vous pouvez également essayer l’une des solutions et effectuer des tests pour valider la solution.
POM qui regroupe hsqldb.jar
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.adobe.example.myapp</groupId>
<artifactId>hsqldb-jdbc-driver-bundle</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>wrapper-bundle-hsqldb-driver</name>
<url>www.adobe.com</url>
<description>Exports the HSQL JDBC driver</description>
<packaging>bundle</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>1.4.3</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>*</Embed-Dependency>
<_exportcontents>org.hsqldb.*</_exportcontents>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
</dependency>
</dependencies>
</project>
Les liens suivants ouvrent les pages de téléchargement de certains produits de base de données populaires :
Configuration du service Pool de connexions JDBC
Ajoutez une configuration pour le service Pool de connexions JDBC qui utilise le pilote JDBC pour créer des objets de source de données. Votre code d’application utilise ce service pour obtenir l’objet et se connecter à la base de données.
Le Pool de connexions JDBC (com.day.commons.datasource.jdbcpool.JdbcPoolService
) est un service d’usine. Si vous avez besoin de connexions qui utilisent des propriétés différentes, par exemple un accès en lecture seule ou en lecture/écriture, créez plusieurs configurations.
Lorsque vous utilisez CQ, plusieurs méthodes permettent de gérer les paramètres de configuration pour ces services. see Configuration d’OSGi pour plus d’informations.
Les propriétés suivantes sont disponibles pour configurer un service de connexion en pool. Les noms des propriétés sont répertoriés tels qu’ils apparaissent dans la console web. Le nom correspondant à un nœud sling:OsgiConfig
apparaît entre parenthèses. Des exemples de valeurs sont affichés pour un serveur HSQLDB et une base de données dont le pseudonyme est mydb
:
-
Classe de pilotes JDBC (
jdbc.driver.class
) : classe Java à utiliser pour implémenter l’interface java.sql.Driver ;org.hsqldb.jdbc.JDBCDriver
, par exemple. Le type de données estString
. -
URI de connexion JDBC (
jdbc.connection.uri
) : URL de la base de données à utiliser pour créer la connexion ;jdbc:hsqldb:hsql//10.36.79.223:9001/mydb
, par exemple. Le format de l’URL doit être valide pour être utilisé avec la méthode getConnection de la classe java.sql.DriverManager. Le type de données estString
. -
Nom d’utilisateur (
jdbc.username
) : nom d’utilisateur à employer pour s’authentifier auprès du serveur de base de données. Le type de données estString
. -
Mot de passe (
jdbc.password
) : mot de passe à utiliser pour l’authentification de l’utilisateur. Le type de données estString
. -
Requête de validation (
jdbc.validation.query
) : instruction SQL à utiliser pour s’assurer que la connexion a bien été établie ;select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
, par exemple. Le type de données estString
. -
Lecture seule par défaut (default.readonly) : sélectionnez cette option si vous voulez que la connexion fournisse un accès en lecture seule. Le type de données est
Boolean
. -
Validation automatique par défaut (
default.autocommit
) : sélectionnez cette option pour créer des transactions distinctes pour chaque commande SQL envoyée à la base de données ; chaque transaction est alors automatiquement validée. Ne sélectionnez pas cette option lorsque vous validez explicitement des transactions dans votre code. Le type de données estBoolean
. -
Taille du pool (
pool.size
) : nombre de connexions simultanées qui doivent être disponibles pour la base de données. Le type de données estLong
. -
Attente de pool (
pool.max.wait.msec
) : délai avant l’expiration de la requête de connexion. Le type de données estLong
. -
Nom de la source de données (
datasource.name
) : nom de cette source de données. Le type de données estString
. -
Propriétés de service supplémentaires (
datasource.svc.properties
) : ensemble de paires nom/valeur que vous souhaitez ajouter à l’URL de connexion. Le type de données estString[]
.
Le Pool de connexions JDBC est un service d’usine. Par conséquent, si vous utilisez un nœud sling:OsgiConfig
pour configurer le service de connexion, le nom du nœud doit inclure le PID du service d’usine, suivi de -alias
. Le pseudonyme que vous utilisez doit être unique pour tous les nœuds de configuration de ce PID. com.day.commons.datasource.jdbcpool.JdbcPoolService-myhsqldbpool
est un exemple de nom de nœud.
Connexion à la base de données
Dans votre code Java, utilisez le service DataSourcePool pour obtenir un objet javax.sql.DataSource
pour la configuration que vous avez créée. Le service DataSourcePool fournit la méthode getDataSource
qui renvoie un objet DataSource
pour un nom de source de données spécifique. Comme argument de méthode, utilisez la valeur de la propriété Nom de la source de données (ou datasource.name
) que vous avez spécifiée pour la configuration du service Pool de connexions JDBC.
L’exemple de code JSP suivant récupère une instance de la source de données hsqldbds, exécute une requête SQL simple et affiche le nombre de résultats renvoyés.
JSP qui effectue une recherche de base de données
<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false"%><%
%><%@ page import="com.day.commons.datasource.poolservice.DataSourcePool" %><%
%><%@ page import="javax.sql.DataSource" %><%
%><%@ page import="java.sql.Connection" %><%
%><%@ page import="java.sql.SQLException" %><%
%><%@ page import="java.sql.Statement" %><%
%><%@ page import="java.sql.ResultSet"%><%
%><html>
<cq:include script="head.jsp"/>
<body>
<%DataSourcePool dspService = sling.getService(DataSourcePool.class);
try {
DataSource ds = (DataSource) dspService.getDataSource("hsqldbds");
if(ds != null) {
%><p>Obtained the datasource!</p><%
%><%final Connection connection = ds.getConnection();
final Statement statement = connection.createStatement();
final ResultSet resultSet = statement.executeQuery("SELECT * from INFORMATION_SCHEMA.SYSTEM_USERS");
int r=0;
while(resultSet.next()){
r=r+1;
}
resultSet.close();
%><p>Number of results: <%=r%></p><%
}
}catch (Exception e) {
%><p>error! <%=e.getMessage()%></p><%
}
%></body>
</html>
Experience Manager
- Aperçu du guide de l’utilisateur pour le développement
- Présentation pour l’équipe de développement
- Prise en main du développement d’AEM Sites – Tutoriel WKND
- Concepts de base d’AEM
- Structure de l’interface utilisateur tactile d’AEM
- Concepts de l’interface utilisateur (IU) tactile d’AEM
- Développement sur AEM – Conseils et bonnes pratiques
- Utilisation de bibliothèques côté client
- Développement et outil de comparaison des pages
- Limites de l’éditeur
- Le Framework de protection CSRF
- Modélisation de données – Modèle de David Nuescheler
- Contribution à AEM
- Sécurité
- Documents de référence
- Création d’un site web complet (IU classique)
- Conceptions et Designer (IU classique)
- Platform
- Aide-mémoire pour Sling
- Utilisation des adaptateurs Sling
- Bibliothèques de balises
- Modèles
- Utilisation de Sling Resource Merger dans AEM
- Recouvrements
- Conventions de nommage
- Création d’un composant de champ d’IU Granite
- Query Builder
- Balisage
- Personnalisation des pages affichées par le gestionnaire d’erreurs
- Types de nœuds personnalisés
- Ajout de polices pour le rendu graphique
- Connexion à des bases de données SQL
- Externalisation d’URL
- Création et utilisation de tâches pour le déchargement
- Configuration de l’utilisation de cookies
- Comment accéder au JCR AEM par programmation
- Intégration de services à la console JMX
- Développement de l’éditeur en bloc
- Élaboration de rapports
- eCommerce
- Composants
- Composants principaux
- Système de style
- Aperçu des composants
- Composants AEM - Notions de base
- Développement de composants AEM
- Développement de composants AEM – Échantillons de code
- Exportateur JSON pour Content Services
- Activation de l’exportateur JSON pour un composant
- Éditeur d’image
- Balise décorative
- Utilisation de conditions de masquage
- Configuration de plusieurs éditeurs statiques
- Mode Développeur
- Tester votre IU
- Composants pour les fragments de contenu
- Obtention d’informations sur la page au format JSON
- Internationalisation
- Composants de l’interface utilisateur classique
- Gestion de l’expérience découplée
- Sans affichage et hybride avec AEM
- Activation de l’exportateur JSON pour un composant
- Applications sur une seule page
- Introduction et présentation des applications monopage (SPA)
- Tutoriel sur SPA WKND
- Prise en main des SPA dans AEM avec React
- Prise en main des SPA dans AEM avec Angular
- Mise en œuvre d’un composant React pour SPA
- Immersion dans les SPA
- Présentation de l’éditeur de SPA
- Développement de SPA pour AEM
- Plan directeur d’applications sur une seule page (SPA)
- Composant de page SPA
- Mappage dynamique de modèle à composant pour les SPA
- Routage du modèle de SPA
- Intégration de SPA et d’Adobe Experience Platform Launch
- SPA et rendu côté serveur (SSR)
- Documents de référence SPA
- API HTTP
- Fragments de contenu
- Fragments d’expérience
- Outils de développement
- Outils de développement
- Outils de modernisation d’AEM
- Éditeur de boîtes de dialogue
- Outil de conversion de boîte de dialogue
- Développement dans CRXDE Lite
- Gestion des packages à l’aide de Maven
- Développement de projets AEM à l’aide d’Eclipse
- Création de projets AEM à l’aide d’Apache Maven
- Développement de projets AEM à l’aide de IntelliJ IDEA
- Utilisation de l’outil VLT
- Utilisation de l’outil de serveur proxy
- Extension AEM Brackets
- Outils de développement AEM pour Eclipse
- Outil AEM Repo
- Personnalisation
- ContextHub
- Guide de référence pour l’API JavaScript ContextHub
- Extension de ContextHub
- Ajout de ContextHub à des pages et accès à des magasins
- Exemples de magasins candidats ContextHub
- Exemples de types de module d’IU ContextHub
- Diagnostic ContextHub
- Développement de composants pour du contenu ciblé
- ClientContext
- Extension d’AEM
- Personnalisation de la création de pages
- Personnalisation des consoles
- Personnalisation des vues des propriétés de la page
- Configuration d’une page pour la modification en bloc des propriétés de page
- Personnalisation et extensions de fragments de contenu
- Extension des workflows
- Extension du Multi-Site Manager
- Suivi et analyses
- Services cloud
- Création d’extensions personnalisées
- Formulaires
- Intégration de services à la console JMX
- Développement de l’éditeur en bloc
- Extension de l’interface utilisateur classique
- Tests
- Planification
- Quels environnements de test sont nécessaires ?
- Définition de cas de test
- Les tests - Quand et avec qui ?
- Élaboration d’un plan de tests
- Suivi des résultats et formulation de commentaires
- Outils de test et de suivi
- Acceptation et approbation
- La prochaine version…
- Listes de contrôle
- Tough Day
- Test de votre interface utilisateur
- Bonnes pratiques
- Présentation des bonnes pratiques
- Développement sur AEM – Conseils et bonnes pratiques
- Bonnes pratiques de développement
- Architecture de contenu
- Architecture logicielle
- Implémentation de référence We.Retail
- Implémentation de référence We.Retail
- Test des fragments de contenu dans We.Retail
- Test des composants principaux dans We.Retail
- Test des modèles modifiables dans We.Retail
- Test d’une mise en page en responsive design dans We.Retail
- Test de la structure de site globalisée dans We.Retail
- Test des fragments d’expériences dans We.Retail
- Conseils pour bien coder
- Les pièges du codage
- Lots OSGi
- Intégration JCR
- Exemples de code
- Résolution des problèmes de lenteur des requêtes
- Web mobile