Jar, агент, ls2j, deployment

Z
#1
Суть есть готовое ява - приложение как запустить его агентом на клиенте
От текущего пользователя (клиента)?

Может это уже обсуждалось, но я не нашел...
гугл выдал сделать агента типа "Импортированный ява код"
Не получилось...
"Обработка всех документов в базе данных; всего: 21
Найдено документов, отвечающих критериям поиска: 21
ОШИБКА: JVM: сбой при попытке загрузить вложения Java-агента.
Выполнение класса Java-агента"

Что не так или моет я вообще не то использую?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#2
на форуме масса коментов по теме...
jar класть в jvm/lib/ext
 
Z
#3
хм... добавил jar jvm/lib/ext
В дизайнере появились мои классы...
Компилиться но ругается что не может нати... хм.. а в какой jvm он ищет?

При первом выполнении получил:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Error loading Agent Class: JavaAgent</div></div><div class="sp-body"><div class="sp-content">java.lang.ClassNotFoundException: JavaAgent
at lotus.domino.AgentLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
at lotus.domino.AgentLoader.runAgent(Unknown Source)положил копию в C:\Program Files\Java\jre6\lib\ext
получил уже:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Exception in thread "AgentThread: JavaAgent" java.lang.ExceptionInInitializerError</div></div><div class="sp-body"><div class="sp-content"> at java.lang.J9VMInternals.initialize(J9VMInternals.java:222)
at com.trolltech.qt.QtJambiObject.<clinit>(QtJambiObject.java:58)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at JavaAgent.NotesMain(JavaAgent.java:12)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.security.AccessControlException: Access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.ja
va:1440)
at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.jav
a:1302)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1516)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1455)
at java.lang.Runtime.addShutdownHook(Runtime.java:203)
at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(QtJambi_LibraryInitializer.java:63)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
... 9 moreубрал из jre6 уже другая ошибка:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Exception in thread "AgentThread: JavaAgent" java.lang.NoClassDefFoundError: lb2 (initialization failure)</div></div><div class="sp-body"><div class="sp-content"> at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at JavaAgent.NotesMain(JavaAgent.java:12)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
что за ошибки? Почему видит в компиляторе и не видит призапуске? И какую jvm он использует?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#4
вы читаете и не понимаете ;)
а моглиб в гугле набрать ошибку
в свинговом классе надо менять EXIT_ON_CLOSE на DISPOSE_ON_CLOSE
клиента Нотес надо перезапускать для того чтобы jvm подхватила jar
какая jvm пользуется у вас и как вы чего вызываете - понятия не имею
кода нет, описания процесса нет, но вопросы есть :)
я не буду в загадки играть...
описывайте версии клиента, jar файла, кусок кода и как вы его вызываете, jar не нужно класть в дизайн и цеплять к агенту (очень не желательно)
ощущения - у вас путаница с classpath
 
Z
#5
Клиент версия 8.5
jvm jar- 1.6

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">кусок jar`a</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public static void main(String[] args) { //маин jar
QApplication.initialize(args);
lb2 testlb2 = new lb2();
testlb2.show();
QApplication.exec();
}[/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 lotus.domino.*;
import java.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();

// (Your code goes here)
lb2 l=new lb2();

}
catch(Exception e) {e.printStackTrace();}
}
}[/CODE]
по поводу :EXIT_ON_CLOSE на DISPOSE_ON_CLOSE
наверно это в моем случае QApplication.exec(); ?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#6
класс lb2 у вас задает способ создания и убиения окна, у него д.б. переопределено событие выхода как я указал (но я указывал для свинговых контролов)
на ошибку указывают строки:
Caused by: java.security.AccessControlException: Access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessController.checkPermission(AccessController.java:108)
в Нотусах "запрещено" закрывать приложение из java

что задавать в тролтековских джава портах - я не знаю (смотрите АПИ)
на вскидку:
static void setQuitOnLastWindowClosed(boolean quit)
вот её в фалс
но вы не указали что за объект типа lb2
 
Z
#7
lb2 это:
public class lb2 extends QWidget {....

Спасибо буду гуглить
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#8
Z
#9
переписал
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">jar</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public static void main(String[] args) {
QApplication.initialize(args);
lb2 testlb2 = new lb2();
testlb2.show();
//QApplication.exec();
QApplication.setQuitOnLastWindowClosed(false);
}

public lb2() {
ui.setupUi(this);
run();
ui.textEdit.toPlainText();
}[/CODE]положил его в ext
перезапустил нотес и дизайнер

выполняю:
<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">
Код:
import java.*;
import lotus.domino.*;

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

