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