4.3. Служба оповещений

Служба оповещения предназначена для обмена мгновенными текстовыми сообщения пользователями системы Global. Служба оповещения может работать либо на основе внутреннего механизма СУБД Oracle, Oracle Alerts, либо на основе выделенного XMPP (Jabber) - сервера. Каждое решение обладает своими достоинствами и недостатками. Главной причиной использование Jabber - сервера является снижение нагрузки на сервер Oracle при большом количестве подключенных пользователей.

4.3.1. Настройка XMPP сервера оповещений

4.3.1.1. Использование XMPP (jabber) сервера сообщений

Для использование службой оповещения в качестве транспорта XMPP протокола, необходимо выполнить следующие действия:

  1. Установить Jabber - сервер
  2. Установить XMPP - клиент на сервер Oracle
  3. Добавить новые сущности на базу.
  4. Что делать если сервис оповещений не работает

После выполнения всех шагов можно будет переключить режим работы службы оповещения с использованием Oracle Alerts на использование XMPP сервера. Для этого надо открыть настроки службы оповещения Конфигуратор > Главное Меню > Настройки > Настройки службы оповещений (рис. 1) и выбрать в выпадающем списке “Режим работы службы сообщений” значение “XMPP”.

../../_images/MessegeServiceOptionFrame.png

рис.1. Настройки службы оповещений

Для правильной работы службы оповещений необходимо указатель актульную информацию об установленном сервере. По умолчанию, порт для не шифрованных соединений равен 5222, а имя сервера совпадает с IP адресом хоста на котором установлен jabber - сервер.

4.3.1.1.1. Работа с XMPP сервером на клиенте

Соединение с jabber - сервером устанавливается при загрузке приложения. Если пользователя с таким именем и паролем на jabber - сервере не существует, то происходит автоматическое добавление нового пользователя. При разрыве соединения, по причине потери TCP\IP соединения с хостом сервера или обрыве сессии со стороны jabber - сервера, будет производиться повторные циклические попытки подключения к jabber - серверу каждые 25 секунд.

Для отправки и получения сообщений как и в случае использования Oracle Alerts служит фрейм открывающийся по команде Конфигуратор > Главное Меню > Сервисы > Служба оповещения (рис.2).

../../_images/MessengerServiceFrame.png

рис.2. Фрейм службы оповещения

В левом нижнем углу отображается состояние соединения с сервером(подключен, подключение… , отключен). В правом нижнем углу, состояние отправки сообщений, где показанно количество оставшихся в очереде не отправленных на сервер сообщений. При закрытие приложения Global, надо убедится, что сообщения из очереди для всех адресатов отправлены. Очередь сообщений в клиенте на отсылку создается, чтобы минимизировать “замораживание” пользовательского интерфейса в момент отправки и выполняется в фоновом потоке. Нажатие на кнопку “Отправить” не приводит к моментальной отправке сообщения на сервер, а только к добавлению в очередь. Сообщение отправленное пользователю не подключенному к jabber - серверу, но зарегистрированному на нем, будет доставлено позже, при установки соединения jabber - сервером с данным пользователем. Для подключения пользователя к Jabber серверу используется пароль от сессии пользователя в Оракле. В случае, если не удается подключиться по причине того, что пароль сессии поменялся, то используется серверный метод для сброса пароля на Jabber сервере btk_Clientgate.ResetPassword;

4.3.1.1.2. Работа с XMPP сервером на стороне Oracle

Оболочкой для XMPPMessageSender Java Source пакета является пакет BTK_XMPP. Чтобы начать работать с XMPP сервером, необходимо запустить службу отправки сообщений методом StartSending. Остановить отправку можно методом StopSending. Остановка отправки приведет к выгрузке объекта XMPPMessageSender из памяти и разрыву соединения с XMPP(Jabber) сервером. После того, как служба запущена, сообщения можна отправлять методом:

PutMessage(sTo varchar2, sMsgText varchar2, bCriticalMessage number);

где:

  • sTo - JID получателя или системное имя подписки;
  • sMsgText - текст сообщения;
  • bCriticalMessage – флаг критического сообщения, такое окно с полученным сообщенем на клиентском приложении Global будет мигать, либо будет показано в модальном режиме. Доступно три уровня критичности от 0 до 2 в порядке возрастания.

