Connessione ai database SQL
- Argomenti:
- Developing
Creato per:
- Developer
Accedi a un database SQL esterno in modo che le applicazioni CQ possano interagire con i dati:
Bundling del driver di database JDBC
Alcuni fornitori di database forniscono driver JDBC in un bundle OSGi, per esempio MySQL. Se il driver JDBC per il database non è disponibile come bundle OSGi, ottieni il driver JAR e inseriscilo in un bundle OSGi. Il bundle deve esportare i pacchetti necessari per interagire con il server di database. Il bundle deve anche importare i pacchetti a cui fa riferimento.
Nell'esempio seguente viene utilizzato il Plug-in bundle per Maven avvolgere il driver HSQLDB in un bundle OSGi. Il POM indica al plug-in di incorporare il file hsqldb.jar identificato come dipendenza. Vengono esportati tutti i pacchetti org.hsqldb.
Il plugin determina automaticamente quali pacchetti importare ed elenca nel file MANIFEST.MF del bundle. Se uno qualsiasi dei pacchetti non è disponibile sul server CQ, il bundle non si avvia al momento dell'installazione. Due possibili soluzioni sono le seguenti:
-
Indicare nel POM che i pacchetti sono facoltativi. Utilizza questa soluzione quando la connessione JDBC non richiede effettivamente i membri del pacchetto. Utilizza l’elemento Import-Package per indicare pacchetti facoltativi come nell’esempio seguente:
<Import-Package>org.jboss.*;resolution:=optional,*</Import-Package>
-
Racchiudi i file JAR che contengono i pacchetti in un bundle OSGi che esporta i pacchetti e distribuisci il bundle. Utilizza questa soluzione quando i membri del pacchetto sono richiesti durante l'esecuzione del codice.
La conoscenza del codice sorgente consente di decidere quale soluzione utilizzare. Puoi anche provare entrambe le soluzioni ed eseguire test per convalidare la soluzione.
POM che raggruppa 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>
I seguenti collegamenti consentono di aprire le pagine di download per alcuni dei più comuni prodotti di database:
Configurazione del servizio del pool di connessioni JDBC
Aggiungi una configurazione per il servizio JDBC Connections Pool che utilizza il driver JDBC per creare oggetti di origine dati. Il codice dell'applicazione utilizza questo servizio per ottenere l'oggetto e connettersi al database.
Pool di connessioni JDBC ( com.day.commons.datasource.jdbcpool.JdbcPoolService
) è un servizio di fabbrica. Se hai bisogno di connessioni che utilizzano proprietà diverse, ad esempio accesso in sola lettura o in lettura/scrittura, crea più configurazioni.
Quando si lavora con CQ esistono diversi metodi per gestire le impostazioni di configurazione per tali servizi; vedere Configurazione di OSGi per informazioni complete.
Per configurare un servizio di connessione in pool sono disponibili le seguenti proprietà. I nomi delle proprietà vengono elencati come visualizzati nella console Web. Nome corrispondente per un sling:OsgiConfig
viene visualizzato tra parentesi. Vengono visualizzati valori di esempio per un server HSQLDB e un database con un alias di mydb
:
-
Classe del driver JDBC (
jdbc.driver.class
): Classe Java da utilizzare che implementa l'interfaccia java.sql.Driver, ad esempioorg.hsqldb.jdbc.JDBCDriver
. Il tipo di dati èString
. -
URI di connessione JDBC (
jdbc.connection.uri
): URL del database da utilizzare per creare la connessione, ad esempiojdbc:hsqldb:hsql//10.36.79.223:9001/mydb
. Il formato dell'URL deve essere valido per l'uso con il metodo getConnection della classe java.sql.DriverManager. Il tipo di dati èString
. -
Nome utente (
jdbc.username
): Nome utente da utilizzare per l'autenticazione con il server di database. Il tipo di dati èString
. -
Password (
jdbc.password
): Password da utilizzare per l'autenticazione dell'utente. Il tipo di dati èString
. -
Query di convalida (
jdbc.validation.query
): Istruzione SQL da utilizzare per verificare che la connessione abbia esito positivo, ad esempioselect 1 from INFORMATION_SCHEMA.SYSTEM_USERS
. Il tipo di dati èString
. -
Sola lettura per impostazione predefinita (default.readonly): Selezionare questa opzione quando si desidera che la connessione fornisca l'accesso in sola lettura. Il tipo di dati è
Boolean
. -
Autocommit per impostazione predefinita (
default.autocommit
): Selezionare questa opzione per creare transazioni separate per ogni comando SQL inviato al database e ogni transazione viene impegnata automaticamente. Non selezionare questa opzione quando esegui transazioni in modo esplicito nel codice. Il tipo di dati èBoolean
. -
Dimensione pool (
pool.size
): Numero di connessioni simultanee da rendere disponibili al database. Il tipo di dati èLong
. -
Attesa pool (
pool.max.wait.msec
): Tempo di attesa prima del timeout di una richiesta di connessione. Il tipo di dati èLong
. -
Nome origine dati (
datasource.name
): Nome dell'origine dati. Il tipo di dati èString
. -
Proprietà del servizio aggiuntive (
datasource.svc.properties
): Set di coppie nome/valore da aggiungere all'URL di connessione. Il tipo di dati èString[]
.
Il servizio JDBC Connections Pool è una fabbrica. Pertanto, se utilizzi un sling:OsgiConfig
nodo per configurare il servizio di connessione, il nome del nodo deve includere il PID del servizio di fabbrica seguito da -alias
. L'alias utilizzato deve essere univoco per tutti i nodi di configurazione per quel PID. Un nome di nodo di esempio è com.day.commons.datasource.jdbcpool.JdbcPoolService-myhsqldbpool
.
Connessione al database
Nel codice Java, utilizza il servizio DataSourcePool per ottenere un javax.sql.DataSource
oggetto per la configurazione creata. Il servizio DataSourcePool fornisce la variabile getDataSource
metodo che restituisce un DataSource
oggetto per un nome di origine dati specificato. Come argomento del metodo, utilizza il valore del Nome origine dati (o datasource.name
) specificata per la configurazione del pool di connessioni JDBC.
Nell'esempio seguente il codice JSP ottiene un'istanza dell'origine dati hsqldbds, esegue una semplice query SQL e visualizza il numero di risultati restituiti.
JSP che esegue una ricerca di database
<%@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 Cloud
- Panoramica sullo sviluppo della Guida utente
- Introduzione per sviluppatori
- Guida introduttiva allo sviluppo per AEM Sites - Esercitazione WKND
- AEM Concetti di base
- Struttura dell’interfaccia utente AEM touch
- Concetti dell’interfaccia AEM touch
- Sviluppo AEM - Linee guida e best practice
- Utilizzo delle librerie lato client
- Sviluppo e differenze tra pagine
- Limitazioni per l’editor
- Quadro di riferimento per la protezione del CSRF
- Modellazione dei dati - Modello di David Nuescheler
- Contribuire a AEM
- Sicurezza
- Materiali di riferimento
- Creare un sito web completo (interfaccia classica)
- Progettazioni e Designer (interfaccia classica)
- Platform
- Guida di riferimento rapido per Sling
- Utilizzo di adattatori Sling
- Librerie di tag
- Modelli
- Utilizzo di Sling Resource Merger in AEM
- Sovrapposizioni
- Convenzioni di denominazione
- Creazione di un nuovo componente campo dell’interfaccia Granite
- Query Builder
- Assegnazione dei tag
- Personalizzazione delle pagine mostrate dal gestore errori
- Tipi di nodo personalizzati
- Aggiunta di font al rendering grafico
- Connessione ai database SQL
- Esternalizzazione degli URL
- Creazione e consumo di processi per lo scaricamento
- Configurazione dell’utilizzo dei cookie
- Come accedere programmaticamente a AEM JCR
- Integrazione dei servizi con la console JMX
- Sviluppo dell’editor in blocco
- Sviluppo di rapporti
- eCommerce
- Componenti
- Componenti core
- Sistema di stili
- Panoramica dei componenti
- Componenti AEM - Nozioni di base
- Sviluppo di componenti AEM
- Sviluppo di componenti AEM - Esempi di codice
- Esportatore JSON per Content Services
- Abilitazione dell’esportazione JSON per un componente
- Editor immagine
- Tag di decorazione
- Utilizzo di Nascondi condizioni
- Configurazione di più editor in-place
- Modalità Sviluppatore
- Verifica dell’interfaccia utente
- Componenti per frammenti di contenuto
- Ottenimento di informazioni di pagina in formato JSON
- Internazionalizzazione
- Componenti dell’interfaccia classica
- Gestione delle esperienze headless
- Senza testa e ibrido con AEM
- Abilitazione dell’esportazione JSON per un componente
- Applicazioni a pagina singola
- Introduzione a SPA e procedura dettagliata
- Tutorial WKND per SPA
- Guida introduttiva a SPA in AEM - React
- Guida introduttiva a SPA in AEM - Angular
- Implementazione di un Componente React per applicazioni a pagina singola (SPA)
- Approfondimenti su SPA
- Panoramica dell’editor di SPA
- Sviluppo di SPA per AEM
- Blueprint SPA
- Componente pagina SPA
- Mappatura di un modello dinamico a un componente per SPA
- Indirizzamento modello SPA
- Integrazione di SPA e Adobe Experience Platform Launch
- Rendering lato SPA e server
- Materiali di riferimento SPA
- API HTTP
- Frammenti di contenuto
- Frammenti esperienza
- Strumenti di sviluppo
- Strumenti di sviluppo
- Strumenti AEM Modernization Tools
- Editor finestre di dialogo
- Strumento di conversione finestra di dialogo
- Sviluppo con CRXDE Lite
- Gestione dei pacchetti con Maven
- Come sviluppare progetti AEM utilizzando Eclipse
- Come creare progetti AEM utilizzando Apache Maven
- Come sviluppare progetti AEM utilizzando IntelliJ IDEA
- Come utilizzare lo strumento VLT
- Come utilizzare lo strumento Proxy Server
- Estensione Bracket AEM
- Strumenti AEM Developer per Eclipse
- AEM Repo Tool
- Personalizzazione
- ContextHub
- Riferimento API di ContextHub Javascript
- Estensione di ContextHub
- Aggiunta di ContextHub alle pagine e accesso ai negozi
- Candidati allo store ContextHub di esempio
- Tipi di moduli di interfaccia utente ContextHub di esempio
- Diagnostica ContextHub
- Sviluppo per contenuti mirati
- ClientContext
- Estensione AEM
- Personalizzazione dell’authoring delle pagine
- Personalizzazione delle console
- Personalizzazione delle visualizzazioni delle proprietà pagina
- Configurazione della pagina per la modifica in serie delle proprietà di pagina
- Personalizzazione ed estensione dei frammenti di contenuto
- Estensione dei flussi di lavoro
- Sviluppo ed estensione dei flussi di lavoro
- Creazione di modelli di flussi di lavoro
- Estensione della funzionalità per flussi di lavoro
- Interazione con flussi di lavoro a livello di programmazione
- Guida di riferimento per i passaggi dei flussi di lavoro
- Best practice per i flussi di lavoro
- Guida di riferimento per il processo dei flusso di lavoro
- Estensione di Multi Site Manager
- Tracciamento e analisi
- Cloud Services
- Creazione di estensioni personalizzate
- Forms
- Integrazione dei servizi con la console JMX
- Sviluppo dell’editor in blocco
- Estensione dell’interfaccia classica
- Test
- Pianificazione
- Quali ambienti di test saranno necessari?
- Definizione dei casi di test
- Test - quando e con chi?
- Compilazione del piano di test
- Tracciamento dei risultati e fornitura di feedback
- Strumenti di test e tracciamento
- Accettazione e cancellazione
- La prossima versione…
- Elenchi di controllo
- Giorno difficile
- Verifica dell’interfaccia utente
- Best practice
- Panoramica delle best practice
- Linee guida per lo sviluppo AEM e best practice
- Tecniche consigliate per lo sviluppo
- Architettura dei contenuti
- Architettura del software
- Implementazione di riferimento di We.Retail
- Suggerimenti sulla codifica
- Problemi di codice
- Bundle OSGI
- Integrazione JCR
- Esempi di codice
- Risoluzione dei problemi relativi alle query lente
- Web per dispositivi mobili