Driver Genérico para Acesso a Banco de Dados

Transcrição

Driver Genérico para Acesso a Banco de Dados
J
Driver Genérico para Acesso a Banco de Dados
Eduardo Sant'Ana da Silva
Drivers
Modelo Conceitual
C++
wait for package load
Java
JDBServerThread
TeJDBC
TeJDBC
start monitor
Monitor
ignite
send request
using socket
start InputProcessor
JDBServer
send data to
InputProcessor
return processed information
use
query
JProxy
return
JDBProtocol
jdbc odbc drivers
mysql
postgres
...
Laboratório de Estatística
e Geoinformação
Drivers
J
Protocolo (versão alpha)
ex:
2 1 0
start
38
2
...
comand type
message size
type
value
Laboratório de Estatística
e Geoinformação
Drivers
J
Codificação de Tipos
public static byte[] encodeLong(long i) {
byte[] b = new byte[8];
b[0] = (byte) ((i) & 0xFF);
i >>= 8;
b[1] = (byte) ((i) & 0xFF);
i >>= 8;
b[2] = (byte) ((i) & 0xFF);
i >>= 8;
b[3] = (byte) ((i) & 0xFF);
i >>= 8;
b[4] = (byte) ((i) & 0xFF);
i >>= 8;
b[5] = (byte) ((i) & 0xFF);
i >>= 8;
b[6] = (byte) ((i) & 0xFF);
i >>= 8;
b[7] = (byte) ((i) & 0xFF);
i >>= 8;
return b;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Codificação de Tipos
public static byte[] encodeInt(int i) {
byte[] b = new byte[4];
b[0] = (byte) ((i) & 0xFF);
i >>= 8;
b[1] = (byte) ((i) & 0xFF);
i >>= 8;
b[2] = (byte) ((i) & 0xFF);
i >>= 8;
b[3] = (byte) ((i) & 0xFF);
i >>= 8;
return b;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Codificação de Tipos
public static byte[] encodeShort(int i) {
byte[] b = new byte[2];
b[0] = (byte) ((i) & 0xFF);
i >>= 8;
b[1] = (byte) ((i) & 0xFF);
i >>= 8;
return b;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Decodificação de Tipos
public static int getInt(byte[] b) {
int l = 0;
l |= b[3] & 0xFF;
l <<= 8;
l |= b[2] & 0xFF;
l <<= 8;
l |= b[1] & 0xFF;
l <<= 8;
l |= b[0] & 0xFF;
return l;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Decodificação de Tipos
public static short getShort(byte[] b) {
short s = 0;
s |= b[1] & 0xFF;
s <<= 8;
s |= b[0] & 0xFF;
return s;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Decodificação de Tipos
public static long getLong(byte[] b) {
long l = 0;
l |= b[7] & 0xFF;
l <<= 8;
l |= b[6] & 0xFF;
l <<= 8;
l |= b[5] & 0xFF;
l <<= 8;
l |= b[4] & 0xFF;
l <<= 8;
l |= b[3] & 0xFF;
l <<= 8;
l |= b[2] & 0xFF;
l <<= 8;
l |= b[1] & 0xFF;
l <<= 8;
l |= b[0] & 0xFF;
return l;
}
Laboratório de Estatística
e Geoinformação
Drivers
J
Protocolo (nova versão)
2 1 0
start
38
2
...
comand type
message size
type
value
method name
2
38
1
parameters
s h o w 2
...
start
message size
type
type size
value
type
value
Laboratório de Estatística
e Geoinformação
Drivers
J
Benefícios da Nova Versão do Protocolo
Não há mais necessidade do Mapeamento do "Command Type" para um método ex:
switch (commandMessage) {
case msgShowDatabasesResponse:
processaShowDatabasesResponse(parameters);
break;
}
Utilizando-se a nova versão o método a ser chamado será um dos parâmetros informados,
não havendo necessidade assim de alteração do protocolo caso algum método
novo seja implementado.
O único código a ser mudado será o JProxy que acessa o banco de dados.
Laboratório de Estatística
e Geoinformação
Drivers
J
Tarefas a serem executadas
. aRT
a) Fazer uma versão sem qualquer referência a conexão do banco de dados,
sem guardar cache nem algo do tipo.
b) Fazer um script de teste que utilize todos os métodos presentes no
TeMySQL ( utilizado como base para o primeiro TeJDBC driver ).
O script deve utilizar um banco de dados com valores pré-definidos e testar os resultados com um teste unitário para cada método.
Laboratório de Estatística
e Geoinformação
Drivers
J
Fim

Documentos relacionados