Сообщение с помощью метода PutMessage не отправляется мгновенно получателю, а добавляется в таблицу сообщений, из которой уже и будет отправлено выполняющемся в фоновом потоке Java методом.

В пакете dbms_alert внесены измененения, в результате которых при вызове метода Signal, анализируется транспорт, который использует служба оповещения. Если транспортом является XMPP протокол, то для отправки сообщения используется пакет BTK_XMPP. В противном случае, используется прежний механизм отправки сообщения.

Чтобы воспользоваться методом Signal для отправки события через Oracle Alert, не учитывая настройки транспорта в службе оповещения, необходимо третьим параметром в методе Signal передать значение 0. По умолчанию значение третьего параметра равно 1 учитываются настройки службы оповещения. Четвертый параметр - уровень критичности, по умолчанию 0.

dbms_alert.Signal('SubscribeName', 'MessageText',0,0);

Доступен отладочный режим, когда в стандартный лог (product/admin/DBName/bdump/, либо в DBMS OUTPUT, если выполнить dbms_java.SetOutput(1000000) ) выводится дополнительная информация о процессе отправки сообщений, в этом случае XMPP сервером необходимо запустить с помощью метода

StartSendingDebugMode;

Лог выводится в DBMS_OUTPUT после остановки отпраки сообшений методом btk_XMPP.stopsending. В логе содержаться информация об ошибках, этапы выполнения отправки сообщений, время выполнения атомарных операций при отсылки сообщений.

4.3.1.2. Необходимые сущности в БД для работы с XMPP сервером

Для работы Global клиента на БД должны присутствовать следующие элементы (Скрипты уже присутствуют в модуле BTK-Common начиная с версии 1.4.62.0 и если он у вас есть, то прогонять ничего дополнительно из этого раздела не нужно).

В версии BTK_COMMON 1.4.66.0. появилась возможность указывать критичность сообщений(-1 - по умолчанию, 0 - нормальная, 1 - высокая, 2 - очень высокая)

В версии 67 появился метод, сброс пароля.

В пакете BTK_ClientGate:

В заголовке пакета:

--======================================================================
-- Функция возвращает курсор со списком пользователей подписки
--======================================================================

Function GetUsersBySubscription (sSubscription in Varchar2) return TRef;

--======================================================================
-- Функция возвращает 1 sSubscription является системным именем подписки
--======================================================================

Function IsSubscription (sSubscription in Varchar2) return number;

--======================================================================
-- Функция возвращает сохранненый порт XMPP сервера
--======================================================================

Function XMPPPort return number;

--======================================================================
-- Функция возвращает сохранненое имя XMPP сервера
--======================================================================

Function XMPPServer return varchar2;

--======================================================================
-- Функция возвращает режим работы алертера:
-- 0 - Oracle Alert
-- 1 - XMPP сервер (Jabber)
--======================================================================

Function AlerterMode return number;

--======================================================================
-- Функция запускат ява метод выполняющий отсылку сообщений на джебер сервер
--======================================================================

procedure XMPPEnable;

--======================================================================
-- Функция выключает ява метод выполняющий отсылку сообщений на джебер сервер
--======================================================================

procedure XMPPDisable;

--======================================================================
-- Функция возвращает время отображения всплывающих окон с критическими
-- сообщениями
--======================================================================

Function MsgWindowLifeTime return number;

--======================================================================
-- Сбрасывает пароль у текущего пользователя сессии для сервера OpenFire,
-- пароль становится равный имени пользователя
--======================================================================

procedure ResetPassword;

В теле пакета:

--======================================================================
-- Функция возвращает курсор co списком пользователей подписки
--======================================================================

Function GetUsersBySubscription (sSubscription in Varchar2) return TRef
as
begin
  return btk_xmpp.GetUsersBySubScription(sSubscription);
end;

--======================================================================
-- Функция возвращает 1, если sSubscription является системным именем подписки
--======================================================================

Function IsSubscription (sSubscription in Varchar2) return number
is
begin
  return btk_xmpp.IsSubscription(sSubscription);
end;

--======================================================================
-- Функция возвращает сохранненый порт XMPP сервера
--======================================================================

Function XMPPPort return number
as
  svClassName varchar2(30);
  nRes varchar2(254);
