Текущее время: Ср, мар 27 2024, 08:04

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Вт, дек 15 2015, 18:06 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 15:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Добрый день.

В маппинге в 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, чтобы при различных прогонах маппинга это не загружалось в разных класслоадерах?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Ср, дек 16 2015, 09:19 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Здравствуйте!

Вопрос, наверное, глупый, но не проще перед загрузкой проверять, загружена или нет? Или в Яве нет таких возможностей?

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Ср, дек 16 2015, 09:24 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Посмотрите здесь:
http://scn.sap.com/thread/15622

P.S. Ну и образцово-"костыльный" вариант никто не отменял: обернуть LoadLibrary в try...catch и забить :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Ср, дек 16 2015, 11:44 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 15:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Я так понял, не получится использовать функции библиотеки, если она загружена в другом classloader'е.
Попробовал выполнить код без строчки loadLibrary - ошибка, программа не может выполнить нативные вызовы.
Получается, даже если проверку как-либо всунуть, то библиотека доступна в данной ситуации не будет.

То есть непонятно, как правильно загружать JNI-библиотеку в SAP PI. И вообще практикуется ли это, а то на scn.sap.com нашёл только одно обсуждение подобной ситуации, и то вопрос не решён.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Чт, дек 17 2015, 04:31 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
А если попробовать то же самое через java-мэппинг? Может, там по-другому отработает. Плюс, может быть, там что-нибудь типа finalize можно замутить, чтобы выгрузить библиотеку после использования.
Или System.gc() попробовать.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Пт, дек 18 2015, 15:17 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 15:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Вроде решилась проблема. Помогла нота 542175, хоть она и не про SAP PI, но ситуация похожа.

Jar-файл, который вызывает линуксовую библиотеку (в дальнейшем "обёртка"), выложили в некоторую папку на сервере и вписали его в свойство Java-машины java.class.path (в Netweaver Administrator). Перезапустили Java-часть.
В SAP PI эту обертку не загружали после этого. Пакеты и классы, определенные в этой обертке, нормально импортируются и используются в других jar-файлах, которые уже, в свою очередь, встроены в SAP PI.

Получается доступ к линуксовой библиотеке через некий единый .jar, и конфликтов пока не было.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в UDF: вызов JNI-библиотеки
СообщениеДобавлено: Пн, дек 21 2015, 04:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Вот была, кстати, мысль - подсунуть библиотеки самому java-серверу PI, чтобы он сам их загружал. :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB