Escolar Documentos
Profissional Documentos
Cultura Documentos
De volta ao topo
Pool de conexão
O estabelecimento de conexões JDBC é caro em termos de recursos,
especialmente quando a API JDBC é usada em um ambiente de
servidor de camada intermediária, como quando o DataDirect
Connect para JDBC ou DataDirect SequeLink para JDBC está sendo
executado em um servidor web habilitado para Java. Neste tipo de
ambiente, o desempenho pode ser melhorado significativamente
quando o pool de conexão é usado. O agrupamento de
conexões significa que as conexões são reutilizadas em vez de serem
criadas sempre que uma conexão é solicitada. Para facilitar a
reutilização da conexão, um módulo de agrupamento de conexão
mantém um cache de memória de conexões de banco de dados,
chamado pool de conexão , como uma camada em cima de qualquer
produto de driver JDBC padrão.
Por exemplo:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/SequeLink");
Por exemplo:
Connection con = ds.getConnection("scott", "tiger");
// Do some database activities using the connection...
con.close();
De volta ao topo
ConnectionPoolDataSource
PooledConnection
ConnectionEventListener
A Figura 1 mostra esse quadro geral.
Figura 1. Arquitetura de agrupamento de conexão do JDBC 3.0
JDBCDriverVendorDataSource
Um fornecedor de driver JDBC deve fornecer uma classe que
implemente a interface padrão do ConnectionPoolDataSource. Esta
interface fornece ganchos que fornecedores terceirizados podem usar
para implementar o agrupamento como uma camada em cima de seus
drivers JDBC. A interface ConnectionPoolDataSource atua como uma
"fábrica" que cria objetos PooledConnection.
JDBCDriverVendorPooledConnection
Um fornecedor de driver JDBC deve fornecer uma classe que
implemente a interface padrão PooledConnection. Essa interface
permite que fornecedores terceirizados implementem o agrupamento
em cima de seus drivers JDBC. Um objeto PooledConnection atua
como uma "fábrica" que cria objetos Connection. Um objeto
PooledConnection mantém a conexão física com o banco de dados; O
objeto Conexão criado pelo objeto PooledConnection é simplesmente
um identificador para a conexão física.
PoolingVendorDataSource
Um fornecedor de terceiros deve fornecer uma classe que implemente
a interface DataSource. Esta interface é o ponto de entrada que
permite a interação com seu módulo de pool. A classe do fornecedor
de agrupamento usa o objeto PooledConnectionDataSource do driver
JDBC para criar as Conexões Pooled que o pool gerencia.
PoolingVendorConnectionCache
A API JDBC 3.0 não especifica as interfaces a serem usadas entre o
objeto DataSource e o cache de conexão. O fornecedor de
agrupamento determina como esses componentes irão
interagir. Normalmente, um módulo de cache de conexão contém uma
ou várias classes. Na Figura 1, a classe
PoolingVendorConnectionCache é usada como uma maneira simples
de transmitir esse conceito. O módulo de cache de conexão deve ter
uma classe que implemente a interface padrão
ConnectionEventListener. A interface ConnectionEventListener recebe
objetos ConnectionEvent de objetos PooledConnection quando uma
conexão se fecha ou ocorre um erro de conexão. Quando uma
conexão, criada por um PooledConnection, fecha, o módulo de cache
de conexão retorna o objeto PooledConnection para o cache.
Quando um aplicativo faz uma conexão chamando
DataSource.getConnection () em um objeto
PoolingVendorDataSource, o objeto PoolingVendorDataSource
executa uma pesquisa no cache de conexão para determinar se um
objeto PooledConnection está disponível. Se estiver disponível, ele é
usado. Se um objeto PooledConnection não estiver disponível,
ConnectionPoolDataSource do fornecedor do driver JDBC cria um
novo objeto PooledConnection. Em ambos os casos, um objeto
PooledConnection está disponível.
DataDirect SequeLink
O exemplo a seguir mostra como criar um objeto
SequeLink para JDBC DataSource e registrá-lo em um serviço de
nomeação JNDI. A classe DataSource fornecida pelo driver DataDirect
SequeLink para JDBC é independente do banco de dados; portanto,
para todos os bancos de dados, a classe DataSource é
SequeLinkDataSource.
De volta ao topo
De volta ao topo
Benchmarks de desempenho
Utilizamos o aplicativo de exemplo fornecido na seção " Conexão a
uma fonte de dados " para abrir uma conexão com o Oracle9i usando
um driver Oracle DataDirect Connect para JDBC 3.2. Fechamos a
conexão em 100, 100, 1000 e 3000 iterações. Executamos este
aplicativo de exemplo em uma única máquina Pentium IV 2 GHz com
512 MB de RAM conectada a um servidor Oracle9i (máquina Pentium
IV 2 GHz com 512 MB de RAM). O tempo total decorrido para cada
execução foi medido quando o agrupamento de conexão foi usado e
foi medido novamente quando o pool de conexão não foi usado como
mostrado na tabela a seguir:
Conclusão
O pool de conexões fornece uma melhoria significativa no
desempenho ao reutilizar conexões ao invés de criar uma nova
conexão para cada solicitação de conexão, sem exigir alterações no
seu código de aplicativo JDBC.