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!