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.
<strong>Migran<strong>do</strong></strong> <strong>do</strong> <strong>InterBase</strong> <strong>para</strong> o <strong>Firebird</strong> <strong>1.5</strong> <strong>no</strong> Linux e<br />
Estabelecen<strong>do</strong> Conexão com Java<br />
Christian Cleber Masdeval Braz<br />
Neste tutorial mostraremos:<br />
- como migrar de um banco <strong>InterBase</strong> <strong>para</strong> o <strong>Firebird</strong> <strong>1.5</strong>,<br />
- como estabelecer conexões a este banco com o Java e<br />
- como configurar um DataSource <strong>Firebird</strong> através de JNDI <strong>no</strong> JBoss.<br />
1 - Introdução<br />
O <strong>Firebird</strong> é um gerencia<strong>do</strong>r de banco de da<strong>do</strong>s relacional open source e multi-plataforma desenvolvi<strong>do</strong><br />
por uma comunidade independente de programa<strong>do</strong>res a partir <strong>do</strong> código fonte <strong>do</strong> <strong>InterBase</strong> 6.0, libera<strong>do</strong><br />
pela Inprise Corp (hoje Borland Software Corp) sob a licença <strong>InterBase</strong> Public License V.1.0. É um banco<br />
de da<strong>do</strong>s simples de ser instala<strong>do</strong> e manipula<strong>do</strong>, robusto, com alta performance e excelente suporte a<br />
triggers e stored procedures.<br />
A versão 1.0, lançada em mea<strong>do</strong>s de março de 2002, e demais da série 1.0.x, não trouxeram muitas<br />
i<strong>no</strong>vações, destinan<strong>do</strong>-se a uma extensa “limpeza” <strong>do</strong> código fonte, migração de C <strong>para</strong> C++ e<br />
eliminação de "bugs". A versão <strong>1.5</strong> é a primeira a conter mudanças mais profundas como otimização de<br />
consultas e versões de Classic Server e Embedded Server <strong>para</strong> win<strong>do</strong>ws, além desta ser a primeira<br />
versão que servirá de base <strong>para</strong> o <strong>Firebird</strong> 2.<br />
Neste tutorial, mostraremos como migrar de um banco <strong>InterBase</strong> <strong>para</strong> o mais <strong>no</strong>vo <strong>Firebird</strong> <strong>1.5</strong>, como<br />
estabelecer conexões a este banco através <strong>do</strong> Java e também como configurar um Data Source <strong>para</strong><br />
acessar um banco <strong>Firebird</strong> através de JNDI <strong>no</strong> JBoss. Como o <strong>Firebird</strong> 1.0 é um <strong>InterBase</strong> melhora<strong>do</strong>,<br />
to<strong>do</strong> o esquema de migração também serve <strong>para</strong> quem quer migrar deste <strong>para</strong> a versão mais recente <strong>do</strong><br />
<strong>Firebird</strong>. As principais fontes de consulta são os sites http://www.ibphoenix.com e<br />
http://firebird.sourceforge.net.<br />
2 – Breve Histórico<br />
O banco de da<strong>do</strong>s “Groton Database System” (daí o <strong>no</strong>me <strong>do</strong>s utilitários começarem com “g”) que, por<br />
questões evidentes de marketing, logo veio a se chamar <strong>InterBase</strong>, foi originalmente cria<strong>do</strong> por Jim<br />
Starkey e Ann Harrison, em 1980, numa intrigante e destemida iniciativa 1 de criar um banco de da<strong>do</strong>s<br />
simples, com pouca ou nenhuma necessidade de administrações sofisticadas, porém, robusto o suficiente<br />
<strong>para</strong> ser utiliza<strong>do</strong> em aplicações reais.<br />
A Borland assumiu o desenvolvimento <strong>do</strong> Interbase em Outubro de 1991, o qual se encontrava na versão<br />
3. As principais contribuições da Borland naquela época foram:<br />
• implementação de stored procedures,<br />
• arquitetura SuperServer,<br />
• versão Win<strong>do</strong>ws e<br />
• aumento da popularidade devi<strong>do</strong> sua inclusão nas suas ferramentas RAD.<br />
O <strong>InterBase</strong> 6.0 tor<strong>no</strong>u-se um produto open source em Julho de 2000, depois de inúmeros conflitos<br />
entre o time de desenvolvimento <strong>do</strong> <strong>InterBase</strong> e os executivos da Borland. Surge então a <strong>InterBase</strong><br />
Company, formada pelos idealiza<strong>do</strong>res <strong>do</strong> <strong>InterBase</strong> e seus colabora<strong>do</strong>res iniciais, com o objetivo de<br />
dirigir o <strong>no</strong>vo projeto de software livre com respal<strong>do</strong> da Borland. Aparentemente arrependida <strong>do</strong> que fez,<br />
a Borland forneceu, de muito mau gra<strong>do</strong>, o código fonte <strong>do</strong> <strong>InterBase</strong>. Demorou semanas até que todas<br />
as partes <strong>do</strong> código estivessem disponíveis num único <strong>do</strong>wnload. A comunidade de desenvolve<strong>do</strong>res <strong>do</strong><br />
1 Leia um pouco mais em http://firebird.sourceforge.net/index.php?op=history&id=ann_1<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 1
<strong>InterBase</strong> passou um bom tempo com a tarefa de concertar todas as partes faltantes <strong>do</strong> código fonte e<br />
também compreenden<strong>do</strong> como o <strong>InterBase</strong> funciona internamente <strong>para</strong> só então poder contribuir com<br />
melhorias.<br />
Apesar de não mais receber apoio da Borland, que restabeleceu o desenvolvimento comercial <strong>do</strong><br />
<strong>InterBase</strong>, a comunidade de software livre rapidamente organizou o projeto de<strong>no</strong>mina<strong>do</strong> <strong>Firebird</strong>, na<br />
sourceforge.net, com o intuito de dar continuidade ao desenvolvimento basea<strong>do</strong> <strong>no</strong> código fonte <strong>do</strong><br />
<strong>InterBase</strong> 6.0.<br />
3 – Instalação <strong>no</strong> Linux<br />
Antes de fazer qualquer instalação é necessário decidir sobre qual arquitetura você pretende utilizar.<br />
Existem <strong>do</strong>is modelos: a arquitetura Classic e a SuperServer. A Classic, remanescente da versão 4 <strong>do</strong><br />
<strong>InterBase</strong>, é baseada em processos, isto é, <strong>para</strong> cada conexão cliente um <strong>no</strong>vo processo servi<strong>do</strong>r é<br />
dis<strong>para</strong><strong>do</strong> <strong>para</strong> atendê-la. Cada processo é totalmente independente e possui um cache de memória<br />
dedica<strong>do</strong>. A arquitetura SuperServer é uma implementação multi-cliente e multi-tarefa que substitui a<br />
implementação clássica. Um servi<strong>do</strong>r SuperServer pode atender vários clientes ao mesmo tempo usan<strong>do</strong><br />
threads ao invés de processos se<strong>para</strong><strong>do</strong>s. Múltiplas threads compartilham o acesso a recursos<br />
compartilha<strong>do</strong>s de um único processo servi<strong>do</strong>r.<br />
Mais Informações<br />
Para maiores informações técnicas a respeito das diferenças entre as arquiteturas<br />
Classic e SuperServer veja em<br />
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic<br />
A arquitetura Classic é mais limitada e destina-se especialmente a plataformas que não suportam<br />
processamento através de threads. Sen<strong>do</strong> assim, mostraremos como instalar a opção SuperServer <strong>do</strong><br />
<strong>Firebird</strong> <strong>1.5</strong> <strong>no</strong> Linux, ten<strong>do</strong> em vista este prover suporte nativo a aplicações multi-tarefas. Supon<strong>do</strong> que<br />
a instalação será feita num Linux box com glibc igual ou superior a 2.2.5 e libstdc++.so igual ou superior<br />
a 5.0 (rpm –qa | grep <strong>para</strong> descobrir), os passos são estes:<br />
1. Instalação via pacote RPM:<br />
- Baixar a última versão <strong>do</strong> pacote <strong>Firebird</strong>SS-<strong>1.5</strong>.X-xxxx.i686.rpm <strong>no</strong> endereço<br />
http://firebird.sourceforge.net/index.php?op=files&id=engine. Durante a confecção deste<br />
material a área de <strong>do</strong>wload encontrava-se da seguinte forma:<br />
• 25th December 2004 SuperServer for Linux V<strong>1.5</strong>.2 (.rpm) (3.0mb)<br />
• 25th December 2004 SuperServer for Linux V<strong>1.5</strong>.2 (.tar.gz) (2.8mb)<br />
- Como root, executar: rpm -ivh <strong>Firebird</strong>CS-<strong>1.5</strong>.X-xxxx.i686.rpm<br />
2. Instalação através de tar.gz:<br />
- Baixar a última versão <strong>do</strong> arquivo <strong>Firebird</strong>SS-<strong>1.5</strong>.X-xxxx.tar.gz<br />
- Como root, executar:<br />
O que o instala<strong>do</strong>r faz é:<br />
tar –zxvf <strong>Firebird</strong>SS-<strong>1.5</strong>.X-xxxx.tar.gz<br />
cd <strong>Firebird</strong>SS-<strong>1.5</strong>.X-xxxx.i686<br />
./install.sh<br />
1. Termina qualquer processo servi<strong>do</strong>r ativo.<br />
2. Adiciona o usuário firebird e o grupo firebird.<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 2
3. Instala o programa <strong>no</strong> diretório /opt/firebird, copia libs (libfbclient, libgds e libib_util) e cria links<br />
simbólicos <strong>no</strong> diretório /usr/lib e copia arquivos de cabeçalho <strong>no</strong> diretório /usr/include.<br />
4. Adiciona automaticamnete a porta 3050 <strong>no</strong> /etc/services.<br />
5. Adiciona automaticamnete a entrada localhost.local<strong>do</strong>main and HOSTNAME ao /etc/hosts.equiv.<br />
6. A instalação SuperServer também instala um script de inicialização <strong>no</strong> /etc/rc.d/init.d.<br />
7. Inicializa o servi<strong>do</strong>r.<br />
8. Gera uma password <strong>para</strong> o usuário SYSDBA e a armazena <strong>no</strong> arquivo /<br />
opt/firebird/SYSDBA.password.<br />
Pronto!! Se nenhum erro ocorreu você já tem uma versão rodan<strong>do</strong> <strong>do</strong> servi<strong>do</strong>r <strong>Firebird</strong> <strong>1.5</strong> na sua<br />
máquina. Para testar você pode utilizar o programa isql existente <strong>no</strong> diretório /opt/firebird/bin o qual<br />
permite conectar em um banco de da<strong>do</strong>s e realizar consultas. Para maiores informações, vide o diretório<br />
/opt/firebird/<strong>do</strong>c. Lembre-se que a password <strong>do</strong> usuário SYSDBA foi gerada aleatoriamente pelo<br />
instala<strong>do</strong>r. Para alterá-la você pode usar o script changeDBAPassword.sh localiza<strong>do</strong> em /<br />
opt/firebird/bin.<br />
4 – Desinstalação<br />
1. Para pacotes RPM:<br />
- rpm -e <strong>Firebird</strong>SS-<strong>1.5</strong>.X.xxxx-0<br />
2. Para instalação via tar.gz:<br />
- /opt/firebird/bin/uninstall.sh<br />
5 – <strong>Migran<strong>do</strong></strong> um banco <strong>do</strong> Interbase <strong>para</strong> o <strong>Firebird</strong><br />
Para migrar um banco <strong>do</strong> Interbase ou mesmo <strong>do</strong> <strong>Firebird</strong> 1.0.X <strong>para</strong> o <strong>Firebird</strong> <strong>1.5</strong> os passos são os<br />
seguintes:<br />
1. Faça um backup, utilizan<strong>do</strong> o utilitário gbak da sua instalação <strong>do</strong> <strong>InterBase</strong>, <strong>do</strong> banco de da<strong>do</strong>s<br />
que pretende migrar. Para isso, entre como root na máquina onde o banco a ser migra<strong>do</strong> se<br />
encontra e execute o coman<strong>do</strong>:<br />
gbak –b –v <strong>no</strong>me_banco_origem.gdb <strong>no</strong>me_banco_desti<strong>no</strong>.gbk<br />
2. Recupere este backup utilizan<strong>do</strong> o gbak <strong>do</strong> <strong>Firebird</strong> <strong>1.5</strong>. Como root, execute:<br />
gbak -C -v -r -n -i <strong>no</strong>me_backup.gbk <strong>no</strong>me_desti<strong>no</strong>.fdb<br />
Uma operação de backup e recuperação em geral melhora a performance <strong>do</strong> banco de da<strong>do</strong>s pois elimina<br />
registros expletivos, balanceia os índices, recupera espaço libera<strong>do</strong> por registros deleta<strong>do</strong>s e realiza a<br />
atualização <strong>do</strong> ODS (on-disk structure) caso seja necessário.<br />
Mais Informações<br />
A sintaxe completa <strong>do</strong>s coman<strong>do</strong>s <strong>para</strong> backup e recuperação pode ser<br />
obtida <strong>no</strong> Operations Guide constante <strong>no</strong> conjunto de <strong>do</strong>cumentação da<br />
instalação <strong>do</strong> <strong>InterBase</strong> <strong>para</strong> win<strong>do</strong>ws ou <strong>no</strong> site<br />
http://firebird.sourceforge.net/<strong>do</strong>wnload.php?op=file&id=<strong>Firebird</strong>_v1_Relea<br />
seNotes_Pt.pdf<br />
6 – O driver JDBC JayBird<br />
O JayBird (http://jaybirdwiki.firebirdsql.org/JayBirdHome) é um driver JCA/JDBC <strong>para</strong> conexão com o<br />
banco de da<strong>do</strong>s <strong>Firebird</strong>. Este baseia-se <strong>no</strong> <strong>no</strong>vo padrão JCA <strong>para</strong> conexão de servi<strong>do</strong>res de aplicação a<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 3
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
como se esta fosse ser usada pela primeira vez, seta os parâmetros e a executa. A criação <strong>do</strong> prepared<br />
statement na linha 3 é interceptada pelo pool o qual verifica se existe um prepared statement livre <strong>para</strong><br />
o SQL especifica<strong>do</strong>. Caso não exista, um <strong>no</strong>vo é cria<strong>do</strong>. Na linha 12, o prepared statement não é fecha<strong>do</strong><br />
mas sim devolvi<strong>do</strong> ao pool. O mesmo acontece com a conexão na linha 15.<br />
6.1 – Instalan<strong>do</strong> o driver e obten<strong>do</strong> conexões através <strong>do</strong> pool<br />
Para instalar o driver JDBC JayBird <strong>1.5</strong> você deve:<br />
1. baixá-lo da página http://jaybirdwiki.firebirdsql.org/<strong>do</strong>wnload/Downloads,<br />
2. descompactar o arquivo,<br />
3. copiar os .jar <strong>no</strong> diretório de bibliotecas <strong>do</strong> servi<strong>do</strong>r web e NÃO <strong>no</strong> diretório WEB-INF da<br />
aplicação.<br />
Pronto!! A partir daí você já pode fazer uso das classes <strong>para</strong> obter uma conexão a um servi<strong>do</strong>r de banco<br />
de da<strong>do</strong>s <strong>Firebird</strong>. Para quem estava abtua<strong>do</strong> à instalação <strong>do</strong> InterClient <strong>para</strong> conexão ao Interbase onde<br />
fazia-se necessário a instalação <strong>do</strong> programa interserver que roda em baixo <strong>do</strong> xinetd escutan<strong>do</strong> os<br />
pedi<strong>do</strong>s de conexão na porta 3060, a instalação <strong>do</strong> JayBird é muito mais simples. Uma vez que o servi<strong>do</strong>r<br />
<strong>Firebird</strong> tenha si<strong>do</strong> instala<strong>do</strong>, o serviço gds_db é configura<strong>do</strong> por padrão <strong>para</strong> ouvir a porta 3050. E, a<br />
não ser que você precise alterar este valor de porta (o que pode ser feito editan<strong>do</strong>-se o arquivo /<br />
etc/services), nada mais precisa ser feito e o JayBird irá se comunicar com o servi<strong>do</strong>r através desta porta<br />
.<br />
Mostraremos agora como obter uma conexão usan<strong>do</strong> o driver JDBC tipo 4 e tipo 2. Para conexão usan<strong>do</strong><br />
embedded server vide Seção 6.3.<br />
Conexão <strong>no</strong> mo<strong>do</strong> JDBC 4<br />
Como vimos, este é o driver puro Java que deve ser preferencialmente utiliza<strong>do</strong> quan<strong>do</strong> a estação cliente<br />
localiza-se numa máquina distinta <strong>do</strong> servi<strong>do</strong>r <strong>Firebird</strong>. A URL <strong>para</strong> conexão é a seguinte:<br />
jdbc:firebirdsql:host[/port]:/path/to/db.fdb<br />
Como exemplo, veja o código abaixo que utiliza o pool de conexões <strong>do</strong> JayBird:<br />
public final class DataSourceExample<br />
{<br />
static public void main (String args[]) throws Exception<br />
{<br />
//Crian<strong>do</strong> um DataSource manualmente<br />
org.firebirdsql.pool.FBWrappingDataSource dataSource =<br />
new org.firebirdsql.pool.FBWrappingDataSource();<br />
}<br />
}<br />
//Configuran<strong>do</strong> os parâmetros principais<br />
dataSource.setDatabase("localhost/3050:c:/database/employee.gdb");<br />
//Configuran<strong>do</strong> parâmetros adicionais<br />
dataSource.setCharSet(interbase.interclient.CharacterEncodings.NONE);<br />
dataSource.setSuggestedCachePages(0);<br />
dataSource.setSweepOnConnect(false);<br />
//Isto não precisa ten<strong>do</strong> em vista que a URL já identifica o tipo<br />
dataSource.setType("TYPE4");<br />
//parâmetros específicos <strong>do</strong> banco não possuem méto<strong>do</strong>s setters<br />
dataSource.setNonStandardProperty("isc_dpb_sweep", null);<br />
dataSource.setNonStandardProperty("isc_dpb_num_buffers", "75");<br />
try {<br />
dataSource.setLoginTimeout(10);<br />
java.sql.Connection c = dataSource.getConnection("sysdba", "masterkey");<br />
System.out.println ("conexão estabelecida");<br />
c.close ();<br />
}<br />
catch (java.sql.SQLException e) {<br />
e.printStackTrace();<br />
System.out.println ("sql exception: " + e.getMessage ());<br />
}<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 5
Conexão <strong>no</strong> mo<strong>do</strong> JDBC 2<br />
Estabelecer conexões <strong>do</strong> tipo JDBC 2 requer a correta instalação da biblioteca nativa JNI. Para isso,<br />
copie o arquivo libjaybird.so que consta <strong>no</strong> pacote de instalação <strong>do</strong> JayBird <strong>para</strong> o diretório<br />
$JAVA_HOME/jre/bin. Uma vez feito isso, as conexões podem ser obtidas como <strong>no</strong> exemplo anterior,<br />
porém, passan<strong>do</strong> a URL com a sintaxe<br />
jdbc:firebirdsql:native:host[/port]:/path/to/db.fdb<br />
ou utilizan<strong>do</strong> a URL <strong>do</strong> tipo 4 porém indican<strong>do</strong> que o tipo será 2 através <strong>do</strong> méto<strong>do</strong> dataSource.setType<br />
("TYPE2").<br />
6.2 – Acessan<strong>do</strong> um Data Source através de JNDI <strong>no</strong> JBoss<br />
Para criar um alias JNDI apontan<strong>do</strong> <strong>para</strong> um data source <strong>do</strong> <strong>Firebird</strong> <strong>no</strong> servi<strong>do</strong>r de aplicações JBoss, crie<br />
um arquivo chama<strong>do</strong> firebird-ds.xml com o seguinte conteú<strong>do</strong><br />
<br />
<br />
<br />
<strong>no</strong>me_alias<br />
jdbc:host/3050:caminho_<strong>para</strong>_arquivo_fdb<br />
org.firebirdsql.pool.FBWrappingDataSource<br />
SYSDBA<br />
masterkey<br />
<br />
<br />
e o copie <strong>no</strong> diretório deploy <strong>do</strong> tipo de servi<strong>do</strong>r que você está usan<strong>do</strong> (all, default, minimal, etc). Para<br />
acessar numa aplicação o data source cria<strong>do</strong> pode-se fazer<br />
javax.naming.Context ctx = new javax.naming.InitialContext();<br />
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(“java:<strong>no</strong>me_alias”);<br />
6.3 – Mais Informações<br />
Informações detalhadas sobre o JayBird, suas classes, características específicas, utilização das<br />
diferentes versões <strong>do</strong> driver, pool de conexões, dentre outras podem ser obtidas <strong>no</strong> manual constante <strong>no</strong><br />
diretório <strong>do</strong>c da instalação.<br />
7 – Ferramentas de Administração<br />
Uma lista com inúmeras ferramentas de administração está disponível na página<br />
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_admin_tools<br />
Algumas delas são comerciais enquanto outras livres. Dentre estas, uma das mais promissoras é a<br />
FlameRobin (http://www.flamerobin.org/), uma ferramenta totalmente open source <strong>para</strong> administração<br />
de bancos <strong>Firebird</strong> existente em várias plataformas. Apesar de ainda não totalmente completa, já conta<br />
com várias funcionalidades úteis como execução de coman<strong>do</strong>s SQL, interface <strong>para</strong> backup, criação e<br />
edição de objetos <strong>do</strong> banco de da<strong>do</strong>s, dentre outras. A Figura 1.0 mostra a tela principal extraída de sua<br />
execução <strong>no</strong> G<strong>no</strong>me ( Linux).<br />
8 - Conclusão<br />
O <strong>Firebird</strong> é um banco de da<strong>do</strong>s relacional open source que deriva <strong>do</strong> <strong>InterBase</strong>, o qual existe e vem<br />
sen<strong>do</strong> aperfeiçoa<strong>do</strong> por mais de 20 a<strong>no</strong>s. Por conta disto, o <strong>Firebird</strong> é um banco completo, dispon<strong>do</strong> de<br />
muitas propriedades que os bancos de da<strong>do</strong>s comerciais mais moder<strong>no</strong>s atualmente possuem: controle<br />
de transação, capacidade de gerenciar grandes volumes de da<strong>do</strong>s, segurança, suporte a triggers e stored<br />
procedures, dentre muitas outras.<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 6
Apresentamos neste artigo como migrar de uma utilização de <strong>InterBase</strong> <strong>para</strong> o <strong>Firebird</strong> <strong>1.5</strong>, a versão<br />
mais recente deste banco. Mostramos também como utilizar o driver JDBC JayBird <strong>para</strong> estabelecer<br />
conexão com o banco através de um programa Java e também como criar e acessar um Data Source<br />
<strong>para</strong> o <strong>Firebird</strong> <strong>1.5</strong> através de JNDI <strong>no</strong> servi<strong>do</strong>r de aplicação JBoss.<br />
Figura 1.0: Tela principal <strong>do</strong> aplicativo FlameRobin<br />
Christian Cleber Masdeval Braz (christian.braz@previdencia.gov.br) é mestre em Ciência da Computação e<br />
Analista em Tec<strong>no</strong>logia da Informação na Dataprev – Empresa de Tec<strong>no</strong>logia e Informações da Previdência Social.<br />
Grupo de Usuários Java – http://www.guj.com.br – Página 7