powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с JNI
16 сообщений из 16, страница 1 из 1
Проблемы с JNI
    #35886911
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Возникает проблема. Есть Single Sign On модуль, которые используется для парсинга тикета SAP-а. Потом результат работы этого модуля используется для авторизации в другой системе.

Модуль представляет собой класс SSO2Ticket:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 public   class  SSO2Ticket
{
     public   static   final   int  ISSUER_CERT_SUBJECT =  0 ;
     public   static   final   int  ISSUER_CERT_ISSUER =  1 ;
     public   static   final   int  ISSUER_CERT_SERIALNO =  2 ;
		
     public   static  String SECLIBRARY ;
     public   static  String SSO2TICKETLIBRARY = "sapssoext";    
    
     static  {
         if  (System.getProperty("os.name").startsWith("Win"))  {
            SECLIBRARY = "sapsecu.dll";
        }  else  {
            SECLIBRARY = "libsapsecu.so";
        }
        System.loadLibrary(SSO2TICKETLIBRARY);
         if (!init(SECLIBRARY)) {            
            System.out.println("Could not load library: " + SECLIBRARY);
            System.exit(- 1 );            
        }			            
    }

    
     private   static   native   synchronized   boolean  init(String seclib);
    
     public   static   native   synchronized  Object[] evalLogonTicket(
        String ticket,
        String pab,
        String pab_password)
         throws  Exception;    
}


Модуль завернут в сервелт, который принимает в параметры ticket, парсит его и выводит в поток логин авторизированного пользователя. Другая система вызывает сервлет с параметром ticket, в поток получает логин, авторизированного пользователя.

GetTicketServlet выгядит примерно следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   class  GetTicketServlet  extends  HttpServlet
{
     public   static   void  doService(HttpServetRequest req, HttpServletResponse res) {
        String ticket = req.getParameter("ticket");
        Object o[] = SSO2Ticket.evalLogonTicket(ticket, "verefy.pse" ,  null );
        res.getWriter().pritnln(o[ 0 ]); // Login id
    }
}


В общем схема такова (исходники писал на коленках). Это все работает под tomcat. Но периодически при нагрузке все слетает. То есть при каждом запуске данного сервлета память занимаемая JVM наростает и доходит до придела и слетает. Все работает под linux ubuntu 64 разряда, jdk sun 1.6.

Я не понимаю в чем может быть проблема. Библиотека вроде грузить один раз, а потом только отрабатывает функция evalLogonTicket. Работоспособность функции как бы тоже внушает доверие JNI SAP все-таки.

Что можно сделать с данной проблемой. Может быть какие-то настройки или параметры жава машины или томката?
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886924
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отделите System.loadLibrary(SSO2TICKETLIBRARY); от класса SSO2Ticket и делайте загрузку библиотеки на событие onStart для web-приложения
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886927
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Не получиться, библиотека очень чувствительна к названию класса в котором грузиться, то есть функция System.loadLibrary(SSO2TICKETLIBRARY), отрабатывает успешно только в классе с названием SSO2Ticket. Это конечно странно, но это факт.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886952
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну проверяйте загружена она уже или нет (хотя бы флаг какой-нибудь заведите) и если не загружена то System.loadLibrary. Очевидно что происходит утечка памяти и скорее всего именно при загрузке библиотеки.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886964
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

И с флагом делал, выносил загрузку в отдельную функцию класса SSO2Ticket в котором фиксировался флаг и каждый раз проверялся при повторной загрузки (загрузка происходит один раз). Очень сложно это оттестировать, оно вроде работает, но когда покрутится на сервере недельку, то падает.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886971
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_,

возможно память течет в натив коде, но если с ним ничего сделать нельзя, то делайте ежедневный (в зависимости от нагрузки возможно чаще или реже) перезапуск Tomcat :(
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886981
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Возможно, просто к эта проблема всех так запарила уже. Второй раз уже возвращаюсь к ней. Сначала делали через Java-Php-Bridge, но там модуль тоже отваливался по многим причинам (думали проблема с бриджом). Переделал по простому, проблема оказалась в библиотеке. Томкат перезапускать не вариант, так как основное нагрузочное тестирование еще не проводилось и придется его перезапускать очень часто :), а пользователей 5000. То есть нагрузка серьёзная. Объяснить что проблема в саповской натив библиотеке, будет сложно :). Начальству главное что б работало, не будет вникать в такие подробности.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886984
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_,

Да и на офф форуме сапа, есть несколько бредовый статей от ихних консультантов, которые реально рекомендуют такое подход, хотя примеры которые они там выложили даже не работают, только показывают основную идею. Это говорит о том, что это все работает только теоретически, а на практике нормально оттестировать свои поделки они не удосужились.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35886990
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_а пользователей 5000. То есть нагрузка серьёзная.
- согласен, но это можно компесировать увеличением доступной JVM памяти. Такие аргументы как "дайте денег на память" обычно доступны "начальству".

_chaos_Объяснить что проблема в саповской натив библиотеке, будет сложно :). Начальству главное что б работало, не будет вникать в такие подробности.
- можно исхитриться, типа нативная библиотека живет в отдельной JVM откуда дергается через RMI, а уж отдельную JVM можно перезапускать хоть каждые 15 минут
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35889399
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Ну это очень извратно :).
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35889452
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_chaos_,

Код: plaintext
1.
Object o[] = SSO2Ticket.evalLogonTicket(ticket, "verefy.pse" ,  null );

Возможно это массив не освобождается. И стоит его добавить результат в WeakReference, а потом очистить и обнулить и вызвать gc.

Кстати, а вариант с JNA?
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35889517
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет JNA, только под Win32
...
Рейтинг: 0 / 0
Проблемы с JNI
    #35897385
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все тема закрыта. У меня все работает :), это они так решили съехать на мою часть, что быть точно уверенными что проблема у них.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблемы с JNI
    #39785284
wilhel76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_chaos_, добрый день!
Появилась задача по этому классу. Вопрос по использованию его в php-bridge. Может помните, у вас не было проблем с обнаружением библиотек libsapcrypto.so и libsapssoext.so?
У нас ошибка, с которой не знаем что делать. Библиотеки скопированы куда только можно. Также есть внутри jar файла, который скопирован внутрь /usr/share/tomcat/webapps/JavaBridge/WEB-INF/lib
Logon ticket available Warning: Unchecked exception detected: [[o:Response$UndeclaredThrowableErrorMarker]:"FATAL: Undeclared java.lang.RuntimeException detected. java.lang.Exception: Invoke failed: [[o:SSO2Ticket]]->getStringVersion. Cause: java.lang.UnsatisfiedLinkError: SSO2Ticket.getStringVersion()Ljava/lang/String; VM: 1.6.0_41@ http://java.sun.com/" at: #-11 SSO2Ticket.getStringVersion(Native Method)
...
Рейтинг: 0 / 0
Проблемы с JNI
    #39785293
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wilhel76,
Может вам технологию поменять с 2009 года?
Например, у ГОСУСЛУГИ либы SSO, просто всё делают в фильтрах запроса.
...
Рейтинг: 0 / 0
Проблемы с JNI
    #39785314
wilhel76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Предложим клиенту.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с JNI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]