19.05.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!