begin
  svClassName := 'SEL_Application';
  nRes := nvl(BTK_Compile.GetClassProperty(svClassName, 'nXMPPPort'), '5222');
  return nRes;
end;

--======================================================================
--Функция возвращает сохранненое имя XMPP сервера
--======================================================================

Function XMPPServer return varchar2
as
  svClassName varchar2(30);
  vRes varchar2(254);
begin
  svClassName := 'SEL_Application';
  vRes := nvl(BTK_Compile.GetClassProperty(svClassName, 'sXMPPServer'), '0');
  return vRes;
end;

--======================================================================
-- Функция возвращает режим работы алертера:
-- 0 - Oracle Alert
-- 1 - XMPP сервер (Jabber)
--======================================================================

Function AlerterMode return number
as
  svClassName varchar2(30);
  svAM varchar2(254);
begin
  svClassName := 'SEL_Application';
  svAM := nvl(BTK_Compile.GetClassProperty(svClassName, 'nAlerterMode'), '0');
  if svAM = '0' then
    return 0;
  else
    return 1;
  end if;
end;

--======================================================================
-- Функция запускат ява метод выполняющий отсылку сообщений на джабер сервер
--======================================================================

procedure XMPPEnable
as
  l_job number;
begin
  btk_xmpp.StopSending;
  dbms_job.submit(job => l_job, what => 'BTK_XMPP.StartSending;',NEXT_DATE => trunc(sysdate)+30/86400,INTERVAL => null);
  commit;
end;

--======================================================================
-- Функция выключает ява метод выполняющий отсылку сообщений на джабер сервер
--======================================================================

procedure XMPPDisable
as
begin
  btk_xmpp.StopSending;
end;

--======================================================================
-- Функция возвращает время отображения всплывающих окон с критическими
-- сообщениями
--======================================================================

Function MsgWindowLifeTime return number
as
  svClassName varchar2(30);
  vRes varchar2(254);
begin
  svClassName := 'SEL_Application';
  vRes := nvl(BTK_Compile.GetClassProperty(svClassName, 'nMsgWindowLifeTime'), '10000');
  return vRes;
end;

--======================================================================
--Сбрасывает пароль у текущего пользователя сессии для сервера OpenFire,
-- пароль становится равный имени пользователя
--======================================================================

procedure ResetPassword
as
begin
  btk_xmpp.ResetPassword;
end;

Понятия AlertFrameCaption(на основе BTK 1.4.57.0).

Выборка Sel_AppTuningAlert(на основе BTK 1.4.57.0).

Пакет DBMS_ALERT в схеме BTK(на основе BTK 1.4.57.0) Параметр critically доступен с BTK_COMMON 1.4.66.0. В пакете изменен метод Signal:

procedure signal(name in varchar2, message in varchar2, except number DEFAULT 1, critically number DEFAULT -1)
as
begin
  IF Btk_ClientGate.AlerterMode = 0 or except = 0
        or Upper(message) = Upper('__ODAC_Terminate_Event__') or Upper(message) = Upper('__ODAC_Blank_Message__') then
    sys.dbms_alert.signal(name, message);
  ELSE
    btk_XMPP.PutMessage(name, message, critically);
  END IF;
end;

4.3.1.3. Установка XMPP клиента в Oracle

Чтобы иметь возможность отправлять сообщения пользователем Global, используя службу оповещений с сервера Oracle, установим Java XMPP клиента на сервере БД.

