Migrando do InterBase para o Firebird 1.5 no - Guj
Migrando do InterBase para o Firebird 1.5 no - Guj
Migrando do InterBase para o Firebird 1.5 no - Guj
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
sistemas lega<strong>do</strong>s e banco de da<strong>do</strong>s e também <strong>no</strong> padrão JDBC. O padrão JCA especifica uma arquitetura<br />
onde um servi<strong>do</strong>r de aplicação pode cooperar com um driver de tal forma que este gerencie transações,<br />
segurança, pool de conexões e outros recursos e o driver provê apenas a funcionalidade de conexão.<br />
O <strong>no</strong>vo JayBird <strong>1.5</strong> traz algumas melhorias e i<strong>no</strong>vações:<br />
• Além da implementação <strong>do</strong> tipo JDBC 4, este driver implementa também o tipo 2 e uma versão<br />
embedded server, a qual permite criar aplicações com to<strong>do</strong>s os requisitos <strong>para</strong> conexão a um<br />
servi<strong>do</strong>r embutida na própria aplicação.<br />
• Suporte <strong>para</strong> IN e OUT stored procedures. O JayBird 1.0 provia suporte apenas a parâmetros IN<br />
enquanto esta <strong>no</strong>va versão implementa to<strong>do</strong>s os requisitos também a parâmetros OUT.<br />
• Nova infraestrutura <strong>para</strong> pool de conexões e prepared statements.<br />
O tipo JDBC 4 é uma implementação totalmente em Java que converte chamadas JDBC diretamente <strong>para</strong><br />
o protocolo utiliza<strong>do</strong> pelo banco de da<strong>do</strong>s. Esta difere da implementação de tipo 3, que converte uma<br />
chamada <strong>para</strong> um protocolo independente que depois é convertida, por um servi<strong>do</strong>r intermediário, <strong>para</strong> o<br />
protocolo específico <strong>do</strong> banco em questão. Enquanto o tipo 4 é preferi<strong>do</strong> <strong>para</strong> configurações onde o<br />
cliente localiza-se numa máquina diferente da <strong>do</strong> servi<strong>do</strong>r, sua performance é prejudicada quan<strong>do</strong> as<br />
conexões são feitas ao servi<strong>do</strong>r <strong>Firebird</strong> a partir da mesma máquina onde este se encontra. Isto deve-se<br />
ao fato que o tipo JDBC 4 utiliza sockets <strong>para</strong> realizar conexões, introduzin<strong>do</strong> um overhead adicional.<br />
Quan<strong>do</strong> a comunicação com o servi<strong>do</strong>r de banco de da<strong>do</strong>s será efetuada a partir da mesma máquina<br />
onde este está instala<strong>do</strong>, como pode ser o caso de aplicações web em Java onde o container web roda na<br />
mesma máquina <strong>do</strong> banco de da<strong>do</strong>s, é preferível utilizar o tipo JDBC 2. Este, utiliza uma biblioteca nativa<br />
JNI <strong>para</strong> efetuar as conexões, possibilitan<strong>do</strong> uma performance superior pois acessa o banco de da<strong>do</strong>s<br />
diretamente.<br />
Um pool de conexões provê um meio de gerenciar e manipular conexões a bancos de da<strong>do</strong>s. Sua<br />
principal utilidade é minimizar o tempo necessário <strong>para</strong> uma aplicação obter uma conexão a um banco,<br />
ten<strong>do</strong> em vista que, em geral, esta é uma operação que consome considerável tempo. Além disso, outras<br />
vantagens são:<br />
• Gerenciamento <strong>do</strong> número limite de conexões. Uma aplicação não pode abrir mais conexões <strong>do</strong><br />
que o permiti<strong>do</strong> pelo pool.<br />
• Centralização <strong>do</strong> lugar onde conexões a bancos de da<strong>do</strong>s serão obtidas.<br />
• Possibilidade também de fazer pool de prepared statements.<br />
Um prepared statement é uma instrução SQL compilada e otimizada apenas uma vez <strong>para</strong> ser utilizada<br />
várias vezes por uma aplicação, reduzin<strong>do</strong> assim o tempo de execução quan<strong>do</strong> esta se encontra, por<br />
exemplo, num loop. Porém, o que acontece quan<strong>do</strong> precisamos utilizá-la durante o ciclo de vida de um<br />
objeto? Devemos criar uma conexão dedicada ao objeto, já que um prepared statement é<br />
intrinsecamente relaciona<strong>do</strong> à conexão que o criou, ou pre<strong>para</strong>r um cada vez que for necessário utilizálo?<br />
As duas opções são insatisfatórias, a primeira por ser inviável <strong>no</strong> senti<strong>do</strong> de consumir uma conexão<br />
<strong>para</strong> cada objeto instancia<strong>do</strong> que faz uso de prepared statement e a segunda por perder a principal<br />
vantagem que é a possibilidade de reutilização de consultas já compiladas e otimizadas.<br />
Um pool de prepared statements resolve estes problemas. Veja o exemplo abaixo:<br />
Connection connection = dataSource.getConnection(); 1<br />
try { 2<br />
PreparedStatement ps = connection.prepareStatement( 3<br />
“SELECT * FROM test_table WHERE id = ?”); 4<br />
try { 5<br />
ps.setInt(1, id); 6<br />
ResultSet rs = ps.executeQuery(); 7<br />
while (rs.next()) { 8<br />
// faz alguma coisa 9<br />
} 10<br />
} finally { 11<br />
ps.close(); 12<br />
} 13<br />
} finally { 14<br />
connection.close(); 15<br />
} 16<br />
As linhas 1 a 16 apresentam um código típico quan<strong>do</strong> um pool de prepared statements está sen<strong>do</strong><br />
utiliza<strong>do</strong>. A aplicação obtém uma conexão através de um javax.sql.DataSource, pre<strong>para</strong> uma consulta<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 4