Conexão com Bancos de Dados SQL
- Tópicos:
- Developing
Criado para:
- Developer
Acesse um banco de dados SQL externo para que seus aplicativos CQ possam interagir com os dados:
Pacote do driver de banco de dados JDBC
Alguns fornecedores de banco de dados fornecem drivers JDBC em um pacote OSGi, por exemplo MySQL. Se o driver JDBC do seu banco de dados não estiver disponível como um pacote OSGi, obtenha o JAR do driver e coloque-o em um pacote OSGi. O pacote deve exportar os pacotes necessários para interagir com o servidor de banco de dados. O pacote também deve importar os pacotes que ele faz referência.
O exemplo a seguir usa a variável Plug-in do pacote para Maven para embrulhar o driver HSQLDB em um pacote OSGi. O POM instrui o plug-in a incorporar o arquivo hsqldb.jar identificado como uma dependência. Todos os pacotes org.hsqldb são exportados.
O plug-in determina automaticamente quais pacotes serão importados e os lista no arquivo MANIFEST.MF do pacote. Se algum dos pacotes não estiver disponível no servidor CQ, o pacote não será iniciado após a instalação. Duas soluções possíveis são as seguintes:
-
Indique no POM que os pacotes são opcionais. Use essa solução quando a conexão JDBC não exigir os membros do pacote. Use o elemento Importar-Pacote para indicar pacotes opcionais, como no exemplo a seguir:
<Import-Package>org.jboss.*;resolution:=optional,*</Import-Package>
-
Encapsule os arquivos JAR que contêm os pacotes em um pacote OSGi que exporta os pacotes e implante o pacote. Use essa solução quando os membros do pacote forem necessários durante a execução do código.
O conhecimento do código-fonte permite que você decida qual solução usar. Você também pode tentar qualquer solução e realizar testes para validar a solução.
POM que empacota 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>
Os links a seguir abrem as páginas de download de alguns produtos de banco de dados populares:
Configuração do Serviço de Pool de Conexões JDBC
Adicione uma configuração para o serviço Pool de conexões JDBC que usa o driver JDBC para criar objetos de fonte de dados. O código de aplicativo usa esse serviço para obter o objeto e se conectar ao banco de dados.
Pool de conexões JDBC ( com.day.commons.datasource.jdbcpool.JdbcPoolService
) é um serviço de fábrica. Se você precisar de conexões que usam propriedades diferentes, por exemplo, acesso somente leitura ou leitura/gravação, crie várias configurações.
Ao trabalhar com o CQ, há vários métodos de gerenciamento das configurações desses serviços; see Configuração do OSGi para obter detalhes completos.
As seguintes propriedades estão disponíveis para configurar um serviço de conexão agrupado. Os nomes das propriedades são listados conforme aparecem no Console da Web. O nome correspondente de um sling:OsgiConfig
é exibido entre parênteses. Os valores de exemplo são mostrados para um servidor HSQLDB e um banco de dados que tem um alias de mydb
:
-
Classe de Driver JDBC (
jdbc.driver.class
): A classe Java a ser usada que implementa a interface java.sql.Driver, por exemploorg.hsqldb.jdbc.JDBCDriver
. O tipo de dados éString
. -
URI de Conexão JDBC (
jdbc.connection.uri
): O URL do banco de dados a ser usado para criar a conexão, por exemplojdbc:hsqldb:hsql//10.36.79.223:9001/mydb
. O formato do URL deve ser válido para uso com o método getConnection da classe java.sql.DriverManager. O tipo de dados éString
. -
Nome de usuário (
jdbc.username
): O nome de usuário a ser usado para autenticação com o servidor de banco de dados. O tipo de dados éString
. -
Senha (
jdbc.password
): A senha a ser usada para autenticação do usuário. O tipo de dados éString
. -
Consulta de validação (
jdbc.validation.query
): A instrução SQL a ser usada para verificar se a conexão foi bem-sucedida, por exemploselect 1 from INFORMATION_SCHEMA.SYSTEM_USERS
. O tipo de dados éString
. -
Somente leitura por padrão (default.readonly): Selecione esta opção quando quiser que a conexão forneça acesso somente leitura. O tipo de dados é
Boolean
. -
Confirmação Automática Por Padrão (
default.autocommit
): Selecione esta opção para criar transações separadas para cada comando SQL que é enviado para o banco de dados e cada transação é automaticamente confirmada. Não selecione essa opção quando estiver confirmando transações explicitamente em seu código. O tipo de dados éBoolean
. -
Tamanho do Pool (
pool.size
): O número de conexões simultâneas a serem disponibilizadas para o banco de dados. O tipo de dados éLong
. -
Aguardar pool (
pool.max.wait.msec
): O tempo decorrido antes de uma solicitação de conexão expirar. O tipo de dados éLong
. -
Nome da origem de dados (
datasource.name
): O nome dessa fonte de dados. O tipo de dados éString
. -
Propriedades adicionais do serviço (
datasource.svc.properties
): Um conjunto de pares de nome/valor que você deseja anexar ao URL de conexão. O tipo de dados éString[]
.
O serviço Pool de Conexões JDBC é de fábrica. Portanto, se você usar um sling:OsgiConfig
nó para configurar o serviço de conexão, o nome do nó deve incluir o PID do serviço de fábrica seguido por -alias
. O alias que você usa deve ser exclusivo para todos os nós de configuração desse PID. Um exemplo de nome de nó é com.day.commons.datasource.jdbcpool.JdbcPoolService-myhsqldbpool
.
Conexão com o banco de dados
No seu código Java, use o serviço DataSourcePool para obter um javax.sql.DataSource
objeto para a configuração criada. O serviço DataSourcePool fornece a variável getDataSource
que retorna um método DataSource
para um determinado nome da fonte de dados. Como argumento do método, use o valor do Nome da Fonte de Dados (ou datasource.name
) que você especificou para a configuração do Pool de Conexões JDBC.
O exemplo de código JSP a seguir obtém uma instância da fonte de dados hsqldbds, executa uma consulta SQL simples e exibe o número de resultados que são retornados.
JSP que executa uma pesquisa de banco de dados
<%@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
- Visão geral do Guia do usuário para desenvolvimento
- Introdução para desenvolvedores
- Introdução ao desenvolvimento do AEM Sites - Tutorial de WKND
- AEM Conceitos principais
- Estrutura da interface de usuário habilitada para toque do AEM
- Conceitos da interface de usuário habilitada para toque do AEM
- Desenvolvimento de AEM - Diretrizes e práticas recomendadas
- Uso de bibliotecas do cliente
- Desenvolvimento e diff de página
- Limitações do editor
- Quadro de proteção do QREF
- Modelagem de Dados - Modelo de David Nuescheler
- Contribuição para AEM
- Segurança
- Materiais de referência
- Criar um site com recursos completos (interface clássica)
- Designs and the Designer (Classic UI)
- Plataforma
- Folha de características do Sling
- Uso de adaptadores Sling
- Bibliotecas de tags
- Modelos
- Uso da Fusão de Recursos do Sling em AEM
- Sobreposições
- Convenções de nomenclatura
- Criação de um novo componente de campo da interface do usuário do Granite
- Query Builder
- Marcação com tags
- Personalização de páginas mostradas pelo Manipulador de erros
- Tipos de nó personalizados
- Adicionar fontes para renderização de gráficos
- Conexão com Bancos de Dados SQL
- Exteriorização de URLs
- Criação e consumo de trabalhos para descarregamento
- Configuração do uso de cookies
- Como acessar programaticamente o JCR AEM
- Integração de serviços com o console JMX
- Desenvolvimento do editor em massa
- Desenvolvimento de relatórios
- eCommerce
- Componentes
- Componentes principais
- Sistema de estilos
- Visão geral dos componentes
- Componentes AEM - Noções básicas
- Desenvolvimento de componentes de AEM
- Desenvolvimento de componentes de AEM - Amostras de código
- Exportador JSON para serviços de conteúdo
- Ativação de exportação em JSON para um componente
- Editor de imagem
- Tag de decoração
- Uso de condições de ocultação
- Configuração de vários editores no local
- Modo de desenvolvedor
- Testar sua interface do usuário
- Componentes para fragmentos de conteúdo
- Obter informações de página no formato JSON
- Internacionalização
- Componentes da interface clássica
- Gerenciamento de experiência headless
- Sem cabeçalho e híbrido com AEM
- Ativação da exportação em JSON para um componente
- Aplicativos de página única
- Introdução e passo a passo do SPA
- Tutorial WKND do SPA
- Introdução ao SPA no AEM - React
- Introdução ao SPA no AEM - Angular
- Implementação de um componente de reação para SPA
- Aprofundamentos de SPA
- Visão geral do editor de SPA
- Desenvolvimento de SPAs para o AEM
- Blueprint do SPA
- Componente de página SPA
- Modelo dinâmico para mapeamento de componentes para SPA
- Roteamento do Modelo de SPA
- Integração do SPA e Adobe Experience Platform Launch
- Renderização de SPA e do servidor
- Materiais de referência SPA
- API HTTP
- Fragmentos de conteúdo
- Fragmentos de experiência
- Ferramentas de desenvolvimento
- Ferramentas de desenvolvimento
- Ferramentas de Modernização do AEM
- Editor de caixa de diálogo
- Ferramenta de conversão de caixa de diálogo
- Desenvolvimento com o CRXDE Lite
- Gerenciamento de pacotes usando o Maven
- Como desenvolver projetos AEM usando o Eclipse
- Como criar projetos AEM usando o Apache Maven
- Como desenvolver projetos AEM usando o IntelliJ IDEA
- Como usar a ferramenta VLT
- Como usar a ferramenta Servidor proxy
- Extensão de colchetes AEM
- Ferramentas de desenvolvedor do AEM para Eclipse
- Ferramenta AEM Repo
- Personalização
- ContextHub
- Referência de API do Javascript do ContextHub
- Extensão do ContextHub
- Adicionar o ContextHub às páginas e acessar armazenamentos
- Exemplos de candidatos à loja do ContextHub
- Exemplos de tipos de módulo da interface do usuário do ContextHub
- Diagnósticos do ContextHub
- Desenvolvimento de conteúdo direcionado
- ClientContext
- Extensão de AEM
- Personalização da criação de página
- Personalização dos consoles
- Personalização de exibições das propriedades da página
- Configurar sua página para a edição de itens em massa das propriedades da página
- Personalização e extensão de fragmentos de conteúdo
- Extensão de fluxos de trabalho
- Extensão do Gerenciador de vários sites
- Rastreamento e análise
- Cloud Services
- Criação de extensões personalizadas
- Forms
- Integração de serviços com o console JMX
- Desenvolvimento do editor em massa
- Extensão da interface clássica
- Testes
- Planejamento
- Quais ambientes de teste serão necessários?
- Definição dos casos de teste
- Teste - quando e com quem?
- Compilação do plano de teste
- Rastrear resultados e fornecer feedback
- Ferramentas de teste e rastreamento
- Aceitação e aprovação
- A próxima versão…
- Listas de verificação
- Dia difícil
- Testar sua interface do usuário
- Práticas recomendadas
- Visão geral das práticas recomendadas
- Diretrizes de desenvolvimento de AEM e práticas recomendadas
- Práticas recomendadas de desenvolvimento
- Arquitetura de conteúdo
- Arquitetura de software
- Implementação de referência We.Retail
- Implementação de referência We.Retail
- Experimentação de fragmentos de conteúdo no We.Retail
- Como experimentar os Componentes principais no We.Retail
- Tentando modelos editáveis no We.Retail
- Tentando um layout responsivo no We.Retail
- Tentar a estrutura do site globalizado no We.Retail
- Experiência de fragmentos de experiência no We.Retail
- Dicas de codificação
- armadilhas de código
- Pacotes OSGI
- Integração JCR
- Amostras de código
- Solução de problemas de consultas lentas
- Web móvel