Для этого необходимо выполнить следующие шаги (все операции выполняются под пользователем btk):

  • Скопировать файлы библиотек Smack.jar и Smackx.jar в каталог “[каталог установки oracle]\product\10.2.0\db_1\LIB\smack\”. Загрузить библиотеки на рабочу базу, [SID] надо заменить на нужную БД:

    loadjava -u btk/btk@[SID] -r -v smack.jar
    loadjava -u btk/btk@[SID] -r -v smackx.jar
    
  • Скомпилировать XMPPMessageSender Java Source пакет. Перед компиляцией в тексте пакета необходимо найти строку ‘private static final String btk_URL = “jdbc:oracle:thin:@[YOUR_HOST]:1251:[YOUR_SID]”; ‘ и заменить [YOUR_HOST] на адрес узла где находится БД, [YOUR_SID] на SID базы на которую производится установка. Найти строки:

    private static final String btk_usrname = "btk";  - имя пользователя базы
    private static final String btk_pswd = "btk"; - пароль пользователя BTK
    

    и прописать пароль BTK.

  • Создать таблицу сообщений(Присутствует в BTK-COMMON с версии 1.4.62.0):

    drop table XMPPMSGs; create table XMPPMSGs (
    
        id number primary key NOT NULL,
       MsgText varchar(2000),
       sTo varchar(255) NOT NULL,
       bCriticalMessage NUMBER,
       dDATE DATE
    
    ); / create sequence seq_XMPPMSGs; /
    
  • Создать глобальный контекст среды выполнения(Включен в BTK-COMMON начиная с 1.4.67.0 ):

    CREATE OR REPLACE CONTEXT GlobalXMPPContext
    
     USING btk_XMPP
     ACCESSED GLOBALLY;
     /
    
  • Создать и скомпилировать пакет BTK_XMPP(Присутствует в BTK-COMMON с версии 1.4.62.0) С версии 1.4.66.0 появилась в методе возможность PutMessage указывать критичность сообщений

    • -1 - по умолчанию, если это подписка, то будет использована критичность указанная для подписки
    • 0 - нормальная критичность
    • 1 - высокая критичность
    • 2 - очень высокая критичность
  • Создать триггер на старт базы, который однократно запускает Job, в котором будет выполняться цикл JAVA метода, ожидающий поступления новых сообщений в таблицу XMPPMSGs(Присутствует в BTK-COMMON с версии 1.4.62.0):

    create or replace trigger btk_TrgStartupDB
    
        after startup on database
    
    declare
    
       l_job number;
    
    begin
    
       if Btk_ClientGate.AlerterMode = 1 then
         dbms_job.submit(job => l_job, what => 'BTK_XMPP.StartSending;');
      end if;
    
    end;/
    
  • Выполнить под пользователем sys (указать ваш NETWORKNAME - имя компьютера в сети; XMPPServerNETWORKNAME - имя хоста на котором установлен XMPP сервер; вместо ‘D:\ORACLE\PRODUCT\10.2.0\DB_2\JAVAVM\lib\security\cacerts’ указать свой путь к JAVAVM\lib\security\cacerts’ в папке базы ORACLE):

    begin
       dbms_java.grant_permission( 'BTK', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );''
       dbms_java.grant_permission( 'BTK', 'SYS:java.net.SocketPermission', NETWORKNAME, 'connect, resolve' );
       dbms_java.grant_permission( 'BTK', 'SYS:java.net.SocketPermission', XMPPServerNETWORKNAME, 'connect, resolve' );
       dbms_java.grant_permission( 'BTK', 'SYS:java.io.FilePermission', 'D:\ORACLE\PRODUCT\10.2.0\DB_2\JAVAVM\lib\security\cacerts', 'read' );
    end; /
    

4.3.1.4. Установка и настройка XMPP сервера

В качестве сервера сообщений можно использовать любой XMPP сервер, но рекомендуется использовать OpenFire бесплатный сервер с открытыми исходными текстами. Последнию версию с JRE можно скачать c сайта Igniterealtime. В приведенной ниже инструкции по установке использовалась версия OpenFire 3.6.3 для Windows и Oracle 10.2.0.4.0 в Windows XP SP3.

Для начала установки необходимо запустить скаченный файл openfire_3_6_3.exe (рис.1).

../../_images/InstallXMPPServer_step1.png

Рис.1. Начала устаноки OpenFire

Нажимаем кнопку Next (рис.2).

../../_images/InstallXMPPServer_step2.png

Рис.2. Установка OpenFire. Лицензионное соглашение

Нажимаем кнопку Next (рис.3).

../../_images/InstallXMPPServer_step3.png

Рис.3.Установка OpenFire. Выбор каталога установки

Оставляем каталог по умолчанию и нажмем Next (рис.4).

../../_images/InstallXMPPServer_step4.png

Рис.4.Установка OpenFire.Опции создания ярлыков

Нажимаем кнопку Next (рис.5).

../../_images/InstallXMPPServer_step5.png

Рис.5. Завершение установки OpenFire

Перед запуском OpenFire потребуется выполнить еще несколько действий, потому необходимо снять флаг с “Run Openfire” и нажать кнопку Finish. Теперь сервер Openfire установлен и осталось задать основные настройки.

