session.CurentDatabase в java

savl

Lotus Team
28.10.2011
2 624
314
BIT
516
Как в java-библиотеке получить текущую БД?
Вопрос не совсем корректный, потому что сейчас можно ответить так: "session.getCurrentDatabase"
или "так же как на LS, но просто методы другие, смотри help"

В любом случае сначала надо иметь объект Session (аналог NotesSession), вот из него уже получается база.
Как правило java либы не живут сами по себе, они подключены либо в агенты, либо в LS2J классы.
Таким образом session можно как один из параметров передавать внутрь объекта, который описан в либе, либо создавать с нуля.
Всё зависит от конкретного случая, а без описания проблемы, ответы будут так себе.
 

podbelski

One Level
11.07.2022
7
1
BIT
3
getCurrentDatabase - это какая-то недокументируемая функция? Я в хелпе нашел только session.getDatabase

Вообще, у меня, похоже проблема даже до этого. Библиотека не может создать сессию.
Получаю ошибку: 4225: File NotesException: Cannot create a session from an agent not found

Код либы такой:
Java:
public class wscReportServerJava  {
    final static String URL_TEST = "testhost.company.ru";
    final static String URL_PROD = "prodhost.company.ru";

    final static String FILE_PATH_BASE = "%s\\%s_%s.pdf";
    final static String SYS_PROP_NAME_TEMPDIR = "java.io.tmpdir";
    
    public String invoke(String brief, String format, String jsonRequest) throws IOException{
        
        try
        {
            Session s = createSession();
            Database db = s.getCurrentDatabase();

Попробовал варианты: createTrustedSession, createSessionWithFullAccess.
Одна и та же ошибка.

Да, эту библиотеку использует LS-библиотека. Передавать туда еще доп параметры не хотелось бы - уже используется во многих базах.
Ну, и хотелось бы просто разобраться что не так. Вроде бы элементарная операция.
 

podbelski

One Level
11.07.2022
7
1
BIT
3
Нашел такое:
Если ничего не изменилось, и по-прежнему все так геморно, то, видимо, надо добавлять параметр.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Начните с того, что создайте новый Java агент в Domino Designer. Он вам сделает заготовку для агента и уже в ней пишите свой код. Если у вас не агент, то внимательнее смотрите Help, там есть подробные примеры. То, что вы написали работать не должно.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
516
Нашел такое:
Если ничего не изменилось, и по-прежнему все так геморно, то, видимо, надо добавлять параметр.
Без изменений.

Сессию можно создать так:
Java:
session = NotesFactory.createSession();

получить текущую базу, два варианта.
Код:
Database db = session.getCurrentDatabase();
или через agentContext
Код:
Database db = session.getAgentContext().getCurrentDatabase();
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Без изменений.

Сессию можно создать так:
Java:
session = NotesFactory.createSession();

получить текущую базу, два варианта.
Код:
Database db = session.getCurrentDatabase();
или через agentContext
Код:
Database db = session.getAgentContext().getCurrentDatabase();
Ничего не выйдет у тут изначально всё неправильно. Либо класс должен наследоваться от NotesThread/AgentBase, либо Session должно быть обёрнуто в лотусовый поток. В Хелпе всё подробно расписано на этот счёт. Т.к. автор говорит, что это библиотека, то должно быть что-то типа 2-го или 3-го примера отсюда

Из вопроса непонятно как эта библиотека используется. Если из Java, то объект Session или Database можно передать в параметрах метода invoke, если из LotusScript то, скорее всего вообще ничего не получится.



 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
испольpовать java с объектами домнны - такое-себе (и это уже не раз отмечалось)
нужны либы из java - LS2J
обмен "простыми" типами
можно даже вызывать стримы java и с ними работать (если аккуратно)
если надо полноценно java; OSGi/xpages
в контексте агентов - всё очень медленно, каждый раз запуск инстанса жвм, сборка мусора отложенная и прочие прелести (на блокировку IO, например)
а оно надо?
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
516
в контексте агентов - всё очень медленно, каждый раз запуск инстанса жвм
Нет, это не так. Нет старта нового инстанса.
Да, запуск агента это аналог: java(.exe) -jar agentname.jar , но это не создание нового инстанса jvm, он уже есть, работает, а вот создание нового потока будет правильнее.
Ранее писали про медленный старт java агентов на клиенте, но после 853 это актуально только для basic версий (всегда), если standart - старт почти мгновенный кроме первого, вот он долгий.
А если мы говорим про серверную часть, то наверное имеется в виду DoTS и Schedule java agent (картинка ниже показывает, что от запуска jvm и старта агента - нет разницы), но там ситуация немного другая.
По тестам на amgr, могу точно сказать, что:
Потоки шедулера независимые и память у них разная, поэтому классы загруженные одним шедулером из соседнего потока - не видны для другого шедулера другого потока и он загрузит их заново.
Если же шедулер запущен тем же потоком, что и ранее (так получилось) , то он не будет грузить классы - они уже есть в данном потоке.
Запуск агента через консоль - уникален, там своя память, она шаредная на все агенты. Сколько не запускай - всегда будет брать из памяти.
Ну и классика, файлы jar лучше размещать на сервере.


1702931106310.png
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
в контексте агентов - всё очень медленно, каждый раз запуск инстанса жвм, сборка мусора отложенная и прочие прелести (на блокировку IO, например)
а оно надо?
Ну, а если надо поработать с реляционной базой или очередью сообщений MQ или ещё чего-нибудь такое, те же эксельные файлы разбирать или PDF генерить, как тут без Java, не через OLE же? LotusScript может вообще запретят скоро - пишите всё на Java, Java не скоро запретят. :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Ну, а если надо поработать с реляционной базой или очередью сообщений MQ или ещё чего-нибудь такое, те же эксельные файлы разбирать или PDF генерить, как тут без Java, не через OLE же? LotusScript может вообще запретят скоро - пишите всё на Java, Java не скоро запретят. :)
агент на ЛС, джава через ЛС2Ж - так и написал
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Нет, это не так. Нет старта нового инстанса.
Да, запуск агента это аналог: java(.exe) -jar agentname.jar , но это не создание нового инстанса jvm, он уже есть, работает
на картинке - JVM Initializes - как не назови ;) , да,, жвм может запускать жвм, легче от этого не становится...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Не, мне так не нравится. Полумеры какие-то, как безалкогольное пиво.
на клиенте нет др. "нормальной" возможности (не считая хэпаги) ;) получить доступ к джава, но не получить "особенности" с агентами (джава)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Ранее писали про медленный старт java агентов на клиенте, но после 853 это актуально только для basic версий (всегда), если standart - старт почти мгновенный кроме первого, вот он долгий.
при внешней жвм и малом кол-ве классов я тоже могу сказать- старт почти мгновенный ;)
если набор классов каждый запуск разный по памяти (загруженных в память, то что ты писал про java.exe -jar) то формально - это не имеет отличий от нового инстанса
речь была в т.ч. про отжор памяти ...
 
Последнее редактирование:
Мы в соцсетях:

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