Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que trata o artigo?

Descrição de algumas características da linguagem procedural PL/Java do PostgreSQL, discutindo como os módulos, classes e toda estrutura do Java trabalha junto com o backend do SGBD para que as funções e triggers utilizem as classes desenvolvidas, aproveitando todo o poder do Java.


Para que serve?

Fornecer informações que descrevem tanto características da linguagem Java, bem como sua aplicação na linguagem procedural PL/Java, transformando-a em um poderoso artifício no aumento das funcionalidades do SGBD.


Em que situação o tema é útil?

Possibilidade de migração das regras de negócio, escritas em Java, da camada de aplicação para o banco de dados, aumentando os recursos do mesmo, com a utilização e manipulação direta dos dados pelo Java.

Uma das grandes vantagens do uso da linguagem Java é a portabilidade, ou seja, a possibilidade de executar um código em qualquer plataforma que possua um interpretador Java específico. Além desta, existem outras vantagens como robustez, segurança, orientação a objetos, alto desempenho, entre outras.

Pensando nestas vantagens e nas grandes possibilidades que o Java oferece, são criados módulos e interpretadores para implantar esta linguagem nos SGBDs. E o PostgreSQL não foge à regra.

Na primeira parte deste artigo, descreveremos algumas características da linguagem procedural PL/Java do PostgreSQL, onde mostraremos como os módulos, classes e toda estrutura do Java trabalha junto com o backend do SGBD para que as funções e triggers utilizem as classes desenvolvidas aproveitando todo o poder do Java.

A versão do PL/Java aqui discutida é a 1.4.0, com o PostgreSQL na versão 8.3.7, em ambiente Linux (CentOS 5.2).

Características gerais do PL/Java

A linguagem PL/Java é um módulo complementar do backend do PostgreSQL, ou seja, todo o código relacionado é executado no servidor de banco de dados, da mesma forma que as outras linguagens procedurais, como PL/SQL, PL/TCL, PL/Perl, PL/Python e etc.

Quando o PL/Java é instalado, funções e triggers podem utilizar classes Java, desenvolvidas em qualquer ambiente de desenvolvimento Java, como Eclipse ou NetBeans. Estas classes, por sua vez, são instaladas dentro da base de dados e utilizadas como em qualquer outra linguagem procedural. As funções/triggers na linguagem SQL apontam para métodos estáticos nas classes Java.

Na Listagem 1 podemos ver um exemplo de uma função que utiliza o método estático getProperty, da classe java.lang.System, que faz parte da API Java. Este método retorna propriedades da plataforma onde o Java está instalado. Neste exemplo, a função recebe como parâmetro o nome da propriedade user.home, e retorna o path referente ao diretório raiz do usuário logado.

Métodos estáticos: São métodos que pertencem à classe e não ao objeto. Isso quer dizer que por mais que existam vários objetos diferentes da mesma classe, todos partilham dos mesmos métodos estáticos. São usados em situações em que se deseja fazer uso apenas dos recursos da classe para realizar sua tarefa, e não das informações associadas a cada objeto individualmente. Não é necessário instanciar (criar) um objeto para fazer uso deste tipo de método. Exemplos de métodos estáticos em Java incluem os métodos para manipulação de tipos primitivos definidos nas classes Character, Integer e Double, assim como todos os métodos definidos para a classe Math.

Listagem 1. Exemplo de uso do método estático “getProperty”, da classe “java.lang.System”.

CREATE FUNCTION getsysprop(VARCHAR)
  RETURNS VARCHAR
  AS 'java.lang.System.getProperty'
  LANGUAGE java;

SELECT getsysprop('user.home');

O módulo PL/Java também adiciona um conjunto de funções que ajudam a instalar, remover e manter as classes Java instaladas. Estas classes são armazenadas em arquivos containers Java, conhecidos como arquivos JAR. Opcionalmente, um arquivo JAR pode conter um descritor de instalação das classes, chamado de deployment descriptor.

...
Quer ler esse conteúdo completo? Tenha acesso completo