lb2 lb= new lb2();
lb.show();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
в консоли все тоже:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Exception in thread "AgentThread: JavaAgent" java.lang.ExceptionInInitializerError</div></div><div class="sp-body"><div class="sp-content"> at java.lang.J9VMInternals.initialize(J9VMInternals.java:222)
at com.trolltech.qt.QtJambiObject.<clinit>(QtJambiObject.java:58)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at JavaAgent.NotesMain(JavaAgent.java:10)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.security.AccessControlException: Access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.ja
va:1440)
at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.jav
a:1302)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1516)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1455)
at java.lang.Runtime.addShutdownHook(Runtime.java:203)
at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(QtJambi_LibraryInitializer.java:63)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
... 9 more
причем если в агенте сделать псевдо изменение (пробел сохранить) и запустить второй раз выдает уже:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Exception in thread "AgentThread: JavaAgent" java.lang.NoClassDefFoundError: lb2 (initialization failure)</div></div><div class="sp-body"><div class="sp-content"> at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at JavaAgent.NotesMain(JavaAgent.java:10)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)и так до перезапуска дизайнера....
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#10
а почему show до установки завершения?
и воще до создания объекта

и еще не ясно - как устанавливали инвиронмент:
http://qt.nokia.com/doc/qtjambi-4.4/html/c...stallation.html
надо в ручную (я так полагаю) и нативные jar д.б. рядом с универсальными переменные путей д.б. настроены
 
Z
#11
lb2 testlb2 = new lb2();
testlb2.show();
где "до создания объекта"?

"а почему show до установки завершения?" надо так:
<!--shcode--><pre><code class='java'>QApplication.initialize(args);
lb2 testlb2 = new lb2();
//QApplication.exec();
QApplication.setQuitOnLastWindowClosed(false);
testlb2.show();[/CODE]?

С путями вроде все нормально. classpath указывает на все библиотеки.
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#12
<!--shcode--><pre><code class='java'>QApplication.initialize(args);
QApplication.setQuitOnLastWindowClosed(false);
lb2 testlb2 = new lb2();
testlb2.show();[/CODE]
хук на завершение может ставиться во время создания первого виджета, либо при его отображении, потому быбле надо сказать - не делать это
 
Z
#13
исправил не помогло.. пермисион денидед бла бла бла:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Exception in thread "AgentThread: JavaAgent" java.lang.ExceptionInInitializerError</div></div><div class="sp-body"><div class="sp-content"> at java.lang.J9VMInternals.initialize(J9VMInternals.java:222)
at com.trolltech.qt.QtJambiObject.<clinit>(QtJambiObject.java:60)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at JavaAgent.NotesMain(JavaAgent.java:10)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.security.AccessControlException: Access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.ja
va:1440)
at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.jav
a:1302)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1516)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1455)
at java.lang.Runtime.addShutdownHook(Runtime.java:203)
at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(QtJambi_LibraryInitializer.java:65)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
... 9 more
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#14
есть неск. точек для раскопок, открваем исходники (или реверсим) и смотрим:
com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(QtJambi_LibraryInitializer.java:65)
com.trolltech.qt.QtJambiObject.<clinit>(QtJambiObject.java:60)

на этих стадиях и происходит вываливание
ищем попытки перехватить "выход из приложения", а затем способы предотвращения этих попыток
я не знаю, детально, пермишены JVM от ИБМ, возможно, установка разрешения на выход из Нотусей ,из JVM, реальна, но я не думаю, что это согласуется с логикой работы в Нотес
 
Z
#15
Хорошо поищем спасибо.

вопрос в сторону
при запуске агента и его компиляции
jvm используемая лотусом - та jvm которя в classpath на компутере прописана?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#16
домино использует свою jvm, а на что ссылается бинарная сборка от тролтека - вопрос
потому я и грил о ручной установке (а не через инсталятор)
 
Z
#17
не понял ответа =) в домино дизайнер прописана своя родная.
а тролтековские либы лежат пряма в jar. (не правильно, зато в какойто степени переносимо)
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#18
не понял ответа =) в домино дизайнер прописана своя родная.
а тролтековские либы лежат пряма в jar. (не правильно, зато в какойто степени переносимо)
там "," д.б. (исправил)
тролтек привязывается к jvm при установкке скриптом - НЕ НАДО так делать
про jar я ничего не оговаривал
 
Z
#19
не надо с собой в jar апликуху тролтековские библиотеки цеплять?
есть неск. точек для раскопок...
к сожалению исходников похоже нет... все это упаковано в dll
моно токо наблюдать исполнение в дебагере со строчкой "Sourse not found"

кстате после
<!--shcode--><pre><code class='java'>QApplication.initialize(args);
QApplication.setQuitOnLastWindowClosed(false);
lb2 testlb2 = new lb2();
testlb2.show();[/CODE]приложение стало само закрываться так и должно быть?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#20
как устанавливали библы, скриптом или сами копировали ТОЛЬКО в Нотус каталог?

про какое приложение идет речь - отдельное (кот. не из агента)?
яж не вижу вашего компа и понятие не имею, что там происходит :)

исходники можете скачать с офсайта: http://qt.nokia.com/downloads

вот строка из исходников - кот. виновата (она как-раз 65)
Runtime.getRuntime().addShutdownHook(new Thread(new QtJambi_LibraryShutdown()));
и это статическая инициализация...
возможно дописать кусок, кот. по ключу не будет этого делать, скомпилить класс, засунутть его в jar (вместо оригинального)