Для хранения настроек, сообщений и информации о пользователях серверу Openfire необходимо хранилище данных. Под такое хранилище мы будем использовать рабочую БД Oracle, на которой установлены приложения Global. Для этого необходимо:

Выполнить SQL скрипт [Каталог установки Openfire]\resources\database\openfire_oracle.sql под пользователем “btk”. Используем утилиту SQLPlus из командной строки >sqlplus btk/btk@DBName @c:\Program Files\Openfire\resources\database\openfire_oracle.sql.

Для доступа к БД Oracle серверу Openfire необходим oracle thin jdbc driver. Его можно либо скачать с официального сайта oracle, либо скопировать “ojdbc14.jar” из каталога [каталог установки oracle]\product\10.2.0\db_1\jdbc\lib\ и поместить в каталог [Каталог установки Openfire]\lib\.

Теперь можно переходить к настройке Openfire сервера. Запустим [Каталог установки Openfire]\bin\openfire.exe (рис. 6).

../../_images/InstallXMPPServer_step6.png

Рис.6. Запуск OpenFire

Ввойдем в консоль администрирования введя в интернет браузере в строке адреса http://127.0.0.1:9090 (рис.7).

../../_images/InstallXMPPServer_step7.jpg

Рис.7. Выбор языка интерфейса консоли администрирования

Выберем язык English и нажмем кнопку Continue (рис. 8).

../../_images/InstallXMPPServer_step8.jpg

Рис.8. Настройки сервера

Введем в поле Domain текущий сетевой IP адрес вашего компьютера. Порты оставим без изменений. Кнопка Continue (рис.9).

../../_images/InstallXMPPServer_step9.jpg

Рис.9. Выбор вида используемой СУБД

Оставляем Standard Database Connection и нажимаем Continue (рис. 10).

../../_images/InstallXMPPServer_step10.jpg

Рис.10. Настройка подключения к БД

В Database Driver Presets выбираем шаблон Oracle. В поле Database URL вставляем адрес компьютера, где находится СУБД Oracle и SID базы (В нашем случае это b14 и GreenDB соответственно). Указываем UserName/пароль: btk/btk. Нажимаем Continue (рис.11).

../../_images/InstallXMPPServer_step11.jpg

Рис.11. Настройка групп пользователей

Оставляем Default. Означает, что пользователи и группы будут храниться на сервере БД. Нажимаем Continue (рис.12).

../../_images/InstallXMPPServer_step12.png

Рис.12. Задание пароля администратора

Задаем пароль администратора, e-mail можно не вводить. Нажимаем Continue (рис.13). В случае если были введены не правильные настройки при установки, в файле bin\openfire.xml нужно стереть блок <setup> … </setup> и снова задать настройки через http://127.0.0.1:9090. Для полной переустановки Openfire на прежнию базу необходимо удалить все таблицы созданный при установки OpenFire (именя таблиц начинаются на “OF..”).

../../_images/InstallXMPPServer_step13.png

Рис.13. Вход в консоль администрирования

