#java #web-applications #dll #weblogic #com4j
#java #веб-приложения #dll #weblogic #com4j
Вопрос:
Я разрабатываю веб-приложение Java, которое использует библиотеку com4j для подключения и извлечения данных из внешней базы данных. Мое приложение без проблем работает на моем локальном хосте, на котором выполняется настройка maven / jetty.
Однако мне нужно, чтобы приложение размещалось на сервере WebLogic, администратором которого я не являюсь. При развертывании и запуске там веб-приложения я получаю исключение неудовлетворенной ссылки, как показано ниже.
Я пробовал многочисленные предлагаемые решения подобных проблем, но безуспешно. Ошибки время от времени немного меняются, но в основном те же. Все предлагаемые решения, которые я нашел, можно свести к трем предложениям, найденным на этом сайте: https://com4j.java.net/deployment.html
- Он должен работать автоматически при упаковке jar: этого не происходит. Jar определенно находится в war-файле, а dll находится внутри .jar, но все равно возникает то же исключение.
- Разместить com4j.dll в том же каталоге, что и com4j.jar : Абсолютно ничего не делает с сообщением об ошибке.
- Установите системное свойство java.library.path, чтобы включить каталог, в котором com4j.dll находится: Ошибка изменилась на .dll уже загружен в другой загрузчик классов.
я пробовал один раз, все сразу, и разные комбинации из вышеперечисленного.
Я не ожидаю, что мастер набросится и скажет мне точно, что здесь делать, но я хотел бы получить помощь в поиске другого угла атаки на эту проблему.
<11-06-2014 15:23:34 CEST> <Error> <Deployer> <BEA-149265>
<Failure occurred in the execution of deployment request with ID
'1402493014299' for task '158'. Error is:
'weblogic.application.ModuleException: Unable to load com4j.dll'
weblogic.application.ModuleException: Unable to load com4j.dll
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1401)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:460)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
Truncated. see log file for complete stacktrace
Caused By: java.lang.UnsatisfiedLinkError: no com4j-x86 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at com4j.COM4J.loadNativeLibrary(COM4J.java:530)
at com4j.COM4J.<clinit>(COM4J.java:522)
Truncated. see log file for complete stacktrace
>
Комментарии:
1. Вы уверены, что java.library.path установлен правильно и не перезаписывается каким-либо сценарием запуска weblogic? Вы пробовали распечатать его
System.getProperty("java.library.path")
перед вызовом jni? Недавно я настроил wl на использование собственных библиотек, и я просто помещаю их в path, и они видны.2. Я нет. Мне бы очень понравилось руководство по этому вопросу. Я был уверен, что мои коллеги знали, что они делали в этом отношении. Я довольно недавно получил образование, и серверы, сборки, системные переменные и тому подобное не являются моей сильной стороной. И, честно говоря, я не уверен, вызываю ли я jni или нет.
3. Администратор сервера говорит, что, да, мы уверены, что путь к библиотеке указан правильно. Однако сообщение об ошибке изменилось в тот момент, когда мы попытались это сделать, и в нем утверждалось, что . dll уже был загружен в другой загрузчик классов.
Ответ №1:
Решение вашей проблемы, вероятно, объясняется здесь: https://com4j.java.net/deployment.html
Вы можете настроить java.library.path
переменную различными способами :
Измените сценарий startWebLogic в своем домене.
или
Войдите в консоль администратора weblogic, перейдите в меню Среда -> Серверы -> Мой сервер -> Начальная вкладка сервера -> Добавить -Djava.library.path=PATH_TO_LIBRARY
в аргументы: текстовое поле.
Комментарии:
1. Вы намеренно повторяете ссылку, как подтверждение того, что я на правильном пути, или вы не видели этого в вопросе?
2. Решение, представленное последним, уже опробовано. Ошибка изменилась на . dll уже загружен в другой загрузчик классов.
3. Поэтому подумайте о том, чтобы изменить название вопроса… Я не видел ссылку.