SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Проблема в UDF: вызов JNI-библиотеки https://www.sapboard.ru/forum/viewtopic.php?f=70&t=92020 |
Страница 1 из 1 |
Автор: | Андрей Петин [ Вт, дек 15 2015, 18:06 ] |
Заголовок сообщения: | Проблема в UDF: вызов JNI-библиотеки |
Добрый день. В маппинге в User-defined function используется набор Java-классов, в одном из которых происходит следующий вызов скомпилированной JNI-библиотеки libjiprivpg.so: Code: class IPriv_native { static { System.loadLibrary("jiprivpg"); } ... } При первом тесте данного маппинга функции из JNI-библиотеки выполнились успешно. Однако при следующих запусках работа прекращается со следующим сообщением: Code: Runtime exception when processing target-field mapping /ns0:Coins/Status; root message: Exception:[java.lang.UnsatisfiedLinkError: Native Library /usr/sap/POD/J00/exe/libjiprivpg.so already loaded in another classloader] in class com.sap.xi.tf._MM_Test_ method TestLib Т.е. библиотека уже куда-то загружена, и при последующих вызовах loadLibrary таким образом ругается. Как можно эту проблему обойти? Где нужно выполнять loadLibrary, чтобы при различных прогонах маппинга это не загружалось в разных класслоадерах? |
Автор: | Chaser009 [ Ср, дек 16 2015, 09:19 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
Здравствуйте! Вопрос, наверное, глупый, но не проще перед загрузкой проверять, загружена или нет? Или в Яве нет таких возможностей? |
Автор: | Chaser009 [ Ср, дек 16 2015, 09:24 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
Посмотрите здесь: http://scn.sap.com/thread/15622 P.S. Ну и образцово-"костыльный" вариант никто не отменял: обернуть LoadLibrary в try...catch и забить |
Автор: | Андрей Петин [ Ср, дек 16 2015, 11:44 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
Я так понял, не получится использовать функции библиотеки, если она загружена в другом classloader'е. Попробовал выполнить код без строчки loadLibrary - ошибка, программа не может выполнить нативные вызовы. Получается, даже если проверку как-либо всунуть, то библиотека доступна в данной ситуации не будет. То есть непонятно, как правильно загружать JNI-библиотеку в SAP PI. И вообще практикуется ли это, а то на scn.sap.com нашёл только одно обсуждение подобной ситуации, и то вопрос не решён. |
Автор: | Chaser009 [ Чт, дек 17 2015, 04:31 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
А если попробовать то же самое через java-мэппинг? Может, там по-другому отработает. Плюс, может быть, там что-нибудь типа finalize можно замутить, чтобы выгрузить библиотеку после использования. Или System.gc() попробовать. |
Автор: | Андрей Петин [ Пт, дек 18 2015, 15:17 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
Вроде решилась проблема. Помогла нота 542175, хоть она и не про SAP PI, но ситуация похожа. Jar-файл, который вызывает линуксовую библиотеку (в дальнейшем "обёртка"), выложили в некоторую папку на сервере и вписали его в свойство Java-машины java.class.path (в Netweaver Administrator). Перезапустили Java-часть. В SAP PI эту обертку не загружали после этого. Пакеты и классы, определенные в этой обертке, нормально импортируются и используются в других jar-файлах, которые уже, в свою очередь, встроены в SAP PI. Получается доступ к линуксовой библиотеке через некий единый .jar, и конфликтов пока не было. |
Автор: | Chaser009 [ Пн, дек 21 2015, 04:09 ] |
Заголовок сообщения: | Re: Проблема в UDF: вызов JNI-библиотеки |
Вот была, кстати, мысль - подсунуть библиотеки самому java-серверу PI, чтобы он сам их загружал. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |