Текущее время: Вт, май 23 2017, 12:58

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




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

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

В маппинге в User-defined function используется набор Java-классов, в одном из которых происходит следующий вызов скомпилированной JNI-библиотеки libjiprivpg.so:
Код:
class IPriv_native
{
   static
   {
      System.loadLibrary("jiprivpg");
   }
...
}


При первом тесте данного маппинга функции из JNI-библиотеки выполнились успешно.
Однако при следующих запусках работа прекращается со следующим сообщением:
Код:
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, 10:19 
Старший специалист
Старший специалист
Аватара пользователя

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

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

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


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

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

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

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


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

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

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


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

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

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


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

Зарегистрирован:
Вт, ноя 25 2014, 16: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, 05:09 
Старший специалист
Старший специалист
Аватара пользователя

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

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


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

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


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

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


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

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