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

Тема в разделе "Lotus + Java + LS2J", создана пользователем ses, 8 авг 2009.

  1. ses

    ses Гость

    Репутация:
    0
    Есть Такая задача: Есть на клиенте Lotus Notes clent он конектикся к серверу...
    На клиенте же запускается мое Java приложение
    Как получить данные из текущей сессии Lotus Notes из моей проги?
    Например как узнать какой текущий документ этой сесси?
    какими средставами это можно сделать?
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
    никак (мне не известны методы такой инъекции), похтелка похожа на вирусный код :blink:
    это как инъекция в код рабочего приложения
    в общем случае это (похтелка) к java не относится вообще

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

    ежели хотите знать какой док - дергайте свою джаваапликуху (RMI, CORBA, файл), а абстрактно "получать данные" - без предметный разговор
     
  3. ses

    ses Гость

    Репутация:
    0
    Просто есть приложение на делфи, я переношу его на java. Только познания в jave нулевые.
    А приложения работало следующим образом: при помощи OLE обьекта брался указатель на текщую сессию.
    И от туда извлекалсись Имя, Теулущеуу Рабочее пространство, Текущий документ, Текущая БД
     
  4. K-Fire

    K-Fire Гость

    Репутация:
    0
    Доступ к Lotus-объектам из OLE и из Java одинаковый с точки зрения объектной модели. Поэтому берите дельфийский код и переносите 1 в 1 в яву.
     
  5. ses

    ses Гость

    Репутация:
    0
    Да но тогда вся кросплатформенность исчезает! или я не прав?
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
    давайте вернемся к задаче...
    вот есть клиент Нотуса, в нем открыл юзер документ, потом этот же юзер открывает приложение (строннее), и хочет в нём получить этот док?
    Если так - непонятно зачем, если не так - то описание проблемы неточное...
    просто получить в джава приложении сессию и открыть базу - нет проблем...
    просто из нотусов вызвать джава код (в агенте) и получить нужные данные (в т.ч. тек. док) - тоже не проблема
     
  7. ses

    ses Гость

    Репутация:
    0
    Приложение запускается на клиенте с сервера.
    В делфи используется указатель на текущую сессию потому новая не создается... Соответсвенно в приложении доступна база.
    Без ole обьектов в java приложении я так сделать я понял не смогу.... Тоесть полюбому придется создавать новую сессию?
    А значит спрашивать имя пароль?
    Да не ответил зачем.
    Приложение запущенное на клиенте является связуещим звеном между Лотусовской бозой и sql ной
    Берет данные из Лотуса и поним изменяет определенные на sql ном.
     
  8. K-Fire

    K-Fire Гость

    Репутация:
    0
    Хех, задача в старом виде решена наихудшим методом из всех возможных :rolleyes:

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
    я опять не пойму...
    почему не запустить клиента Нотус, ведь он всё-равно установлен?
    И там сделать java агента, кот. выполнит поставленную задачу
    Второй вариант - запускать агента на сервере
    Третий - писать соединение по IIOP - тогда воще не нужен Нотус клиент на воркстанции
     
  10. ses

    ses Гость

    Репутация:
    0
    Нотус клиент решает свои задачи...
    Он запущен. Если в нем открывается определенный документ вызывается мое приложение.
    От куда есть доступ сразу к 2м базам! Причем это не просто агент который должен апдейтить базу... Сложная полноценная програмина.
    Счас переношу на java и ипользую diiop. Проблема в следущем! Программа должна быть полностью автоматизированна... Но как можно все это сделать не используя новую сессию? или так чтобы не приходилось спрашивать пароль юзера.
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
    если агент на сервере или на клиенте - пароль не будут спрашивать
    если 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]
     
  12. ses

    ses Гость

    Репутация:
    0
    хм.... при diiop пароль передается в сесси? тоесть пароль придется вшить в код?
    а если приложение будет запускаться на разных компьютерах с разными учетками?
    Как передавать пароль?
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
    вы издеваетесь :)?
    -если надо чтобы исполнялось с правами клиента - делайте код из-под клиента (а не отдельное приложение)
    -есть сервисы хранения паролей (кейчейны всякие)
     
  14. ses

    ses Гость

    Репутация:
    0
    не издеваюсь =) я просто не знаю первый раз сталкиваюсь
    скорее всего буду тогды агента делать. спасибо убедили)
    кейчейкины? хм... а по подробней?
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.330
    Симпатии:
    329
  16. VladSh

    VladSh начинающий
    Lotus team

    Репутация:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
Загрузка...

Поделиться этой страницей