Lotus и Jabber

Тема в разделе "Lotus + Java + LS2J", создана пользователем motogarri, 5 дек 2011.

  1. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Привет. Может сталкивался кто... Есть ли библиотеки для работы с XMPP, которые можно было бы заюзать в лотусскрипте? Нашел одно jabberCom, но что-то не заработала у меня. Кто-нибудь использовал?
    Или может есть проще способы программной отправки сообщений на жабер из виндовса?
     
  2. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    я уж и не знаю - что делать, чтобы достучаться до сознания виндолюбов!? :D
    может хватит уже мыслить категориями одной системы и начать пользоваться поиском и разумом? ;)

    ну чиста абстрактна - что можно сделать, чтобы найти уже реализованное и описание к нему:
    -войти гугл и набрать желаемое (желательно не забыть, что это д.б. либа)
    -войти на тематический цайт (ведь мы помним - как назвается протокол...)

    после недолгого раздумья и анализа существующих ср-в интеграции и удобства (простоты) использования - выбрать либу...
    выполняем https://www.google.com/search?&q=xmpp+client+libraries
    получаем сцылко http://xmpp.org/xmpp-software/libraries/
    удивляемся но недолго..., наличие java в платформе LDN наталкивает на мысль..., не ну - если на сях и виндовз-онли, шобы потомки плевались - можно извращаться, или прикручивать КОМу на кажном клиенте - тоже есть любители нетрадиционного секаса (причём - с неодушевлённой виндой)

    Для вторичного анализа либ надо задуматься об их "свежести" - ну типа пройтись по цайтам (сцылкам, как это и рекомендовано - черным по англицки)
    ну например вот попалась http://www.igniterealtime.org/projects/smack/
    там всё с шахматами и поэтессами... и ужос как сложное подключение http://www.igniterealtime.org/builds/smack...onnections.html
     
  3. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Был в гугле)) Два дня потратил на изучение и попытки прикрутить jabberCom.dll. Плюнул. За ссылки спасибо, буду копаться, потом отпишу, что и как, если кому еще пригодиться.

    Пока некуда деватсо))
     
  4. Caspiy

    Caspiy Гость

    Тема интересная, тоже собирался заморочиться в скорости!!
    Вопрос пару месяцев назад штудировал, из бесплатных ИМХО самоя норм библиотека - это как и писал lmike - Java'вский SMACK.
    Но учитывая качество их клиента (Spark), кажется, что продукт ОЧЕНЬ сырой.
    Зато есть и радостные обстоятельства - этот же разработчик выпускает один из самых популярных Jabber серверов - Open Fire
     
  5. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Более-менее разобрался с smack. Подходит для моих целей (отправка сообщений), нормально работает. Делал так:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Java-библиотека</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import javax.swing.JFrame;
    import org.jivesoftware.smack.*;
    import org.jivesoftware.smack.packet.Message;

    public class MessageTo {

    public void NotesMain(String sendTo, String bodyOfMessage) {

    Chat chat = null;
    String[]arrSendTo = sendTo.split("~");

    try {
    SASLAuthentication.supportSASLMechanism("PLAIN");

    ConnectionConfiguration config = new ConnectionConfiguration("192.168.0.1", 5222, "jabber.ru");
    XMPPConnection connection = new XMPPConnection(config);
    connection.connect();
    connection.login("name", "pass");

    Thread.currentThread();
    Thread.sleep(2000);

    for(int i = 0; i <= arrSendTo.length - 1; i++)
    {
    chat = connection.getChatManager().createChat(arrSendTo, new MessageListener() {
    public void processMessage(Chat chat, Message message) {
    System.out.println("Received message: " + message);
    }
    });

    chat.sendMessage(bodyOfMessage);
    }

    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }[/CODE]
    И использование из
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">агента на Lotusscript</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>Option Public
    Option Declare

    UseLSX "*javacon"
    Use "MessageTo"

    Sub Initialize()

    Dim javaSession As JavaSession
    Dim messageTo As JavaClass
    Dim messageObject As JavaObject

    Dim a As Variant
    Dim strNames() As string

    'Инициализация Java-класса
    Set javaSession = New JavaSession()
    Set messageTo = javaSession.GetClass("MessageTo")
    Set messageObject = messageTo.CreateObject

    'Передается строка с именами через разделитель для сплита в джава-коде
    strNames = "name1@jabber.ru" & "~" & "name2@jabber.ru"
    a = messageObject.NotesMain(arrNames, "Сообщение из лотусскрипта")

    End Sub[/CODE]
    Товарищи, совсем все плохо у меня с жавой, подскажите плиз, как в моем случае передать массив строк в жава-класс. И как сделать паузу между коннектом к серверу и отправкой сообщения? Без этого не работает. Я так понимаю, сообщение отправляется быстрее, чем происходит авторизация на сервере.
     
  6. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Сейчас, при попытке передать массив выскакивает ошибка "LS2J Error: Parameter mismatch calling java method. NotesMain". Когда передаю строку, то все нормально проходит.
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    См. в справке дизайнера JavaClass class -> CreateObject и GetMethod
    Например:
    JNI Signature Description Examples Constructor requires
    [<sigtype> Array of <sigtype> ([I)V An int array

    Также можно передать в агент NoteID служебного документа с необходимыми данными.

    Добавлено
    А не проще ли и агента написать на Java?
     
  8. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Очень много надо переписывать, а знаний по яве пока совсем мало. Библиотеку удобно использовать, нужно-то передать всего два параметра: список имен адресатов и текст сообщения.

    Из справки понял только то, что кроме (I)V An int array других массивов не передать. Так и есть или я не так понял?
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Переписать приведённого Вами LS агента на Java — 5 минут, причём половину кода сгенерит сам Lotus. Передать из LS в Java можно только массив простых типов. В принципе ничто не мешает Вам объединить элементы массива в одну строку через разделитель, а в Java разбить обратно.
     
  10. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Ну этот агент, что здесь это просто тест)) Вот блин засада с массивами.
    Угу, я что-то и не подумал про сплиты с джойнами. Попробую если ограничение по кол-ву символов не помешает.

    Добавлено:
    Да, понял, фигню сказал...
     
  11. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Все, теперь все работает. Сообщения уходят и на один адрес и на список адресов. Спасибо, что толкнули в нужную сторону, помогли разобраться, всем мешок пряников))

    п.с. Подредактировал примерчик в посте №5. Теперь пример рабочий, если кому надо.
     
  12. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Работает для восьмерки, а вот на 6.5.5 говорит:
    [​IMG]

    Там версия JVM 1.3. Это надо искать более старинную либу?
     
  13. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    А можно ли обновить версию JVM в клиенте или сервере не меняя версии лотуса? В 1.3 даже split не пашет.
     
  14. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Нашел смак постарше 1.5.0. Под шестерку работает, но там различаются некоторые классы и методы. Все даже проще чем в новой, но документации по ней ноль, так что пришлось поразбираться. Вот, если кому надо будет,
    <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 org.jivesoftware.smack.*;
    import org.jivesoftware.smack.packet.*;

    public class MessageTo {

    public void NotesMain(String sendTo, String bodyOfMessage) {

    Chat chat = null;

    try {

    XMPPConnection connection = new XMPPConnection("server");
    connection.login("name", "password", Long.toString(System.currentTimeMillis()));

    chat = connection.createChat(sendTo);
    chat.sendMessage(bodyOfMessage);

    Message message = chat.nextMessage(5000);

    System.out.println("Returned message: " + (message == null ? "<timed out>" : message.getBody()));

    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }[/CODE]
     
  15. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    массивы передаются, НО только "статические", LS->java, в обратную сторону нет такого ограничения
    статический - это с неизменяемыми границами (после объявления)
    теперь по массивам в LS - онж не с нуля существуют - передавайте элементы в java и там формируйте ArrayList, а обратно выводите http://docs.oracle.com/javase/1.5.0/docs/a.../ArrayList.html toArray (луча как String[]) я выкладывал примеры
     
  16. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Спасибо, попробую.
     
Загрузка...

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