Вводим логин admin и пароль для входа в консоль администрирования (http://127.0.0.1:9090). Нажимаем Login (рис.14).

../../_images/InstallXMPPServer_step14.jpg

Рис.14. Консоль администрирования

Если все сделано правильно, то откроется консоль администрирования. Процесс установки OpenFire завершен.

Далее необходимо добавить пользователя btk. Для этого перейдем на вкладку Users/Groups и на жем на Create New User (рис.15).

../../_images/InstallXMPPServer_step15.jpg

Рис.15. Добавление нового пользователя 1

Заполняем поля данными о пользователе btk, в качестве пароля указываем btk, нажимаем Create User(рис. 16).

../../_images/InstallXMPPServer_step16.jpg

Рис.16. Добавление нового пользователя 2

Теперь на вкладке Server -> Server Manager -> System Properties сохранить(добавить) свойство xmpp.client.idle со значением -1.

Из консоли администрирования теперь можно выйти.

Для запуска сервера OpenFire вместе со стартом операционной системы установим приложение OpenFire как службу. В командной строке из каталога [Каталог установки Openfire]\bin выполнить

openfire-service /install
openfire-service /start

По умолчанию виртуальной машиной Java выделяется под Openfire 64 mb виртуальной памяти, что безусловно мало, и при даже не большой нагрузке сервер будет падать с ошибкой не хватки памяти. Для увеличения количества выделяемой памяти необходимо создать текстовый файл “bin\openfire-service.vmoptions” и прописать верхнию и нижнию границу памяти которую необходимо выделять. Мы пропишем 512 mb, но можно и больше, если будет не хватать:

-Xms512m
-Xmx512m

Ошибки можно посмотреть в лог файлах: каталог “\logs”.

4.3.1.5. Что делать если сервис оповещений не работает

Что делать если сервис оповещений не работает

  1. Убедится, что OpenFire сервер работает и есть соединение с базой данных - зайти в веб-администратор сервера;
  2. Убедится, что работает отправка сообщений с клиента. Для этого открыть фрейм оповещений (главное меню Сервис-> Оповещения), проверить состояние в поле подключение, должно быть “Подключен к серверу”. Если состояние другое, смотреть пункт
  3. Проверить отправку сообщений с сервера. Для проверки можно послать сообщение с сервера на клиент используя следующий код(все инструкции выполняются pl/sql developer):
declare
begin
  dbms_alert.signal('LoginName','Test message text', 1, 1);
end;

После выполнения кода, клиентское приложение подключенное под пользователем LoginName должно получить сообщение ‘Test message text’. Если сообщение не получено, то необходимо выполнить следующие проверки:

  1. Убедится, что пакеты btk_XMPP и dbms_alert скомпилировны. А в Java Sources скомпилирован пакет XMPPMessageSender. Если пакетов нет, или не удается скомпилировать следует обратиться к статье Установка клиента XMPP в Oracle;

  2. В списке сессий должно быть N соединений “JDBC Thine Client”(количество соединений задается в свойствах соединения XMPP сервера, по умолчанию от 5 до 25) от сервера XMPP. Работающий сервер XMPP должен иметь соединения с БД; В списке сессий должна быть системная сесcия от ORACLE.EXE(J000). Сессия запускается работающей JAVA-программной рассылки сообщений. Отсутствие сессии говорить о том, что либо служба не запущена, либо остановилась по причине внутренней ошибки. Сервис рассылки запускается при старте базы. Можно запустить и вручную выполнив:

    declare
       l_job number;
    begin
       if Btk_ClientGate.AlerterMode = 1 then
         dbms_job.submit(job => l_job, what => 'BTK_XMPP.StartSending;');
    end if;
    

    Если после выполнения кода сессия от программы ORACLE.EXE(J000) не появилась, либо сессия есть, но сообщения не отправляются, необходимо перейти к следующему пункту. Если не удается запустить службу оповещения (ORACLE.EXE(J000) нет в списке сессий), либо отправка сообщений не приводит к положительному результату, можно использовать запуск службы в отладочном режиме с выводом текстового лога работы службы оповещения. В пакете BTK_XMPP наравне с методом StartSending, есть метод StartSendingDebugMode запускающий службу оповещения в режиме отладки.

    Перед стартом отладки выполнить:

    declare
    begin
      btk_xmpp.StopSending;
    end;
    

    и убедится в отсутствие в списке сессий соединения от программы ORACLE.EXE(J000) для предотвращения возможных блокировок.

    Теперь можно запустить службу оповещения:

    declare
    begin
       dbms_java.set_output(10000000);
       btk_Xmpp.StartSendingDebugMode;
    end;
    

    Отправка будет выполняться в текущем потоке, потому будет наблюдаться эффект “зависания”. Дальше пытаемся отправить тестовое сообщение:

    declare
    begin
       dbms_alert.signal('LoginName','Test message text', 1, 1);
    end;
    

    и остановить службу:

    declare
    begin
        btk_xmpp.StopSending;
    end;
    

После остановки службы лог можно посмотреть на вкладке DBMS_Output в окне в котором был выполнен вызов StartSendingDebugMode. Лог успешной отправки будет похож на следующий:

2009-11-09 16:48:11.234 Выбор записей
2009-11-09 16:48:11.297 Конец Выбора записей
2009-11-09 16:48:11.312 Ожидание сигнала
2009-11-09 16:48:20.219 Сигнал. Значение флага:1
2009-11-09 16:48:20.219 Выбор записей
2009-11-09 16:48:20.219 Конец Выбора записей
2009-11-09 16:48:20.219 Начало нового цикла
2009-11-09 16:48:20.219 Прочитано из таблицы STO:LoginName MSG:Test message text ID:4026

Получение настроек XMPP сервера
ServerName:b53:5222
MessageSender Create
Keep AliveInterval = 30000
Create ConnectionConfiguration
Create XMPPConnection
MessageSender Create, Login by btk/btk

2009-11-09 16:48:34.078 Ошибка отправки No response from the server.:
Повторная попытка подключения
MessageSender Create

Keep AliveInterval = 30000
Create ConnectionConfiguration
Create XMPPConnection
MessageSender Create, Login bybtk/btk

2009-11-09 16:48:39.875 Проверка подключения
2009-11-09 16:48:39.875 ВСЕ ОК!!!

2009-11-09 16:48:39.875 Создан объект Message
2009-11-09 16:48:39.875 Перед отправкой сообщений
2009-11-09 16:48:39.875 После отправки сообщения

2009-11-09 16:48:39.891 Сообщениее послано TO:LoginName@b53 MSG:Test message text
Удалено сообщение ID 4026

2009-11-09 16:48:39.891 Проверка на выход
Выход

2009-11-09 16:48:39.891 << Выход >>

2009-11-09 16:48:39.891 Соединение оборвано

Прокомментируем приведенный лог:

  1. В начала программа делает выбор всех записей которые нужно отправить из таблицы XMPPMSGs при получении сигнала, что добавлено новое сообщение;
  2. Начинается цикл выбора всех сообщений, выбирается первое сообщение из таблицы(Получатель сообщения:LoginName Текст сообщения: Test message text);
  3. Проверяется соединение с сервером XMPP, соединение отсутствует: получаем настройки подключения к серверу XMPP и выполняют попытки подключения(Имя сервера и порт: b53:5222) ;
  4. Соединение с сервером установлено под пользователем btk;
  5. Создается объект сообщения;
  6. Выполняется посылка сообщений - сообщение послано успешно;
  7. Удаляется сообщение из таблицы сообщений XMPPMSGs;
  8. Прерываем процесс отправки. В лог могут выводится ошибки подключения, отправки сообщений, информация о том каких привилегий недостаточно для пользователя BTK. При анализе лога следует уделить внимание следующим вещам: сообщение из таблицы считывается(обратить внимание на получателя сообщения), подключение к серверу XMPP выполняется(обратить внимание на настройки сервера), сообщение успешно отправляется. Что делать, если не работает отправка сообщений с клиента на клиент(пункт находится на стадии написания).

4.3.2. Критичность сообщений системы оповещения

Критичность сообщения задается параметром critically методе Dbms_Alert.signal(name in varchar2, message in varchar2, except number DEFAULT 1, critically number DEFAULT -1,bpCommit in number default 1);  или в интерфейсе отправке сообщения на клиенте.

Поведение клиента при получение сообщения:

  • По умолчниаю(-1)
    1. Показывается форма системы оповещения
    2. В зависимости от свойства “Отображать всплывающее окно” показывается сообщение в сплывающем окне внизу справа
  • Нормальная(0)
    1. Показывается форма системы оповещения
    2. В зависимости от свойства “Отображать всплывающее окно” показывается сообщение в сплывающем окне внизу справа
  • Высокая(1)
    1. Показывается форма системы оповещения
    2. В зависимости от свойства “Отображать всплывающее окно” показывается сообщение в сплывающем окне внизу справа
  • Критичная(2)
    1. Показывается сообщение в сплывающем окне внизу справа
    2. Показывается модальное окно с текстом сообщения
    3. Форма приложения переноситься на передний план

Свойство “Отображать всплывающее окно” можно установить в через меню Сервис ->Оповещения->Параметры. Откроется карточка где можно в для свойства установить значение в редакторе CheckBox.

4.3.3. Служебные сообщения

  • IMMEDIATE_HALT_APPLICATION - пользователь может отменить закрытие
  • IMMEDIATE_HALT_APPLICATION_NO_WAIT - пользователь не может отменить закрытие
  • IMMEDIATE_HALT_APPLICATION_DISCONNECT_WITHOUT_SAVE
  • IMMEDIATE_HALT_APPLICATION_DISCONNECT_TRY_SAVE не реализованно