powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / smack.XMPPConnection из сервлета
6 сообщений из 6, страница 1 из 1
smack.XMPPConnection из сервлета
    #34276467
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: по тычку в сервлет получить список сообщений из базы и раскидать их пользователям по 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
smack.XMPPConnection из сервлета
    #34276548
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот если после пробега по рекордсету оставлять XMPPConnection незакрытым (в расчете на мусоросборщик?) - то все сообщения доходят нормально... но может есть способ проверить содержимое XMPP-стека?
...
Рейтинг: 0 / 0
smack.XMPPConnection из сервлета
    #34276577
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir KozlovВот если после пробега по рекордсету оставлять XMPPConnection незакрытым

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

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

Есть тут кто-то кто работал с XMPP?
...
Рейтинг: 0 / 0
smack.XMPPConnection из сервлета
    #34277919
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странности:
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
smack.XMPPConnection из сервлета
    #34279772
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
smack.XMPPConnection из сервлета
    #34287877
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А другие библиотеки пробовал? На jabber.org я нашёл ещё 8 библиотек помимо smack
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / smack.XMPPConnection из сервлета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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