LS2J и объекты Notes-классов

MaxP

Member
22.07.2020
5
0
Добрый день.

Я совсем новичек по Java, искал решение не нашел.

Есть библиотека, в ней код:

Код:
NotesThread.sinitThread();
Session s = NotesFactory.createSession();
Database db = s.getCurrentDatabase();

Делаю вызов лотус агентом, выдает ошибку:
Java ошибка.jpg


Как создать сессию или инициализировать db? Помогите плиз.
 

garrick

Lotus Team
26.10.2009
1 262
138
Вы откуда это запускаете?
1. Агент в базе на сервере Domino.
2. Приложение (jar-файл) из консоли.
3. Приложение (war-файл) на App сервере.
 

garrick

Lotus Team
26.10.2009
1 262
138
Java:
Session s = getSession();

Здесь написано
Creation and access
For stand-alone applications, use one of the NotesFactory.createSession methods.

For agents and applets, use AgentBase.getSession().

Ваш пример

Java:
import lotus.domino.*;

public class JavaAgent extends AgentBase {

  public void NotesMain() {

    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();

      // (Your code goes here)

    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}
 

MaxP

Member
22.07.2020
5
0
Уточнение. Запускаю с лотус-агента Java - функцию. getSession() работает только в агенте Java.

Агент:
Код:
Dim javaSession As New JavaSession   
Dim ClassName As Javaclass
Set ClassName = javaSession.GetClass("ClassName")
ClassName.UNID="какой-то юнид"
Messagebox ClassName.RunMe
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
574
Уточнение. Запускаю с лотус-агента Java - функцию. getSession() работает только в агенте Java.

Агент:
Код:
Dim javaSession As New JavaSession  
Dim ClassName As Javaclass
Set ClassName = javaSession.GetClass("ClassName")
ClassName.UNID="какой-то юнид"
Messagebox ClassName.RunMe
это LS2J
 

garrick

Lotus Team
26.10.2009
1 262
138
Уточнение. Запускаю с лотус-агента Java - функцию. getSession() работает только в агенте Java.

Агент:
Код:
Dim javaSession As New JavaSession  
Dim ClassName As Javaclass
Set ClassName = javaSession.GetClass("ClassName")
ClassName.UNID="какой-то юнид"
Messagebox ClassName.RunMe
Вы меня не путайте. Я чего-то не пойму вы на Java пишите или на LotusScript? Это уже не Java. Вы чего вообще сделать-то хотите?
 

MaxP

Member
22.07.2020
5
0
Пишу на LS функцию, для проверки создал агента на LS. Код на лотус скрипте вызывает функцию из Java-библиотеки. Есть некий документ в LS части, который мне нужно передать в Java-функцию и там с ним работать. Док я передать на могу напрямую, поэтому передаю UNID этого дока. И в Java-функции я хочу этот док получить так doc=db.getDocumentByUNID(unid). Соответственно, чтобы получить db, я объявляю сессию.
NotesThread.sinitThread();
Session s = NotesFactory.createSession();
Database db = s.getCurrentDatabase();
doc=db.getDocumentByUNID(unid);
При вызове Java-функции из LS-агента, ругается на то, что нельзя создать сессию.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
574
Код на лотус скрипте вызывает функцию из Java-библиотеки.
нет проблем, зависил от либы, если в шатной поставке - всё будет работать
мне нужно передать в Java-функцию и там с ним работать
совсем не нужно, библиотека совсем не обязана оперировать нотусёвыми сущностями (и лучше если этого не будет)
При вызове Java-функции из LS-агента, ругается на то, что нельзя создать сессию.
сессию в ЛС2Ж создать нельзя и не нужно , весь обмен возможен через массивы и простые типы
в агент, если интерактивно, можно передать документ, если агент на ЛС
 

VladSh

начинающий
Lotus Team
11.12.2009
1 749
145
Есть некий документ в LS части, который мне нужно передать в Java-функцию и там с ним работать. Док я передать на могу напрямую, поэтому передаю UNID этого дока.
Документ элементарно передаётся в Java. Для этого есть метод NotesAgent.runWithDocumentContext().
Только это будет работать в той же среде, т.е. если запускаете LS-код на клиенте, то и Java-агент стартанёт на клиенте.

Создаёте агент на Java и пускаете его с помощью runWithDocumentContext, передавая документ, а в Java-агенте получаете и работает с ним. Причём если сделаете какие-либо изменения в документе на стороне агента, то документ даже сохранять не надо - все изменения будут доступны в LS-коде в переданном NotesDocument.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
574
Документ элементарно передаётся в Java. Для этого есть метод NotesAgent.runWithDocumentContext().
Только это будет работать в той же среде, т.е. если запускаете LS-код на клиенте, то и Java-агент стартанёт на клиенте.

Создаёте агент на Java и пускаете его с помощью runWithDocumentContext, передавая документ, а в Java-агенте получаете и работает с ним. Причём если сделаете какие-либо изменения в документе на стороне агента, то документ даже сохранять не надо - все изменения будут доступны в LS-коде в переданном NotesDocument.
мне всегда ссыкотно с джава такое делать - там жизнь нативных объектов очень непредсказуема и может вызывать утечки
 

garrick

Lotus Team
26.10.2009
1 262
138
мне всегда ссыкотно с джава такое делать - там жизнь нативных объектов очень непредсказуема и может вызывать утечки
Просто надо не забывать прибивать самостоятельно все эти объекты, как в обычном Си, а не надеятся на GC. Всегда помним, что notes.jar всего лишь обёртка для C API.
 
