Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

DataSource e CDI

Guilherme Silveira, excelente Curso!

Tenho uma dúvida de como integrar o JDBC DataSource com o CDI, no caso de uma aplicação Web. Pelo que entendi pode existir "apenas um DataSource por aplicação", caso contrário, o proposito de reciclagem de conexões não seria alcançando e pior: o servidor seria sobrecarregado.

Pelo meu entendimento eu teria duas opções para alcançar essa centralização e garantir um único DataSource instanciado por projeto: 1. Criar um Singleton para a classe gerenciadora do Pool; 2. Usar CDI com escopo @ApplicationScoped. Como já utilizo o recurso de CDI e acho uma abordagem elegante para evitar acoplamento e instanciação exagerada, resolvi criar uma classe e um método produtor conforme código abaixo.

@ApplicationScoped
public class JDBCConnectionProducer implements Serializable {

    private static final long serialVersionUID = 1L;

    private DataSource dataSource;

    public JDBCConnectionProducer() {
        inicializarDataSource();
    } 

    @Produces
    @RequestScoped
    public Connection createConnection() {
        return dataSource.getConnection();
    }

    private void inicializarDataSource() {
        JDBCPool pool = new JDBCPool();
        pool.setUrl("jdbc:hsqldb:hsql://localhost/loja-virtual");
        pool.setUser("SA");
        pool.setPassword("");

        dataSource = pool;
    }
// Na invocação ->
   @Inject
   private Connection connection;

Minha duvidas: 1. Estou fazendo essa integração da forma correta? 2. Existe algum jeito ainda mais fácil/indicado para tratar na Web?

Obrigado!

1 resposta
solução!

Ola, Bodão!

Podemos ter quantos dataSources por aplicação for necessário.

Para isso, temos que configurar no .xml do seu Servidor de Aplicação, no caso do wildFly pode ser no [code]standalone-full.xml[code].

Ex: [code] jdbc:mysql://localhost:3306/data-base-1 mysql xxxxx

jdbc:mysql://localhost:3306/data-base-2 mysql xxxxx [code]

Sobre o pool, continua a mesma regra para cada data-source criado.

Abraço!