Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / smack.XMPPConnection из сервлета / 6 сообщений из 6, страница 1 из 1
23.01.2007, 18:49:26
    #34276467
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
Задача: по тычку в сервлет получить список сообщений из базы и раскидать их пользователям по XMPP (всё это в локалке или в сцепленных VPN-ом сегментах).

Ниже идет кусок кода. Проблема в том что XMPP-сессия закрывается до того как smack вытолкает на сервер всё содержимое буфера. Кто работал со smack - как проверить что очередь сессии пуста?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
     public   void  JabberNotifyAll()  throws  SQLException {
        java.sql.Connection m_Conn;       
        Properties props =  new  Properties();
        props.put( "user", "***" );
        props.put( "password", "***" );
        String dbURL;
         try  {
             Class .forName("org.postgresql.Driver");
            dbURL = "jdbc:postgresql://127.0.0.1/fxflow2";
            m_Conn = DriverManager.getConnection( dbURL , props );
           
            XMPPConnection conn =  null ;
             try  {
                conn =  new  XMPPConnection("127.0.0.1");
                conn.login("jabberbot","jabberbot");
                PreparedStatement stmt = m_Conn.prepareStatement("SELECT * FROM v_il_notifications");
                ResultSet rs = stmt.executeQuery();
                 while  (rs.next()) {
                    String subject = rs.getString("subject");
                    String url = rs.getString("url");
                    String jabberuser = rs.getString("jabberuser");
                    String commenttext = rs.getString("commenttext");
                     try  {
                        Chat newchat = conn.createChat(jabberuser);
                        newchat.sendMessage("\n\n " + commenttext + "  " +subject + "\n" + url);
                    }  catch  (XMPPException ex) {
                        ex.printStackTrace();
                    }
                }
                rs.close();
                stmt.close();
                conn.close();
            }  catch  (XMPPException ex) {
                ex.printStackTrace();
            }
        }  catch  (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
    
     protected   void  processRequest(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {
         try  {
            JabberNotifyAll();
        }  catch  (SQLException ex) {
            ex.printStackTrace();
        }
    }
...
Рейтинг: 0 / 0
23.01.2007, 19:16:15
    #34276548
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
Вот если после пробега по рекордсету оставлять XMPPConnection незакрытым (в расчете на мусоросборщик?) - то все сообщения доходят нормально... но может есть способ проверить содержимое XMPP-стека?
...
Рейтинг: 0 / 0
23.01.2007, 19:26:19
    #34276577
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
Vladimir KozlovВот если после пробега по рекордсету оставлять XMPPConnection незакрытым

В качестве брутального хака сделал так

Код: plaintext
1.
2.
3.
4.
5.
6.
                 try  {
                    Thread.sleep( 2000 );
                    conn.close();
                }  catch  (InterruptedException ex) {
                    ex.printStackTrace();
                }

Есть тут кто-то кто работал с XMPP?
...
Рейтинг: 0 / 0
24.01.2007, 11:40:33
    #34277919
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
Странности:
1. Ни DB, ни XMPPConnection не закрываются корректно.
2. sendMessage выполняется асинхронно? странно. Имеет смысл спросить об этом на форуме .

Таким способом тоже "не успевает"? (пример отсюда )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    XMPPConnection connection =  new  XMPPConnection("jabber.org");
    connection.login("user", "password");
    Message message =  new  Message();
    message.setTo("tom@jabber.org");
    message.setSubject("Server down");
    message.setBody("The 'jupiter' server has just gone down");
    message.setType(Message.Type.HEADLINE);
    connection.sendPacket(message);
    connection.close();
...
Рейтинг: 0 / 0
24.01.2007, 17:24:14
    #34279772
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
TimmСтранности:
1. Ни DB, ни XMPPConnection не закрываются корректно.


XMPPConnection-у я делаю close(), а DB тут для теста всунута - в окончательном варианте будет таскаться bean с DB из сессии.

Timm
2. sendMessage выполняется асинхронно? странно. Имеет смысл спросить об этом на форуме .


Йухаха. Там чел с такой же траблой мучался еще в 2004 году, спрашивал как сделать блокирующий вызов sendMessage - ничего по сути ему не ответили, самый работоспособный из советов тоже был с использованием sleep :(

Timm
Таким способом тоже "не успевает"? (пример отсюда )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    XMPPConnection connection =  new  XMPPConnection("jabber.org");
    connection.login("user", "password");
    Message message =  new  Message();
    message.setTo("tom@jabber.org");
    message.setSubject("Server down");
    message.setBody("The 'jupiter' server has just gone down");
    message.setType(Message.Type.HEADLINE);
    connection.sendPacket(message);
    connection.close();


Штука в том что sendPacket тоже асинхронный - я еще вчера вечером этот кусок кода пробовал.

Зараза еще и в том что с виндового хоста под томкатом XMPPConnection коннектится/дисконнектится на ура, а если линуховый томкат стоит на одном ящике с wildfire - иногда отрабатывает коннект моментально а иногда минутку подождет... Причем telnet localhost 5222 отрабатывает без вопросов. Похоже на то что надо smack выкинуть к чертовой матери и писать низкоуровневую шнягу на сокетах - тем более что мне только отправка сообщений нужна, это нотификатор для документооборота я делаю...
...
Рейтинг: 0 / 0
28.01.2007, 13:06:31
    #34287877
maddcast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
smack.XMPPConnection из сервлета
А другие библиотеки пробовал? На jabber.org я нашёл ещё 8 библиотек помимо smack
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / smack.XMPPConnection из сервлета / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]