Разрыв соединения DB2 между последовательными вызовами JNI к библиотекам DLL C

#java #c #connection #db2-luw

#java #c #соединение #db2-luw

Вопрос:

Я использую пакетное приложение Java для вызова метода service устаревшего приложения через jni. Это приложение состоит из различных c DLL, использующих встроенный статический sql.

Первый вызов jni запускается и настраивает устаревшее приложение, последующие вызовы касаются метода service, и, наконец, приложение завершает работу с последним вызовом. При каждом вызове метода service различные операторы SQL (по сравнению Выполняются IBM DB2 LUW), распределенные по различным библиотекам DLL устаревшего приложения.

Все работает отлично, пока я открываю и закрываю DB-соединение каждый раз, когда вызываю метод service. Но поскольку соединение оказалось серьезной проблемой с производительностью (запуск будет содержать от 1,5 до 2 миллионов устаревших вызовов), я хотел бы установить соединение один раз с первым вызовом и закрыть его с последним. Но, по-видимому, соединение не поддерживается между вызовами jni, поскольку последовательные вызовы (метода service) приводят к соответствующим ошибкам sqlcode (-1024). Пока я не покидаю область c , соединение активно; оно закрывается каждый раз, когда я возвращаюсь к приложению Java.

Я был бы признателен за любые предложения о том, как справиться с ровно 1 подключением / отключением. У меня почему-то заканчиваются идеи для решения этой проблемы.

Комментарии:

1. Можете ли вы подключить dll и переопределить методы подключения / отключения с помощью чего-то, что просто возвращает кэшированный дескриптор?

2. Я должен признать, что я еще не совсем понял вашу идею. Каким будет кэшированный дескриптор?

3. Все, что было возвращено с самого первого вызова connect.

4. К сожалению, из вызова connect ничего не возвращается. Со встроенным SQL в C нет объекта connection, как в java. Вы выполняете инструкцию connect для установления соединения, и все.

5. Еще лучше! Затем вы можете заменить функцию connect чем-то вроде if (already_connected) return; do_original_connection(); already_connected = true; и сделать функцию disconnect no_op .