Альтернатива Createobject()

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

garrick

Lotus Team
26.10.2009
1 367
152
BIT
346
Если у вас в %NOTES_DIR%/ndext есть файл swt.jar, то почему бы ему не работать? Если нет, можно использовать свой, только версию надо правильную подобрать.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
Если у вас в %NOTES_DIR%/ndext есть файл swt.jar, то почему бы ему не работать? Если нет, можно использовать свой, только версию надо правильную подобрать.
давно это было (линух + 8.х версия) - совал в jvm/lib/ext - запуск из нотусятины проходил, но фризался интерфейс, требовалось менять пермишены ну там по-мелочи что-то (возможно крэшилась нотусятина :lovecodeby: )
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
346
В 8-й версии, даже в Basic swt.jar правильной версии уже есть - лежит в каталоге ndext и в run-time оно доступно, но в дизайнере при компиляции агента будет ругаться, надо принудительно указать через настройки проекта Eclipse.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
346
У меня в 8.5 много чего на SWT работает - проблем нет. Правда всё под Windows. У биг-боссов есть и маки, но и они не жаловались. Хотя, скорее всего, они кроме почты ничем и не пользуются.
 
A

alik86

"Как много нам открытий чудных..."
Да, агент от garrick'а отработал. Но тот же код из Java библиотеки, запущенный при помощи LS2J работать отказывается.
Что я делаю:
1. Создаю агент, кладу в него все нужные jar'ы, пишу:
Код:
import lotus.domino.*;
import org.odftoolkit.simple.TextDocument;

public class JavaAgent extends AgentBase {
public void NotesMain() {
try {	 
TextDocument outputOdt;
outputOdt = TextDocument.newTextDocument();
outputOdt.addParagraph("Hello World, Hello Simple ODF!");
outputOdt.save("c:\\tmp\\javaagent.odt");		 
} catch(Exception e) {
e.printStackTrace();
}
}
}
Вызываю:
@Command([ToolsRunMacro]; "agentname")
Итог: файл c:\tmp\javaagent.odt создан.
2. Создаю Java библиотеку, кладу в нее все нужные jar'ы, пишу:
Код:
import org.odftoolkit.simple.TextDocument;

public class LikeAgent {
public void NotesMain() {
try {		 
TextDocument outputOdt;
outputOdt = TextDocument.newTextDocument();
outputOdt.addParagraph("Hello World, Hello Simple ODF!");
outputOdt.save("c:\\tmp\\likeagent.odt");			 
} catch(Exception e) {
e.printStackTrace();
}
}
}
Вызываю:
Set jSession = New JavaSession()
Set jClass = jSession.GetClass("LikeAgent")
Set jObject = jClass.CreateObject()
Call jObject.NotesMain()

Итог: ругань, файл не создан.

P.S. Хотелось бы jar'ы хранить именно в ntf, а не на сервере и уж тем более не по пользователям их раскидывать.

P.P.S. Читал я, lmike, Ваше сообщение под номером 20 про "давайте все по-порядку...", читал, но так ничего и не понял. Может быть ответ кроется в нем? :lovecodeby:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
P.S. Хотелось бы jar'ы хранить именно в ntf, а не на сервере и уж тем более не по пользователям их раскидывать.
скорее всего все либы, кот. используют статические ф-ци без вызова (до вызова) конструктора, или использующие паттрн синглтон - работать, через бридж, при размещении либ в nsf не будут
также не будут работать вызовы из бриджа, если нет ссылки на либу java (в рамках БД) в кот. и лежат доп. либы - а вот это вполне логично
др. словами - бриджу доступны "системные" либы (т.е. те - кот. нотусевая жвм видит при старте), а вот либы из БД - в случае подключения нотусевой java либы (через Use)
в любом случае - задействование либ из nsf, в бридже - риск утечек и и всяких неприятностей, на сервере не рекомендую
для этого есть и писать надо на java :lovecodeby:
 
A

alik86

Итак, с вашего позволения, продолжим.
Взяв на вооружение Apache ODF Toolkit и java-агенты худо-бедно научился формировать ODF-файлы из лотуса (формировать, наполнять, сохранять на диск, атачить к notes-документам...).
Далее захотелось мне таки показывать сформированный файл пользователю, открывая его приложением, которое с этим типом файлов ассоциировано в ОС.
Вооружился я java.awt.Desktop и в бой! И оно заработало... под Windows (файл одинаково хорошо открылся и Calc'ом, и Excel'ем). А вот попробовал это дело под Linux и был отруган.

Выдержка из кода:
Код:
import java.awt.Desktop;

File file = new File(filepath);
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
Ругань:
Missing resource appletsecurityexception.Create top-level window
COM.ibm.JEmpower.applet.AppletSecurityException: ??
Missing resource appletsecurityexception.Create top-level window
COM.ibm.JEmpower.applet.AppletSecurityException: ??
at COM.ibm.JEmpower.applet.AppletSecurity.checkAWTPermission(AppletSecurity.java:11
84)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1605)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
at java.awt.Desktop.checkAWTPermission(Desktop.java:232)
at java.awt.Desktop.open(Desktop.java:260)
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)


Ругается на desktop.open(file). (отмечу что и filepath верен, и file по нему имеется в обоих случаях)

А как вы решали (бы) подобную задачу?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
java.awt.Desktop.open
в пермишенах разрешить
jvm/lib/security/java.policy
для агентов лечится так
хотя это грубо ;)

Добавлено: вольный перевод - идиоты в ИБМ (возможно индусского происхождения) не умеют писать под линух, отсюда - блочат все что не понимают и не асилили :)
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
346
Через SWT, как в моём примере, не пробовали? Тоже не работает?
 
A

alik86

garrick, swt, как в Вашем примере, под Windows отработал, а вот под Linux где-то в районе начала открытия окна "Save..." оно подвисало безо всяких ошибок и висело, висело, висело...
Да еще и какие-то дополнительные телодвижения нужны, чтобы подключить его к проекту. Я временно разбираться не стал.
P.S. А как, кстати, правильно подключить swt из \notes\ndext к проекту? Где что прописывать?
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
346
P.S. А как, кстати, правильно подключить swt из \notes\ndext к проекту? Где что прописывать?
На машине с Дизайнером просто скопируйте его в jvm/lib/ext, а у пользователей и так само заработает. Либо в свойствах Java проекта можно "подцепить" внешний jar файл, как в обычном Eclipse (не в аттачменах агента или библиотеки, а именно Java проекта), т.е. реально jar файл к агенту или библиотеки не прикрепляется, а, только используется при компиляции. Но Domino Designer не запоминает этих настроек и при каждом новом открытии такого агента или библиотеки в дизайнере действия по прикреплению внешнего jar надо повторять.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
447
оно подвисало безо всяких ошибок и висело, висело, висело...
ну стало-быть с тех пор как я пробовал - ничего не поменялось ;)
 
Мы в соцсетях:

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