Lotus и Jabber

motogarri

Well-Known Member
17.02.2010
200
4
#1
Привет. Может сталкивался кто... Есть ли библиотеки для работы с XMPP, которые можно было бы заюзать в лотусскрипте? Нашел одно jabberCom, но что-то не заработала у меня. Кто-нибудь использовал?
Или может есть проще способы программной отправки сообщений на жабер из виндовса?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#2
я уж и не знаю - что делать, чтобы достучаться до сознания виндолюбов!? :D
может хватит уже мыслить категориями одной системы и начать пользоваться поиском и разумом? ;)

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

после недолгого раздумья и анализа существующих ср-в интеграции и удобства (простоты) использования - выбрать либу...
выполняем
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

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

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

motogarri

Well-Known Member
17.02.2010
200
4
#3
Был в гугле)) Два дня потратил на изучение и попытки прикрутить jabberCom.dll. Плюнул. За ссылки спасибо, буду копаться, потом отпишу, что и как, если кому еще пригодиться.

может хватит уже мыслить категориями одно системы
Пока некуда деватсо))
 
C

Caspiy

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

motogarri

Well-Known Member
17.02.2010
200
4
#5
Более-менее разобрался с 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]
Товарищи, совсем все плохо у меня с жавой, подскажите плиз, как в моем случае передать массив строк в жава-класс. И как сделать паузу между коннектом к серверу и отправкой сообщения? Без этого не работает. Я так понимаю, сообщение отправляется быстрее, чем происходит авторизация на сервере.
 

motogarri

Well-Known Member
17.02.2010
200
4
#6
Сейчас, при попытке передать массив выскакивает ошибка "LS2J Error: Parameter mismatch calling java method. NotesMain". Когда передаю строку, то все нормально проходит.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#7
как в моем случае передать массив строк в жава-класс
См. в справке дизайнера JavaClass class -> CreateObject и GetMethod
Например:
JNI Signature Description Examples Constructor requires
[<sigtype> Array of <sigtype> ([I)V An int array

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

Добавлено
И использование из агента на Lotusscript
А не проще ли и агента написать на Java?
 

motogarri

Well-Known Member
17.02.2010
200
4
#8
Очень много надо переписывать, а знаний по яве пока совсем мало. Библиотеку удобно использовать, нужно-то передать всего два параметра: список имен адресатов и текст сообщения.

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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#9
Переписать приведённого Вами LS агента на Java — 5 минут, причём половину кода сгенерит сам Lotus. Передать из LS в Java можно только массив простых типов. В принципе ничто не мешает Вам объединить элементы массива в одну строку через разделитель, а в Java разбить обратно.
 

motogarri

Well-Known Member
17.02.2010
200
4
#10
Ну этот агент, что здесь это просто тест)) Вот блин засада с массивами.
В принципе ничто не мешает Вам объединить элементы массива в одну строку через разделитель, а в Java разбить обратно.
Угу, я что-то и не подумал про сплиты с джойнами. Попробую если ограничение по кол-ву символов не помешает.

Добавлено:
если ограничение по кол-ву символов не помешает.
Да, понял, фигню сказал...
 

motogarri

Well-Known Member
17.02.2010
200
4
#11
Все, теперь все работает. Сообщения уходят и на один адрес и на список адресов. Спасибо, что толкнули в нужную сторону, помогли разобраться, всем мешок пряников))

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

motogarri

Well-Known Member
17.02.2010
200
4
#12
Работает для восьмерки, а вот на 6.5.5 говорит:


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

motogarri

Well-Known Member
17.02.2010
200
4
#13
А можно ли обновить версию JVM в клиенте или сервере не меняя версии лотуса? В 1.3 даже split не пашет.
 

motogarri

Well-Known Member
17.02.2010
200
4
#14
Нашел смак постарше 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]
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#15
массивы передаются, НО только "статические", LS->java, в обратную сторону нет такого ограничения
статический - это с неизменяемыми границами (после объявления)
теперь по массивам в LS - онж не с нуля существуют - передавайте элементы в java и там формируйте ArrayList, а обратно выводите http://docs.oracle.com/javase/1.5.0/docs/a.../ArrayList.html toArray (луча как String[]) я выкладывал примеры