Jar, агент

Z

zum

скриптом не поставились. скопировал в ext в текущую jvm оси
и еже дублируются в самом jar- в моей проге которую пытаюсь запихать в лотус, этот jar кинул в ext лотусовой jvm
приложени у мене одно java апликуха.
Я вней поменял на вышеуказанный код, затем обратно ее в ext лотуса поместил
дак если я ее пробую запускать java -jar 1.jar ну или из eclips`а, она мигает и закрывается сразу.
вот строка из исходников - кот. виновата (она как-раз 65)
Runtime.getRuntime().addShutdownHook(new Thread(new QtJambi_LibraryShutdown()));
и это статическая инициализация...
возможно дописать кусок, кот. по ключу не будет этого делать, скомпилить класс, засунутть его в jar (вместо оригинального)
ага нашел...
А если просто закоментить? =)

скомпилил заменил везде...
1- в винде програмка как сама закрывалась сразу так и закрываеться... (т.е "апликухи эти, в ОС, перестанут закрываться" этого не наблюдаеться). Наверно чтото не так... что-то есть еще...

2-в лотусе... мм... после замены он попытался выполнить и завис....
поменял обратно библиотеку на оригинальную
перезапустил лотус
не помогла теперь дизайнер упорно виснет... чистил cache.ndk,всякие temp`ы, перегружался результат тот же...
ну не переустанавливать же Notes!
Как быть?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
коментить не рекомендовал бы
апликухи эти, в ОС, перестанут закрываться (либо это jar - тока для Нотус сделать)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
способ компиляции
javac -cp ./:./qtjambi-4.5.2_01.jar QtJambi_LibraryInitializer.java
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
если приложение никак не запустить - случаи конфликта бинарных либ, нотуса и тех, на кот. ссылается стронний jar - тогда есть возможность задействовать IIOP, либо др. методы межпроцессной коммуникации
др. словами - пущаем приложение и общаемся с ним доступными методами (да хоть RMI)

случаи подобных конфликтов возможны, особ. учитывая "криворукую" реализацию UI в 8-ках
я сталкивался с замораживанием 8.5.x Нотусов, при запуске swt кода
решать подобные кривости (тратить время, на ИБМ "быдлокодерские" заморочки) нет желания
увы - кривые реализации (как и "плохие" кодеры) есть везде...

продукт такого уровня как Нотес "обязан" быть более-менее вылизанным, но, видать, у ИБМ не хватило времени/желания/денег съэкономили :)
 
Z

zum

Лана большое спасибо. Пределываю на сниговые библиотеки.
 
Z

zum

Все переделал)!
Запустил все работает параметры передаються все оке.
Токо вот как результат вернуть, еще не придумал...
Не посдкажете как это у вас было реализованно?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
не понял - какой результат и куда вернуть
 
Z

zum

из программы в документ) Туплю.
Просто агент запускал приложение и все. Те запуск агента, затем запуск приложения, затем агент все отработал, а приложение висит...
Вот. Думаю если допилить прямо в приложение лотусовые getsession и прочии фишки, то проблем не будет... можно будет прям из проги в документ писать, даже не смотря на то, что агент тработал. Да?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
если приложение и агент никак не связыны (запускается внешняя jvm) - то обмен по указанной выше методе (RMI и т.п.)
если прижением называются java окна, открытые из агента, нет проблем - передаём UNID нужного дока (как текст)
всякие сессии и прочая - как в хэлпе createSession() без параметров

отработал агент или нет - на существование свинговых объектов это не влияет
 
Z

zum

в приложении создал класс agent для работы с лотусом такого содержания
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public class agent extends AgentBase {
Database db;
Session s;
AgentContext agentContext;
DocumentCollection dc;
Document doc;
public void Con() {
try {
s = getSession();
agentContext = s.getAgentContext();
db = agentContext.getCurrentDatabase();
dc = agentContext.getUnprocessedDocuments();
doc = dc.getFirstDocument();
System.out.print("ID:" + doc.getUniversalID());
}
catch (Exception e) {
e.printStackTrace();
}
}
}[/CODE]
в лотусе вызываю так:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import LIS.*; //мое приложение
import lotus.domino.*;

