Cara, valew pela ajuda.
É o seguinte… eu esqueci de citar que estou fazendo isso em JavaScript. É que atualmente, no meu tempo livre, tenho estado criando alguns objetos em JavaScript, com o intuito de tornar aplicações em JavaScript mais fáceis de se criar e, como principal objetivo, OOP.
Estou fazendo a parte da conexão ao banco de dados (totalmente via JS + ADO), e me surgiu a dúvida de um pooling. O resultado ficou da seguinte forma:
var ConnectionFactory = new _ConnectionFactory();
function _ConnectionFactory()
{
this.minConn = 3;
this.maxConn = 5;
this.pool = [];
this.db = "access:phonebook.mdb";
this.user = new String();
this.pass = new String();
this.newConnection = _ConnectionFactory_newConnection;
this.getConnection = _ConnectionFactory_getConnection;
for (conn = 0; conn < this.minConn; conn++)
{
var newConn = this.newConnection();
newConn.release();
this.pool.push(newConn);
}
}
function _ConnectionFactory_newConnection()
{ return DriverManager.getConnection(this.db, this.user, this.pass); }
function _ConnectionFactory_getConnection()
{
var pool = this.pool;
for (conn in pool)
{
if (pool[conn].released())
{
pool[conn].unrelease();
return pool[conn];
}
}
if (pool.length < this.maxConn)
{
pool[pool.length] = this.newConnection();
pool[pool.length - 1].release();
return this.getConnection();
}
else
{ throw new Error("Full connection pool."); }
}
A solução foi eu criar um visualizador de status nos objetos conexão. Usando métodos de release() e unrelease() eu posso setar o estado da conexão e verificar através de um released() se a conexão está sendo usada por algum código ou não; com base nisso, o ConnectionFactory retorna uma conexão do pooling, cria uma nova, ou lança uma excessão (Error). As conexões são criadas através de um outro objeto que criei chamado DriverManager. Sim, eu estou usando nomes de classes do Java para criar os objetos em JavaScript. Estou agora fazendo a classe Statement e a ResultSet pra trabalhar sobre o Connection.
De acordo com o script que postei acima, o usuário pode usar o método ConnectionFactory getConnection() para recuperar uma conexão do pooling ou então usar o ConnectionFactory newConnection() caso ele queira NECESSARIAMENTE uma nova conexão.
De qualquer forma, muito obrigado pela atenção.