ru.bitel.bgbilling.kernel.event

## Class EventProcessor

- java.lang.Object
- - ru.bitel.bgbilling.kernel.event.EventProcessor

-     public class EventProcessor
      extends java.lang.Object

  Обработчик (и отсылщик) событий.
  Текущая проверенная пропускная способность для запроса-ответа на 4ядерном -
  около 1000 в секунду для xml сериализации, примерно в полтора раза больше для обычной сериализации.
  Но xml предпочтительнее для интеграции с внешними системами. При простом оповещении о событии (topic) - еще в два раза больше.
  Author:
    amir

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `boolean` | `syncAcknowledgeFix`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `<E extends Event> void` | `addListener(EventListener<? super E> l, java.lang.Class<E> clazz)`
    `<E extends Event> void` | `addListener(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)` Добавление слушателя события с параметрами фильтра.
    `<E extends Event> void` | `addListener(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query)`
    `<E extends Event> void` | `addListener(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query)`
    `static EventProcessor` | `getInstance()` Получение instance процессора.
    `static <E extends Event> java.lang.String` | `getKey(java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)`
    `java.util.List<EventKey>` | `getListeningEventKeys()` Возвращает список событий, которые слушаются.
    `java.util.List<java.lang.Class<? extends Event>>` | `getListeningEvents()` Возвращает список событий, которые слушаются.
    `java.util.List<java.lang.Class<? extends Event>>` | `getListeningQueueEvents()`
    `protected static EventProcessor` | `newInstance(javax.jms.ConnectionFactory connectionFactory)` Создание экземпляра и ожидание `EventProcessor` Этот метод на будущее...
    `<E extends PoolEvent> PoolEventPublisher<E>` | `newPoolEventPublisher(java.lang.Class<E> clazz, int moduleId)` Создание отправщика `PoolEvent`.
    `<E extends PoolEvent> PoolEventPublisher<E>` | `newPoolEventPublisher(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)` Создание отправщика `PoolEvent`.
    `<E extends PoolQueueEvent> PoolEventPublisher<E>` | `newPoolQueueEventPublisher(java.lang.Class<E> clazz, int moduleId)` Создание отправщика `PoolEvent`.
    `<E extends PoolQueueEvent> PoolEventPublisher<E>` | `newPoolQueueEventPublisher(java.lang.Class<E> clazz, int moduleId, int capacity, long delay)` Создание отправщика `PoolEvent`.
    `void` | `publish(Event e)`
    `void` | `publishAfterCommit(ru.bitel.common.worker.CommitableHandler context, Event e)`
    `void` | `publishAfterCommit(Event e)`
    `void` | `removeListener(EventListener<?> l)`
    `void` | `removeListener(EventListener<?> l, java.util.Collection<java.lang.String> exceptKeys)`
    `<Q extends QueueEvent> Q` | `request(Q e)` Отправка события и ожидание ответа на него.
    `<Q extends Event> Q` | `request(Q e, long timeout)` Отправка события и ожидание ответа на него.
    `<Q extends Event> java.util.concurrent.Future<Q>` | `requestAsync(Q e, long timeout)` Выполнение запроса асинхронно.
    `void` | `setThreadCount(int count, int queue)` Установка количества потоков обработки сообщений.
    `void` | `shutdown()` Останов и ожидание окончания выполнения уже полученных событий.
    `<E extends Event> boolean` | `updateListener(EventListener<? super E> l, java.lang.Class<E> clazz)`
    `<E extends Event> boolean` | `updateListener(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, int pluginId, java.lang.String query)`
    `<E extends Event> boolean` | `updateListener(EventListener<? super E> l, java.lang.Class<E> clazz, int moduleId, java.lang.String query)`
    `<E extends Event> boolean` | `updateListener(EventListener<? super E> l, java.lang.Class<E> clazz, java.lang.String query)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### syncAcknowledgeFix

          public final boolean syncAcknowledgeFix

  - ### Method Detail

    - #### setThreadCount

          public final void setThreadCount(int count,
                                           int queue)

      Установка количества потоков обработки сообщений.
      `Session` работает в одном потоке. А этого параметра будет зависеть в пуле из скольки потоков
      будет обрабатываться сообщение. Если count <=0 сообщение обрабатывается в том же потоке.
      Parameters:
        `count` -

    - #### addListener

          public <E extends Event> void addListener(EventListener<? super E> l,
                                                    java.lang.Class<E> clazz)
                                             throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### addListener

          public <E extends Event> void addListener(EventListener<? super E> l,
                                                    java.lang.Class<E> clazz,
                                                    java.lang.String query)
                                             throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### addListener

          public <E extends Event> void addListener(EventListener<? super E> l,
                                                    java.lang.Class<E> clazz,
                                                    int moduleId,
                                                    java.lang.String query)
                                             throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### addListener

          public <E extends Event> void addListener(EventListener<? super E> l,
                                                    java.lang.Class<E> clazz,
                                                    int moduleId,
                                                    int pluginId,
                                                    java.lang.String query)
                                             throws ru.bitel.bgbilling.common.BGException

      Добавление слушателя события с параметрами фильтра.
      Type Parameters:
        `E` -
      Parameters:
        `l` -
        `clazz` -
        `moduleId` - фильтр по коду модуля (-1 - не важно, 0 - ядро)
        `pluginId` - фильтр по коду плагина (-1 - не важно)
        `query` - фильтр по параметрам сообщения события.
        Параметры сообщения устанавливаются событием в `Event#prepareMessage(ObjectMessage)`
      Throws:
        `ru.bitel.bgbilling.common.BGException`
      See Also:
        `Message`

    - #### updateListener

          public <E extends Event> boolean updateListener(EventListener<? super E> l,
                                                          java.lang.Class<E> clazz,
                                                          int moduleId,
                                                          int pluginId,
                                                          java.lang.String query)
                                                   throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### updateListener

          public <E extends Event> boolean updateListener(EventListener<? super E> l,
                                                          java.lang.Class<E> clazz)
                                                   throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### updateListener

          public <E extends Event> boolean updateListener(EventListener<? super E> l,
                                                          java.lang.Class<E> clazz,
                                                          java.lang.String query)
                                                   throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### updateListener

          public <E extends Event> boolean updateListener(EventListener<? super E> l,
                                                          java.lang.Class<E> clazz,
                                                          int moduleId,
                                                          java.lang.String query)
                                                   throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getKey

          public static <E extends Event> java.lang.String getKey(java.lang.Class<E> clazz,
                                                                  int moduleId,
                                                                  int pluginId,
                                                                  java.lang.String query)

    - #### removeListener

          public void removeListener(EventListener<?> l)
                              throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### removeListener

          public void removeListener(EventListener<?> l,
                                     java.util.Collection<java.lang.String> exceptKeys)
                              throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### publishAfterCommit

          public final void publishAfterCommit(ru.bitel.common.worker.CommitableHandler context,
                                               Event e)

    - #### publishAfterCommit

          public final void publishAfterCommit(Event e)

    - #### publish

          public final void publish(Event e)
                             throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### request

          public final <Q extends QueueEvent> Q request(Q e)
                                                 throws ru.bitel.bgbilling.common.BGException

      Отправка события и ожидание ответа на него. Ответ - это (возможно) измененный объект e Но в тоже время он мог быть передан по сети туда и обратно, потому result != e
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### request

          public final <Q extends Event> Q request(Q e,
                                                   long timeout)
                                            throws EventProcessorException

      Отправка события и ожидание ответа на него. Ответ - это (возможно) измененный объект e Но в тоже время он был передан по сети туда и обратно, потому result != e
      Если задан таймаут, то необходимо на повторное событие с теми же параметрами - отвечать одинаково,
      так как событие на самом деле может все равно обработаться, но таймаут выйти и ответ не придет.
      Throws:
        `EventProcessorException`

    - #### requestAsync

          public <Q extends Event> java.util.concurrent.Future<Q> requestAsync(Q e,
                                                                               long timeout)
                                                                        throws EventProcessorException

      Выполнение запроса асинхронно.
      Если ответ не пришел, обязательно должен быть обязательно вызван `Future.cancel(boolean)`!!!
      Type Parameters:
        `Q` -
      Parameters:
        `e` -
        `timeout` -
      Returns:
      Throws:
        `EventProcessorException`

    - #### newInstance

          protected static EventProcessor newInstance(javax.jms.ConnectionFactory connectionFactory)

      Создание экземпляра и ожидание `EventProcessor` Этот метод на будущее...
      Parameters:
        `connectionFactory` -
      Returns:

    - #### getListeningEvents

          public java.util.List<java.lang.Class<? extends Event>> getListeningEvents()

      Возвращает список событий, которые слушаются.
      Returns:

    - #### getListeningQueueEvents

          public java.util.List<java.lang.Class<? extends Event>> getListeningQueueEvents()

    - #### getListeningEventKeys

          public java.util.List<EventKey> getListeningEventKeys()

      Возвращает список событий, которые слушаются.
      Returns:

    - #### getInstance

          public static final EventProcessor getInstance()

      Получение instance процессора. Процессор инициализируется при первом использовании.
      Returns:

    - #### newPoolEventPublisher

          public <E extends PoolEvent> PoolEventPublisher<E> newPoolEventPublisher(java.lang.Class<E> clazz,
                                                                                   int moduleId)

      Создание отправщика `PoolEvent`.
      Type Parameters:
        `E` -
      Parameters:
        `clazz` -
        `moduleId` - код модуля, с которым будут все отправленные события.
      Returns:
      See Also:
        `PoolEvent`

    - #### newPoolEventPublisher

          public <E extends PoolEvent> PoolEventPublisher<E> newPoolEventPublisher(java.lang.Class<E> clazz,
                                                                                   int moduleId,
                                                                                   int capacity,
                                                                                   long delay)

      Создание отправщика `PoolEvent`.
      Type Parameters:
        `E` -
      Parameters:
        `clazz` -
        `moduleId` - код модуля, с которым будут все отправленные события
        `capacity` - максимальный размер буфера сообщений
        `delay` - частота отправки буфера, в миллисекундах
      Returns:

    - #### newPoolQueueEventPublisher

          public <E extends PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher(java.lang.Class<E> clazz,
                                                                                             int moduleId)

      Создание отправщика `PoolEvent`.
      Type Parameters:
        `E` -
      Parameters:
        `clazz` -
        `moduleId` - код модуля, с которым будут все отправленные события.
      Returns:
      See Also:
        `PoolEvent`

    - #### newPoolQueueEventPublisher

          public <E extends PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher(java.lang.Class<E> clazz,
                                                                                             int moduleId,
                                                                                             int capacity,
                                                                                             long delay)

      Создание отправщика `PoolEvent`.
      Type Parameters:
        `E` -
      Parameters:
        `clazz` -
        `moduleId` - код модуля, с которым будут все отправленные события
        `capacity` - максимальный размер буфера сообщений
        `delay` - частота отправки буфера, в миллисекундах
      Returns:

    - #### shutdown

          public void shutdown()
                        throws javax.jms.JMSException,
                               java.lang.InterruptedException

      Останов и ожидание окончания выполнения уже полученных событий.
      Throws:
        `javax.jms.JMSException`
        `java.lang.InterruptedException`