public class JavaAgent extends AgentBase{
public void Main() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();

// (Код)
agent t=new agent();
t.Con();
// (Код)
}
catch(Exception e) {
e.printStackTrace();
}
}
}[/CODE]
Получаю
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java.lang.NullPointerException</div></div><div class="sp-body"><div class="sp-content"> at LIS.agent.Con(agent.java:23)
at JavaAgent.NotesMain(JavaAgent.java:13)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)то есть возвращает нулевую сессию, почему?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
вы чёй-то намудрили :)
два класса от агентбэйз - это слишком
и агент исполняет NotesMain, а не main (и не Main)
и в нем - плевать какой класс напишете (или от какого наследуете), он должен реализовать NoteMain, в кот. ваш код
а AgentBase реализует доступ к нотусёвым объектам (сессии, тек. документу, вводу/выводу доминошному)
внимательней смотрите примеры в хэлпах
 
Z

zum

Сам спросил сам отвечу.... почему сессия не создаеться не знаю... наверно 2 нельзя)
Но проблема решаеться если передать сессию моему агенту как параметр
вы чёй-то намудрили
Ага апечатка. Без NoteMain он тупо не работает вообще...
а 2 класса мне так удобней...
создал свой класс наследующий AgentBase
и методы которые мне нужны, и юзаю прямо из програмыы их.
Т.е запускаю программу передаю ей сессию и все... там уже все само делается
весь код лотусового агента сведеться к
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">такому</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Lz agg = new Lz();
agg.myrun(session);
agg.setVisible(true);

}
catch (Exception e) {
e.printStackTrace();
}
}[/CODE]
Кстати, как узнать текущий открытый документ?
что-то вроде лотусового
Код:
dim ws As New NotesUIWorkspace 
dim docui as NotesUIdocument 
dim item as notesitem 
set docui = ws.currentDocument
 
N

nvyush

<!--shcode--><pre><code class='java'>Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document doc = agentContext.getDocumentContext();[/CODE]
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
я говорю о том, что два класса наследуют AgentBase - это странно (и не нужно)
и сам AgentBase нужен для опред. целей (а не вообще - типа хеловорлд)
текущий док можно получить тока в контексте...
либо через UNID
а с нотусёвым UI - java воще не работает
из UI можно рулить тока бриджом LS2J
 
Z

zum

UNID так юнид... бум думать

еще трабл..
У меня на формев приложении есть кнопка выход.
На нее соответсвенно поввешен. System.exit;
Ну и соответсвенно имеем ошибку на это событие... Наверно это все из той же серии "DISPOSE_ON_CLOSE"
А на крестик все норм закрываеть.
Чем можно заменить? Что можно сделать?
 
N

nvyush

У меня на формев приложении есть кнопка выход.
На нее соответсвенно поввешен. System.exit;
Ну и соответсвенно имеем ошибку на это событие... Наверно это все из той же серии "DISPOSE_ON_CLOSE"
А на крестик все норм закрываеть.
Чем можно заменить? Что можно сделать?
м.б. this.dispose(); ?
 
Z

zum

да точны спасибо!
Все работает! =)
lmike спасибо без вас бы не разобрался никогда)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 981
611
BIT
439
тока старайтесь не передавать объекты Нотуса из агента в свинговый класс, а то (вероятно) убиение агентской нити (нотуса "чистят" эту нить), может обнулить эти объекты до их использования или входе (я не уверен за тредсэйв, в нотусёвых классах)
 
N

nvyush

тока старайтесь не передавать объекты Нотуса из агента в свинговый класс, а то (вероятно) убиение агентской нити (нотуса "чистят" эту нить), может обнулить эти объекты до их использования или входе (я не уверен за тредсэйв, в нотусёвых классах)

Похоже, наступил на эти грабли. Создаю свинговую форму, в конструкторе передаю ей нотусовую сессию как аргумент, сохраняю в свойстве свинговой формы, далее получаю текущий док, парсю нужное поле в JTable - всё ОК. Когда пытаюсь сохранить изменения - собираю данные таблицы в строку и пытаюсь сохранить в поле дока - получаю в консоль:

NotesException: Object has been removed or recycled
at lotus.domino.local.Session.getAgentContext(Unknown Source)

Что не так?
 
Мы в соцсетях:

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