Verbinding maken met SQL-databases connecting-to-sql-databases

Open een externe SQL-database zodat uw CQ-toepassingen kunnen werken met de gegevens:

Het JDBC-databasestuurprogramma bundelen bundling-the-jdbc-database-driver

Sommige gegevensbestandverkopers verstrekken bestuurders JDBC in een bundel OSGi, bijvoorbeeld, MySQL. Als het JDBC-stuurprogramma voor uw database niet beschikbaar is als OSGi-bundel, vraagt u het stuurprogramma JAR op en plaatst u deze in een OSGi-bundel. De bundel moet de pakketten uitvoeren die voor het in wisselwerking staan met de gegevensbestandserver worden vereist. De bundel moet ook de pakketten invoeren die het verwijzingen.

In het volgende voorbeeld wordt het Plug-in voor bundel voor Maven om het HSQLDB-stuurprogramma in een OSGi-bundel te plaatsen. De POM geeft de plug-in de opdracht het bestand hsqldb.jar dat als een afhankelijkheid is geïdentificeerd, in te sluiten. Alle org.hsqldb pakketten worden uitgevoerd.

De plug-in bepaalt automatisch welke pakketten u wilt importeren en geeft deze weer in het bestand MANIFEST.MF van de bundel. Als een van de pakketten niet beschikbaar is op de CQ-server, wordt de bundel niet gestart bij de installatie. Er zijn twee mogelijke oplossingen:

  • Geef in de POM aan dat de verpakkingen optioneel zijn. Gebruik deze oplossing wanneer de verbinding JDBC eigenlijk niet de pakketleden vereist. Gebruik het element Import-Package om optionele pakketten aan te geven, zoals in het volgende voorbeeld:

    <Import-Package>org.jboss.*;resolution:=optional,*</Import-Package>

  • Plaats de JAR-bestanden met de pakketten in een OSGi-bundel die de pakketten exporteert en implementeer de bundel. Gebruik deze oplossing wanneer de pakketleden tijdens code-uitvoering worden vereist.

Met kennis van de broncode kunt u bepalen welke oplossing u wilt gebruiken. U kunt ook een van beide oplossingen uitproberen en tests uitvoeren om de oplossing te valideren.

POM dat hsqldb.jar bundelt pom-that-bundles-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>

Met de volgende koppelingen worden de downloadpagina's voor bepaalde populaire databaseproducten geopend:

De JDBC Connection Pool Service configureren configuring-the-jdbc-connection-pool-service

Voeg een configuratie voor de dienst van de Pool van Verbindingen JDBC toe die de bestuurder JDBC gebruikt om gegevensbronvoorwerpen tot stand te brengen. Uw toepassingscode gebruikt deze service om het object te verkrijgen en verbinding te maken met de database.

JDBC-verbindingspool ( com.day.commons.datasource.jdbcpool.JdbcPoolService) is een fabrieksservice. Als u verbindingen vereist die verschillende eigenschappen, bijvoorbeeld, read-only of read-write toegang gebruiken, creeer veelvoudige configuraties.

Wanneer het werken met CQ, zijn er verscheidene methodes om de configuratiemontages voor dergelijke diensten te beheren; zie OSGi configureren voor volledige informatie.

De volgende eigenschappen zijn beschikbaar om een samengevoegde verbindingsdienst te vormen. De bezitsnamen zijn vermeld aangezien zij in de Console van het Web verschijnen. De corresponderende naam voor een sling:OsgiConfig knooppunt wordt tussen haakjes weergegeven. Voorbeeldwaarden worden weergegeven voor een HSQLDB-server en een database met een alias van mydb:

  • JDBC-stuurprogramma, klasse ( jdbc.driver.class): De Java™-klasse waarmee de interface java.sql.Driver wordt geïmplementeerd, bijvoorbeeld org.hsqldb.jdbc.JDBCDriver. Het gegevenstype is String.

  • JDBC-verbindingsURI ( jdbc.connection.uri): De URL van de database die moet worden gebruikt om de verbinding te maken, bijvoorbeeld jdbc:hsqldb:hsql//10.36.79.223:9001/mydb. De indeling van de URL moet geldig zijn voor gebruik met de methode getConnection van de klasse java.sql.DriverManager. Het gegevenstype is String.

  • Gebruikersnaam ( jdbc.username): De gebruikersnaam die moet worden gebruikt voor verificatie met de databaseserver. Het gegevenstype is String.

  • Wachtwoord ( jdbc.password): Het wachtwoord dat moet worden gebruikt voor verificatie van de gebruiker. Het gegevenstype is String.

  • Validatiezoekopdracht ( jdbc.validation.query): De SQL-instructie die moet worden gebruikt om te controleren of de verbinding is gelukt, bijvoorbeeld select 1 from INFORMATION_SCHEMA.SYSTEM_USERS. Het gegevenstype is String.

  • Alleen-lezen door standaard (default.readonly): selecteer deze optie als u wilt dat via de verbinding alleen-lezen toegang wordt verkregen. Het gegevenstype is Boolean.

  • Standaard automatisch toewijzen ( default.autocommit): Selecteer deze optie om afzonderlijke transacties te maken voor elke SQL-opdracht die naar de database wordt verzonden en elke transactie automatisch wordt toegewezen. Selecteer deze optie niet wanneer u transacties expliciet in de code uitvoert. Het gegevenstype is Boolean.

  • Pool Size ( pool.size): Het aantal gelijktijdige verbindingen dat ter beschikking van de database moet worden gesteld. Het gegevenstype is Long.

  • Wachttijd pool ( pool.max.wait.msec): De hoeveelheid tijd voordat een verbindingsaanvraag wordt verzonden. Het gegevenstype is Long.

  • Naam gegevensbron ( datasource.name): De naam van deze gegevensbron. Het gegevenstype is String.

  • Aanvullende serviceeigenschappen ( datasource.svc.properties): Een set naam-/waardeparen die u aan de verbindings-URL wilt toevoegen. Het gegevenstype is String[].

De service van de JDBC-verbindingspool is een fabriek. Daarom moet u een sling:OsgiConfig knoop om de verbindingsdienst te vormen, moet de naam van de knoop de fabrieksdienst PID omvatten die door wordt gevolgd -alias. De alias die u gebruikt moet uniek zijn voor alle configuratieknooppunten voor die PID. Een voorbeeldknooppuntnaam is com.day.commons.datasource.jdbcpool.JdbcPoolService-myhsqldbpool.

chlimage_1-7

Verbinding maken met de database connecting-to-the-database

Gebruik in uw Java™-code de DataSourcePool-service om een javax.sql.DataSource object voor de configuratie die u hebt gemaakt. De dienst DataSourcePool verstrekt getDataSource methode die een DataSource -object voor een bepaalde gegevensbronnaam. Als methodeargument, gebruik de waarde van de Naam Datasource (of datasource.name) die u hebt opgegeven voor de configuratie van de JDBC-verbindingspool.

In het volgende voorbeeld verkrijgt JSP-code een instantie van de hsqldbds-gegevensbron, wordt een eenvoudige SQL-query uitgevoerd en wordt het aantal geretourneerde resultaten weergegeven.

JSP die een gegevensbestandraadpleging uitvoert jsp-that-performs-a-database-lookup

<%@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>
NOTE
Als de methode getDataSource een uitzondering werpt omdat de gegevensbron niet wordt gevonden, zorg ervoor dat de de dienstconfiguratie van de Pool van Verbindingen correct is. Controleer de eigenschapnamen, waarden en gegevenstypen.
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2