Доступ Java-программы к данным в Lotus текущего пользователя

  • Автор темы ses
  • Дата начала
S
#1
Есть Такая задача: Есть на клиенте Lotus Notes clent он конектикся к серверу...
На клиенте же запускается мое Java приложение
Как получить данные из текущей сессии Lotus Notes из моей проги?
Например как узнать какой текущий документ этой сесси?
какими средставами это можно сделать?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#2
никак (мне не известны методы такой инъекции), похтелка похожа на вирусный код :blink:
это как инъекция в код рабочего приложения
в общем случае это (похтелка) к java не относится вообще

лучеб задачу рассказали, чем своё видение

ежели хотите знать какой док - дергайте свою джаваапликуху (RMI, CORBA, файл), а абстрактно "получать данные" - без предметный разговор
 
S
#3
Просто есть приложение на делфи, я переношу его на java. Только познания в jave нулевые.
А приложения работало следующим образом: при помощи OLE обьекта брался указатель на текщую сессию.
И от туда извлекалсись Имя, Теулущеуу Рабочее пространство, Текущий документ, Текущая БД
 
K

K-Fire

#4
Доступ к Lotus-объектам из OLE и из Java одинаковый с точки зрения объектной модели. Поэтому берите дельфийский код и переносите 1 в 1 в яву.
 
S
#5
Да но тогда вся кросплатформенность исчезает! или я не прав?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#6
давайте вернемся к задаче...
вот есть клиент Нотуса, в нем открыл юзер документ, потом этот же юзер открывает приложение (строннее), и хочет в нём получить этот док?
Если так - непонятно зачем, если не так - то описание проблемы неточное...
просто получить в джава приложении сессию и открыть базу - нет проблем...
просто из нотусов вызвать джава код (в агенте) и получить нужные данные (в т.ч. тек. док) - тоже не проблема
 
S
#7
Приложение запускается на клиенте с сервера.
В делфи используется указатель на текущую сессию потому новая не создается... Соответсвенно в приложении доступна база.
Без ole обьектов в java приложении я так сделать я понял не смогу.... Тоесть полюбому придется создавать новую сессию?
А значит спрашивать имя пароль?
Да не ответил зачем.
Приложение запущенное на клиенте является связуещим звеном между Лотусовской бозой и sql ной
Берет данные из Лотуса и поним изменяет определенные на sql ном.
 
K

K-Fire

#8
Хех, задача в старом виде решена наихудшим методом из всех возможных :rolleyes:

По правильному задача должна решаться так (варианты):
1) Использовать LEI или DECS
2) Использовать java/LotusScript агент, который на сервере обрабатывает изменившиеся документы и апдейтит SQL базу

Оба этих решения в разы проще чем писать отдельную программу синхронизации для клиентов.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#9
я опять не пойму...
почему не запустить клиента Нотус, ведь он всё-равно установлен?
И там сделать java агента, кот. выполнит поставленную задачу
Второй вариант - запускать агента на сервере
Третий - писать соединение по IIOP - тогда воще не нужен Нотус клиент на воркстанции
 
S
#10
Нотус клиент решает свои задачи...
Он запущен. Если в нем открывается определенный документ вызывается мое приложение.
От куда есть доступ сразу к 2м базам! Причем это не просто агент который должен апдейтить базу... Сложная полноценная програмина.
Счас переношу на java и ипользую diiop. Проблема в следущем! Программа должна быть полностью автоматизированна... Но как можно все это сделать не используя новую сессию? или так чтобы не приходилось спрашивать пароль юзера.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#11
если агент на сервере или на клиенте - пароль не будут спрашивать
если diiop - тоже (пароль передаётся в сессии)
агент ничем не отличется от программы (тотже код)
Ещё раз - нет смысла в написании внешней программы

уже не раз, здесь, говорил о возможности положить jar в jvm/lib/ext и работать с перманентными объектами

для iiop по шифрованному каналу - надо в путя (класспаз) положить TrustedCerts.class (взять с сервера, он генерится при запуске diiop)

код
<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'>/**
*
*/
package org.ldn.authority;

import lotus.domino.NotesFactory;
import lotus.domino.Session;

/**
* @author mike
*
*/
public class IIOPSession implements Runnable {

/**
*
*/
String host = null, user = "", pwd = "";

public IIOPSession(String argv[]) {
// TODO Автоматически созданная заглушка конструктора
host = argv[0];
if (argv.length >= 2)
user = argv[1];
if (argv.length >= 3)
pwd = argv[2];
}

/**
* @param argv
*/
public static void main(String[] argv) {
// TODO Автоматически созданная заглушка метода
if (argv.length < 1) {
System.out.println("Need to supply Domino server name");
return;
}
//Class.forName("TrustedCerts");
IIOPSession t = new IIOPSession(argv);
Thread nt = new Thread((Runnable) t);
nt.start();
}

public void run() {
// TODO Автоматически созданная заглушка метода
try {
//String args[] = new String[3];
//args[1] = "-ORBDebug";
//args[2] = "-ORBCommTrace";
String args[] = new String[1];
args[0] = "-ORBEnableSSLSecurity";
Session s = NotesFactory.createSession(host, args, user, pwd);
//Session s = NotesFactory.createSession(host, user, pwd);

String p = s.getPlatform();
System.out.println("Platform = " + p);
} catch (Exception e) {
e.printStackTrace();
}
}

}[/CODE]
 
S
#12
хм.... при diiop пароль передается в сесси? тоесть пароль придется вшить в код?
а если приложение будет запускаться на разных компьютерах с разными учетками?
Как передавать пароль?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#13
вы издеваетесь :)?
-если надо чтобы исполнялось с правами клиента - делайте код из-под клиента (а не отдельное приложение)
-есть сервисы хранения паролей (кейчейны всякие)
 
S
#14
не издеваюсь =) я просто не знаю первый раз сталкиваюсь
скорее всего буду тогды агента делать. спасибо убедили)
кейчейкины? хм... а по подробней?