Добавление драйвера jar JDBC в classpath для задания AWS Elastic Beanstalk

У меня есть приложение Elastic Beanstalk, которое я пытаюсь настроить для подключения к базе данных FileMaker Pro через JDBC. Код, который я использую:

import jaydebeapi as jdp

jdbc_driver_location = '/tmp/fmjdbc.jar'

conn = jdb.connect(jdbc_driver_class,
                   jdbc_connection_type + '://' + db_url + '/' + db_name,
                   [user_name, password], jdbc_driver_location,)

Когда я пытаюсь это сделать, я получаю следующую ошибку:

java.sql.SQLException: No suitable driver found for jdbc:filemaker://10.120.120.108/carecord-<class 'jpype._jexception.java.sql.SQLExceptionPyRaisable'>

Чтобы попытаться решить проблему, я добавил jdbc.jar в папку /tmp экземпляра Ec2, а также включил его в каталог проекта. Когда я ввожу SSH в экземпляр EC2 и выдаю команду:

JAVA_HOME=/tmp/fmjdbc.jar

Программа запустится при следующем запросе без проблем. Через несколько часов он выдаст исходную ошибку и потребуется снова выполнить указанную выше команду для работы. Чтобы исправить это, я попытался добавить следующее в /.ebextensions, чтобы скопировать.jar в папку tmp из каталога проекта и с самого начала выполнить указанную выше команду на сервере:

commands:
  command01:
    command: sudo cp /opt/python/current/app/fmjdbc.jar /tmp/fmjdbc.jar
  command02:
    command: JAVA_HOME=/tmp/fmjdbc.jar

Но проект все равно выдает ошибку. Любые мысли о том, как я могу добавить этот драйвер в classpath, так что работа будет выполняться последовательно?

2 ответа

Решение

Чтобы помочь людям, у которых есть эта проблема в будущем, ответ на этот вопрос, который я нашел, был в конце этой темы.

Я добавил следующее:

if jpype.isJVMStarted() and not jpype.isThreadAttachedToJVM():
    jpype.attachThreadToJVM()
    jpype.java.lang.Thread.currentThread().setContextClassLoader(jpype.java.lang.ClassLoader.getSystemClassLoader())

Чуть выше

jdbc_driver_location = '/tmp/fmjdbc.jar'

раздел моего оригинального кода выше. Это позволяет приложению выполнить цикл и успешно найти необходимый драйвер.

JAVA_HOME должен указывать на местоположение, где Java установлена ​​на сервере. Вы не используете JAVA_HOME добавить библиотеки в путь к классам. Вам не нужно устанавливать переменные окружения, чтобы ваш код работал.

Корень вашей проблемы в том, что вы копируете файл в /tmp/fmjdbc.jar но вы настраиваете jdbc_driver_location быть /tmp/jdbc.jar, Обратите внимание, как эти имена файлов отличаются. Чтобы исправить ваш код, измените его следующим образом:

jdbc_driver_location = '/tmp/fmjdbc.jar'
Другие вопросы по тегам