Olá Pessoal,
Afinal, o que é um DataSource?
DataSource é uma forma de guardar as configurações de conexão com o banco de dados, como por exemplo, deixá-las em um arquivo xml, evitando assim, que as mesmas não ficam fixas no seu código Java.
Neste exemplo, será criado um DataSource que será usado no servidor JBoss 4, a vantagem de usar o JBoss, é que o DS pode ser criado diretamente na pasta de deploy, proporcionando mais liberdade para o desenvolvedor.
A estrutura do arquivo xml do DS, é definida logo abaixo:
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/CLIENTEDS</jndi-name>
<connection-url>URL</connection-url>
<driver-class>DRIVER_CLASSE</driver-class>
<user-name>USUARIO</user-name>
<password>SENHA</password>
</local-tx-datasource>
</datasources>
Legenda:
CLIENTEDS = Nome da datasource que será configurada em sua aplicação
URL = Endereço de sua base
DRIVER_CLASSE = Driver de acesso ao banco de dados
USUARIO = Usuário de acesso base de dados
SENHA = Senha de acesso a base de dados
Por exemplo, vamos configurar, para acessar o banco de dados MySQL:
Crie um arquivo xml, com o nome de database-ds.xml, salve este arquivo no seguinte diretório:
DIRETORIO_DO_SEU_JBOSS/server/default/deploy
No conteúdo do arquivo, deixei configurado assim:
<?xml version="1.0" encoding="UTF-8" ?>
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/databaseDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/java</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>30</max-pool-size>
<idle-timeout-minutes>1</idle-timeout-minutes>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
</local-tx-datasource>
</datasources>
database-ds.xml
Obs.: Não esqueça de colocar o jar do driver do MySQL, no seguinte diretório:
DIRETORIO_DO_SEU_JBOSS/server/default/lib
Bom, para testar o DataSource, vamos criar um novo projeto web no Eclipse, chamado ExemploDataSource.
Crie um novo file, chamado persistence.xml, dentro da pasta WebContent/META-INF.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="PessoaJPAData" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/databaseDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
persistence.xml
Definimos o nome do persistence-unit;
Usamos o Hibernate como provedor JPA;
Colocamos o nome do DS no jta-data-source;
E, por fim, defiminos, que o Hibernate crie automaticamente nossas tabelas do BD.
Agora, vamos criar um Servlet, chamado ServletDS.
package com.blogspot.jabesfelipe.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
public class ServletDS extends HttpServlet {
private static final long serialVersionUID = 1L;
private void processarRequisicao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:jdbc/databaseDS");
Connection connection = dataSource.getConnection();
out.println("Conectado, através da JNDI!");
connection.close();
} catch(Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processarRequisicao(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processarRequisicao(request, response);
}
}
ServletDS.java
Através da JNDI, acessamos nosso DataSource, para testar, inicialize seu JBoss, e digite o endereço: http://localhost:8080/ExemploDataSource/ServletDS
Bom galera, este foi um exemplo de como criar um DataSource no JBoss, e usá-lo em uma aplicação.
Qualquer dúvida, crítica ou sugestão, fico à disposição.