segunda-feira, 9 de fevereiro de 2009

Sistema de tarifação, HSQLDB e Java - PARTE 2.

Continuando o post anterior...

O problema é interceptar determinados eventos em um servidor de download para tarifação em tempo real em um servidor de tarifação. O servidor de download permite a instalação de plug-ins escritos em Java para interceptar os eventos de download.

No post anterior vimos a implementação do servidor de download e um plugin de exemplo. Neste post vamos ver a outra ponta: o sistema de tarifação. O sistema de tarifação é um sistema implementado em um servidor de banco de dados com tabelas e stored procedures.

O sistema que vamos ver é um sistema simulado, composto de uma tabela e três procedures que consultam e atualizam o sistema.

As procedures são as seguintes e todas possuem dois parâmetros, o primeiro é o id do usuário e o segundo o servico que ele esta tentando acessar.

boolean queryBalance(int, string) - consulta se o usuário possui saldo para acessar o serviço.
void charge(int, string) - tarifa o usuário no serviço especificado.
void credit(int, string) - estorna o usuário no serviço especificado.

O sistema é implementado no HSQLDB, um gerenciador de banco de dados escrito em Java. O HSQLDB possui um instalação simples e rápida. O HSQLDB possui suporte a stored procedures escritas em Java.

Para a instalação basta fazer o download e descompactar o arquivo no diretório de sua preferência.

Após descompactar no diretório de destino você vai ter uma pasta chamada hsqldb. No prompt de comando dentro dessa pasta execute o camando abaixo para executar o HSQLDB no modo servidor.

java -classpath ./lib/hsqldb.jar org.hsqldb.Server

Para executar a ferramenta administrativa do HSQLDB execute o comando abaixo.

java -cp ./lib/hsqldb.jar org.hsqldb.util.DatabaseManager

Para a criação das stored procedures utilizei o Netbeans. Uma stored procedure no HSQLDB é um método stático de uma classe Java. E a classe Java deve estar no classpath do servidor. Esse método acessa o ambiente do servidor através de um parâmetro Connection declarado na assinatura do método.

Nesse sistema criei uma classe chamada hsqldbSP_Billing no pacote hsqldbSP_Billing. A classe é a seguinte.

package hsqldbSP_Billing;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class hsqldbSP_Billing {

public static double DOWNLOAD = 10;

public static boolean query(Connection conn, Integer id, String service) throws SQLException{
boolean hasBalance = false;
Statement st = null;
ResultSet rs = null;
st = conn.createStatement();
String sql = "select amount from balance where id = " + id;
rs = st.executeQuery(sql);

if(rs.next()) {
double amount = rs.getDouble("amount");
if(amount > 0){
hasBalance = true;
}
}

st.close();
return hasBalance;
}

public static void charge(Connection conn, Integer id, String service) throws SQLException{
String sql = "update balance set amount = amount - ? where id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setDouble(1, DOWNLOAD);
pstmt.setInt(2, id);

pstmt.executeUpdate();

pstmt.close();
}

public static void credit(Connection conn, Integer id, String service) throws SQLException{
String sql = "update balance set amount = amount + ? where id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setDouble(1, DOWNLOAD);
pstmt.setInt(2, id);

pstmt.executeUpdate();

pstmt.close();
}
}


No HSQLDB podemos criar aliases para as SPs através do seguinte comando.
CREATE ALIAS QUERYBALANCE FOR "hsqldbSP_Billing.hsqldbSP_Billing.query"

No HSQLDB a assinatura da procedure possui somente do dois últimos parâmetros pois a Connection será passada pelo servidor. Parar executar as stores procedures a sintaxe é a seguinte.
call queryBalance(1, 'DOWNLOAD')
call charge(1, 'DOWNLOAD')
call credit(1, 'DOWNLOAD')

Executando o código.

Faça o download do arquivo hsqldb.zip e copie seu conteúdo para a pasta do HSQLDB. Este arquivo possui dois arquivos para auxiliar na execução do HSQLDB para este exemplo, o run.bat que executa o servidor HSQLDB com as SPs no classpath e o arquivo manager.bat que executa a ferramente administrativa do HSQLDB. Além disso esse arquivo possui a configuração inicial das tabelas e aliases necessárias para o sistema.

No arquivo hsqldbSP_Billing.zip está o projeto Netbeans com o código das SPs criadas.

No próximo post vamos criar a infra necessária para acessar o sistema de tarifação através de um sistema BPEL.

Até o próximo post!
Rodrigo Alencar.

Nenhum comentário:

Postar um comentário

 
BlogBlogs.Com.Br