  • Нравится
Реакции: alexas1

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
574
Просто надо не забывать прибивать самостоятельно все эти объекты, как в обычном Си, а не надеятся на GC. Всегда помним, что notes.jar всего лишь обёртка для C API.
вот я не хочу это помнить ;) потому и предпочитаю не работать в нотусёвыми классами из джава
более того - бывают залоченные хэндлы и recycle() тупо ничего не сделает...
на сервере уже получал утечки в джава работающего с нотусёвыми классами, после чего хттп падал, порой унося с собой и весь сервер
 
  • Нравится
Реакции: VladSh и alexas1

VladSh

начинающий
Lotus Team
11.12.2009
1 749
145
мне всегда ссыкотно с джава такое делать - там жизнь нативных объектов очень непредсказуема и может вызывать утечки
А я думал, ты сейчас скажешь, что в сессии клиента это решение не очень, потому что скоро откажутся от Java на клиенте :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
574
А я думал, ты сейчас скажешь, что в сессии клиента это решение не очень, потому что скоро откажутся от Java на клиенте :)
я близко к тому сказал ;)
мало того - я тяну всё, кроме нотусячих сучностей в томкат, удолбался с нотуснёвой жвм - то цомпилится, то - нет, то либы теряет, то класспаз не отрабатывает (в плагах, например ОпенНТФ)... столько времени погублено, а дизигнер - глюкало ужос

и я с ужасом думаю... отказ от ЛС2Ж - это кромешный ппц
нотусёвые темпы из САПи не робят в линухах - пустая строка, кастыль надо, а джава - легко (варианты темпов)
обработка архивов - ваще без джава никуда
регэкспы - опять в ЛС ж..па

б..ть - вот чем индусы заняты!? ведь насущные тривиальные вещи, а вот нет и фсё
совершенно нет желания очередной велик пилить на ЛС
ужоуж открылибы ВМ и цомпилятор, мб добрые люди ништяков понапили бы
 
Последнее редактирование:

VladSh

начинающий
Lotus Team
11.12.2009
1 749
145
ужоуж открылибы ВМ и цомпилятор, мб добрые люди ништяков понапили бы
Модель доступа к коду и, возможно, к продукту пришлось бы менять. Для них лучше - больше точек, откуда можно брать денег, пусть даже продукт и глюкало, и с явными ошибками. Я ж предлагал когда-то, чтобы выложили основные шаблоны (почтовый и т.д.) на гитхаб, в них же куча ошибок, но не тут то было.
Опять свалились в оффтоп))
 
Мы в соцсетях: