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