Como posso expor uma conexão C ODBC a uma JVM utilizando JNI?
-
05-07-2019 - |
Pergunta
Estou a incorporação de um JRE em um aplicativo C existente utilizando a API invocação, e Eu gostaria de ser capaz de usar JDBC para trabalhar com o banco de dados em que o código. este aplicação é uma aplicação de processamento de transações e banco de dados transação é controlado pelo código na porção C da aplicação, e o código java deve ser executado dentro dessa transação. Isso significa que eu não pode abrir um new respeito, devo voltar a usar o já existente.
Assim, há uma maneira de proporcionar o acesso JDBC a um identificador de conexão ODBC existente ao configurar o JRE? Alguns ponte JDBC-ODBC, talvez, mas ao contrário do driver existente com esse nome, que pode ser configurado para utilizar um já existente conexão e transação.
As minhas outras opções, como eu vê-los, são os seguintes:
-
Fornecer java equivalentes para cada operação de C que é possível no aplicação (isso não é desejável para muitas razões - temos um muitos métodos e duplicando-los é um pé no saco.
-
Escrever meu próprio driver JDBC que envolve a conexão ODBC com JNI. Claro, ele tinha ser um projeto divertido fim de semana (mês), mas espero que a necessidade de algo feito mais rápido do que isso.
Ajuda-me, Stack-Overflow, você é minha única esperança!
Solução
Não sei se isso vai funcionar, mas ... Eu tinha um rápido olhar para o código-fonte decompiled de ponte JDBC-ODBC do Sol. Parece que você poderia subclasse o JdbcOdbcConnection para que ele inicializa-se com uma alça de ligação conhecida e um estado já abriu. Isso pressupõe que as alças de ligação no lado do Java são alças de conexão ODBC reais ou ponteiros para objetos de conexão, e que as bibliotecas ODBC utilizados pela ponte JDBC-ODBC e seu código são compatíveis no sentido de que eles podem compartilhar alças de ligação.
Você precisa verificar se a licença de Sun permite que os desenvolvedores para executar este tipo de trapaça embora.
Outras dicas
Sun fornece uma ponte JDBC-ODBC no JDK.
EDIT:. Relendo Parece que você já sabe sobre isso e não quero usá-lo