O contexto é um sistema que provê informações
a partir de consultas a base de dados de diversas fontes. Minha atividade estava
relacionada com a consulta a um banco de dados que seria integrada ao sistema,
acessível a partir de uma função disponível em uma
DLL (Dinamically Link Library - Biblioteca de Vínculo Dinâmico,
para Windows).
Uma DLL pode ser vista como um pedaço de um código executável,
disponível em tempo de execução. Assim, programas feitos
em diversas linguagens podem acessar funções de uma DLL, desde
que sejam feitos os mapeamentos corretos para os tipos dos argumentos da função
e o valor de retorno.
O objetivo era invocar a partir de código Java a função
de consulta disponibilizada na biblioteca em questão, usando JNI (veja).
A implementação nativa de um método Java carregaria
na memória a DLL, invocaria a função da biblioteca e repassaria
uma string com o resultado da consulta, tarefa simples à primeira vista.
Entretanto, o desafio foi descobrir como invocar corretamente a função
da DLL. De início, a única dica fornecida foi o nome da função
e o número de argumentos. Após alguns dias de tentativas mal sucedidas,
recebi um exemplo de uso da função em Visual Basic. A conclusão
da tarefa ocorreu após processos de tentativa e erro e de pesquisa sobre
o mapeamento dos argumentos.
Aparentemente, fui a primeira pessoa na empresa a encarar um problema dessa
natureza, e por isso, tive que investigar sozinho, tendo como única ajuda
o meu chefe, que deu algumas sugestões. Quanto a ferramentas para desenvolvimento,
utlizei Eclipse [14] para a parte Java e MinGW
[25] para produzir a implementação
nativa em C.
Como desconhecia essa tecnologia antes do início do projeto,
realizei a leitura de alguns capítulos de [1]
para compreender os principais conceitos. Quanto aos prazos, certamente havia
uma data limite para a conclusão da tarefa, já que a aplicação
envolvia clientes, mas não fui informado a respeito. Provavelmente, meu
chefe teria falado de prazos se eu tivesse consumido muito tempo sem concluir
a tarefa.