Professional Documents
Culture Documents
Artigo publicado
na edio 39
w w w . m u n d o j a v a . c o m . b r
artigo
Marcelo Costa
(marcelojscosta@gmail.com) gerente de Infraestrutura e Operaes
na upLexis Tecnologia, onde atua no desenvolvimento de sistemas
para descoberta e tratamento de informao relevante na Web.
bacharel em Cincia da Computao pela Universidade da Amaznia
e possui capacitao em Arquitetura de Software, Componentizao
e SOA pela Unicamp. Trabalha com PostgreSQL desde 2002, quando
iniciou sua atuao como gerente e coordenador de equipes nas reas
de projetos de software e banco de dados.
Paulo Crestani
(crestani.jr@gmail.com) engenheiro de Software na Dextra Sistemas
onde atua em projetos de arquitetura e desenvolvimento de sistemas
de software com especial nfase em sistemas Web baseados em
tecnologia Java EE. graduado em Cincia da Computao pela
Universidade Estadual de Maring, mestre em Engenharia Eltrica pela
Faculdade de Engenharia Eltrica e de Computao da Unicamp, e
especialista em Engenharia de Software pelo Instituto de Computao
da Unicamp onde tambm possui capacitao em Arquitetura de
Software, Componentizao e SOA. Trabalha com a linguagem Java
desde 2003, possuindo as certificaes SCJP, SCJD e SCWCD.
50 www.mundojava.com.br
SPI (Server Programming Interface Interface de Programao do Servidor) uma forma de dar ao usurio a habilidade
de executar consultas SQL dentro de funes C definidas
pelo prprio usurio. SPI um conjunto de funcionalidades
existentes e que possuem uma interface de acesso ao parser,
planejador de consultas e executor do servidor de banco de
dados, alm de poder gerenciar tambm alguns aspectos da
memria. A maioria das linguagens procedurais utilizadas
pelo PostgreSQL executam de vrias formas comandos SQL
a partir de stored procedures, muitas dessas facilidades so
baseadas em rotinas de SPI. Observe que se um comando
chamado a partir de uma instruo SPI falhar, o controle de
transao no retorna para a procedure que o chamou. Neste
caso, a transao ou subtransao na procedure ser retornada a condio anterior a existncia do problema (rolled back).
51
varchar (20)
bpchar(8)
varchar (25)
numeric (10,2)
agencia
nome_agencia varchar (20)
numeric (12,2)
patrimonio
bairro_agencia varchar (20)
cliente
nome_cliente
endereco
bairro_cliente
varchar (25)
varchar (40)
varchar (20)
deposito
nome_agencia
numero_conta
nome_cliente
saldo
varchar (20)
bpchar (7)
varchar (25)
numeric (10,2)
52 www.mundojava.com.br
Alm de instalar o arquivo jar, preciso que suas classes estejam no classpath do esquema de banco de dados ao qual se quer associar as stored
procedures. Sem este passo, a JVM no conseguir localizar as classes e
mtodos do arquivo jar carregado anteriormente. Para associar as classes
ao classpath do esquema, preciso executar o comando da Listagem 4
no cliente do servidor de banco de dados:
Listagem 4. Comando para definio do classpath.
banco=# SELECT sqlj.set_classpath( 'public', 'Banco' );
1
public static Iterator<String> clientesComEmprestimoEmAgencia(
2
String nomeAgencia) throws SQLException {
3
Connection connection = null;
4
PreparedStatement statement = null;
5
try {
6
connection = DriverManager
7
.getConnection(DatabaseConstants.defaultURL);
8
StringBuilder query = new StringBuilder(
9
SELECT nome_cliente FROM emprestimo )
10
.append( where nome_agencia LIKE ? );
11
statement = connection.prepareStatement(query.toString());
12
statement.setString(1, nomeAgencia);
13
ResultSet resultSet = statement.executeQuery();
14
List<String> result = new ArrayList<String>();
15
while (resultSet.next()) {
16
result.add(resultSet.getString(nome_cliente));
17
}
18
return (result.iterator());
19
} finally {
20
statement.close();
21
connection.close();
22
}
23 }
saldo
------500
(1 row)
58 www.mundojava.com.br
59
carregue o novo jar e em seguida descarregue-o com o script remove_jar. Isto far com que todas as definies de funes sejam
removidas;
tente executar a funo debitosClientes e note que ocorrer um
erro, pois a funo no est mais definida;
instale novamente o jar e ajuste o classpath do esquema pblico
como descrito anteriormente e tente executar novamente a mesma funo;
veja que agora o resultado esperado retornado.
Consideraes finais
Se voc um programador Java, o mdulo PL/Java uma forma fcil de
adicionar funcionalidades embutidas no servidor PostgreSQL. Esse mdulo
obedece a padres como o JDBC e a iniciativa do SQLJ. A evoluo das tecnologias um fator que deve sempre ser levado em conta. Prticas atuais
no desenvolvimento de software, como o reuso e o baixo acoplamento so
cada vez mais levadas em considerao em projetos de software. O baixo
acoplamento de um servio est relacionado com a sua capacidade de ser
independente de outros servios para realizar a sua tarefa e essa uma das
inmeras utilidades que a PL/Java pode proporcionar. Alguns pesquisadores
em seus estudos fazem alguns questionamentos do tipo:Java Stored Procedure melhor que PL/pgSQL?. A resposta : depende da aplicao. Depende do
que a aplicao precisa fazer. Ambas as abordagens possuem suas vantagens.
O PL/pgSQL muito semelhante e totalmente compatvel com o SQL, porm
PL/pgSQL foi desenhada para cenrios onde h bastante acesso a dados. Se
o seu uso principal for incrementao de inteiros ou clculos matemticos, o
PostgreSQL oferece outras PLs que executam funes diferentes. Criar stored
procedure com PL/Java ideal para aplicaes baseadas em componente e
principalmente para modelagem de dados com orientao a objetos. O poder
do Java prov simplesmente uma maneira alternativa de desenvolver stored
procedures usando a sintaxe do Java.
Referncias
1. GBorg-PostgreSQL related projects, http://gborg.postgresql.org/project/pljava/projdisplay.php
2. http://www.amazon.com/PostgreSQL-2nd-Korry-Douglas/dp/0672327562/ref=sr_1_1
?ie=UTF8&s=books&qid=1253850481&sr=8-1
3. http://dee.feg.unesp.br/Disciplinas/SMA6023/Aulas/bancario.sql
4. http://osdir.com/ml/db.postgresql.pljava/2005-02/msg00039.html
5. http://www.slideshare.net/petereisentraut/postgresql-and-pljava
6. http://www.ic.unicamp.br/~geovane/mo410-091/Ch06-DBApp-art.pdf
7. http://pgfoundry.org/mailman/listinfo/pljava-dev
8. http://en.wikipedia.org/wiki/SQL
9. Lista nacional de discusso do PostgreSQL http://listas.postgresql.org.br/pipermail/
pgbr-geral/2009-September/017458.html
10.http://osdir.com/ml/db.postgresql.pljava/2005-02/msg00039.html
11.http://www.fsl.cs.sunysb.edu/~dquigley/cse219/index.php?it=eclipse&tt=jar&pf=y
60 www.mundojava.com.br
EU USO
No banco de dados PostgreSQL tem-se um conjunto bastante variado de linguagens procedurais, sendo a PL/pgSQL sua linguagem
mais conhecida, porm alm desta linguagem procedural outras tantas podem ser instaladas e utilizadas e uma destas a PL/Java. Essa
possibilidade de interao com outras linguagens que o PostgreSQL
possui nos d a liberdade de testar funcionalidades que em um determinado ambiente comportam-se de uma forma mais atraente que o
utilizado ao se utilizar uma linguagem procedural nativa do prprio
banco de dados. A PL/Java nos possibilita fazer uso da JVM para tratar
dados de uma forma simples tal como escrevemos um programa em
Java respeitando as criaes de classes, tipos de dados e funes em
Java.
Currculo Joo Paulo Mller da Silva
Joo Paulo Mller da Silva administrador de Banco de Dados PostgreSQL e
atualmente trabalha na PST Eletronics. Atua tambm como instrutor de PostgreSQL
nos mdulos Essencial, Linguagem PL/pgSQL, Administrao e Performance Tuning.
instrutor de Oracle no mdulo Essencial. Graduado em Cincia da Computao pela
UCPel (Universidade Catlica de Pelotas) e mestrado em Bioinformtica pela UNISINOS
(Universidade do Vale do Rio dos Sinos).