• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

JavaSession.getClass бросает ClassNotFoundException

  • Автор темы nvyush
  • Дата начала
N

nvyush

Здравия всем!
Ситуация: в лотусовой БД есть Java библиотека с классом ClassName в пакете packageName (в панели объектов это выглядит как "packageName/ClassName")
В функции LS библиотеки типичный код:
Visual Basic:
Dim jSession As JavaSession
Set jSession = New JavaSession()
Dim jClass As JavaClass
Set jClass = jSession.GetClass("ClassName") 'бросает исключение в агенте
При вызове из кнопки формы срабатывает на ура, при вызове из агента на последней строке бросает исключение ClassNotFoundException.
Меняю имя класса на "packageName/ClassName" — всё наоборот, в агенте срабатывает, в кнопке бросает исключение.
Обработчиком ошибок заставил пробовать оба варианта, но хотелось бы разобраться, что не так.
Есть идеи?

Клиент 8.0.2 basic
Выгрузить библиотеку в jvm/lib/ext не предлагать (ну не любят боссы лишний раз переоткрывать Lotus).
 
T

turumbay

В агенте поведение верное. Согласно хелпу требуется FQN класса. Почему работает код на акции - загадка. Агент и action запускаются на одной и той же машине? Может таки где-то торчит этот же класс но в дефолтном пакете? Что если тупо переименовать класс в библиотеке?

Проверил на 7.0.3 и 8.5.1 Standard. FQN работает в агенте и акции. Если не указать пакет - падает также синхронно.
Java Library: "NvyProblem"
Java:
package ru.turumbay;
public class NvyProblem {
}
LS Library: "NvyProblemLS"
Visual Basic:
Option Public
Option Declare
Uselsx"*javacon"
Use "NvyProblem"
Function runProblemCode()
    Dim jSession As New JavaSession()
    Dim jClass As JavaClass
    Set jClass = jSession.GetClass("ru.turumbay.NvyProblem")
End Function
агент: "nvyAgent"
Visual Basic:
Option Public
Option Declare
Use "NvyProblemLS"
Sub Initialize
    Call runProblemCode()
End Sub
form action "NvyAction"
Visual Basic:
Option Declare
Use "NvyProblemLS"
Sub Click(Source As Button)
    Call runProblemCode()
End Sub
Есть возможность прогнать именно этот конкретный код?

Также хочется посмотреть, каким класслоадером нотус грузит объекты в обоих случаях:
Объект класса впоследствии создается или используются статик методы?
в конструктор System.out.println( this.getClass().getClassLoader().getClass().getName());
в статике: ИМЯ_КЛАССА.getClassLoader().getClass().getName()
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
Set jClass = jSession.GetClass("ru.turumbay.NvyProblem")
есть разница в нотациях через точку (как у нормальных людёв :) ) и через слэш (чиста LS заморочка), кот. считается кросс-платформенным
может в это дело?
 
N

nvyush

Небольшое уточнение. Это не акция, кнопка (Hotspot Button) и ведёт она себя так, когда документ открывается через
Call workspace.EditDocument(True, doc). Когда документ открывается двойным кликом из представления, поведение кнопки идентично поведению агента. Но самое интересное, после того как документ будет открыт из представления и потом закрыт, кнопка начинает вести себя прилично и при открытии документа через workspace.EditDocument, причём даже после переоткрытия базы. После перезапуска клиента Lotus всё возвращается на кругие своя. Индоглюк, одним словом :) .
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
код в либе или в самой кнопке?
 
N

nvyush

код в либе или в самой кнопке?
Код в кнопке вызывает функцию из LS-библиотеки, в которой вызов статического метода ява-класса из ява-библиотеки.
В тестовом агенте код
Visual Basic:
Sub Initialize
    Call Click(Nothing)
End Sub
где Click — процедура, скопированная в агента из кнопки.

Поведение идентично как в 8.0.2 basic, так и в 8.5.1 basic.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
библиотека цепляется на уровне формы или в хотспот?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
а в форме эта либа тоже есть?...
д.р. словами - нетли переопределения либ (что нежелательно)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
дык могет положить (как раз) туды
 
N

nvyush

Переместил Use библиотеки из подформы непосредственно в кнопку и всё заработало. Нет слов, одни буквы, да и те нецензурные :welcome:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
Переместил Use библиотеки из подформы
не рекомендую так размещать либы... (в подформах)
либо в кнопке либо в форме, но тогда придётся отказываться от Option Declare (если код в подформе)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!