Package ru.bitel.bgbilling.kernel.event

# Class EventProcessor

java.lang.Object
ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
ru.bitel.bgbilling.kernel.event.EventProcessor

public class EventProcessor extends ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
Обработчик (и отсылщик) событий.
Текущая проверенная пропускная способность для запроса-ответа на 4ядерном -
около 1000 в секунду для xml сериализации, примерно в полтора раза больше для обычной сериализации.
Но xml предпочтительнее для интеграции с внешними системами. При простом оповещении о событии (topic) - еще в два раза больше.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `final boolean`
  `syncAcknowledgeFix`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  void`
  `addListener(EventListener<? super E> l, Class<E> clazz)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  void`
  `addListener(EventListener<? super E> l, Class<E> clazz, int moduleId, int pluginId, String query)`
  Добавление слушателя события с параметрами фильтра.
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  void`
  `addListener(EventListener<? super E> l, Class<E> clazz, int moduleId, String query)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  void`
  `addListener(EventListener<? super E> l, Class<E> clazz, String query)`
  `Map<String,Object>`
  `doCrossComponentQuery(String componentName, int componentId, String componentOperation, Object... params)`
  `static final EventProcessor`
  `getInstance()`
  Получение instance процессора.
  `static <E extends ru.bitel.bgbilling.kernel.event.common.Event>
  String`
  `getKey(Class<E> clazz, int moduleId, int pluginId, String query)`
  `List<EventKey>`
  `getListeningEventKeys()`
  Возвращает список событий, которые слушаются.
  `List<Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>>`
  `getListeningEvents()`
  Возвращает список событий, которые слушаются.
  `List<Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>>`
  `getListeningQueueEvents()`
  `<E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent>
  PoolEventPublisher<E>`
  `newPoolEventPublisher(Class<E> clazz, int moduleId)`
  Создание отправщика `PoolEvent`.
  `<E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent>
  PoolEventPublisher<E>`
  `newPoolEventPublisher(Class<E> clazz, int moduleId, int capacity, long delay)`
  Создание отправщика `PoolEvent`.
  `<E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent>
  PoolEventPublisher<E>`
  `newPoolQueueEventPublisher(Class<E> clazz, int moduleId)`
  Создание отправщика `PoolEvent`.
  `<E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent>
  PoolEventPublisher<E>`
  `newPoolQueueEventPublisher(Class<E> clazz, int moduleId, int capacity, long delay)`
  Создание отправщика `PoolEvent`.
  `final void`
  `publish(ru.bitel.bgbilling.kernel.event.common.Event event)`
  `final void`
  `publishAfterCommit(ru.bitel.bgbilling.kernel.event.common.Event e)`
  `final void`
  `publishAfterCommit(ru.bitel.common.worker.CommitableHandler context, ru.bitel.bgbilling.kernel.event.common.Event e)`
  `void`
  `removeListener(EventListener<?> l)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  void`
  `removeListener(EventListener<?> l, Class<E> clazz, int moduleId, String query)`
  `void`
  `removeListener(EventListener<?> l, Collection<String> exceptKeys)`
  `final <Q extends ru.bitel.bgbilling.kernel.event.common.QueueEvent>
  Q`
  `request(Q e)`
  Отправка события и ожидание ответа на него.
  `final <Q extends ru.bitel.bgbilling.kernel.event.common.Event>
  Q`
  `request(Q e, long timeout)`
  Отправка события и ожидание ответа на него.
  `<Q extends ru.bitel.bgbilling.kernel.event.common.Event>
  Future<Q>`
  `requestAsync(Q e, long timeout)`
  Выполнение запроса асинхронно.
  Если ответ не пришел, обязательно должен быть обязательно вызван `Future.cancel(boolean)`!!!
  `final void`
  `setThreadCount(int count, int queue)`
  Установка количества потоков обработки сообщений.
  `Session` работает в одном потоке.
  `void`
  `shutdown()`
  Останов и ожидание окончания выполнения уже полученных событий.
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  boolean`
  `updateListener(EventListener<? super E> l, Class<E> clazz)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  boolean`
  `updateListener(EventListener<? super E> l, Class<E> clazz, int moduleId, int pluginId, String query)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  boolean`
  `updateListener(EventListener<? super E> l, Class<E> clazz, int moduleId, String query)`
  `<E extends ru.bitel.bgbilling.kernel.event.common.Event>
  boolean`
  `updateListener(EventListener<? super E> l, Class<E> clazz, String query)`

  ### Methods inherited from class ru.bitel.bgbilling.kernel.base.server.logger.BGLogger

  `error, error, error, getLogger, logError, logError`

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

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

- ## Field Details

  - ### syncAcknowledgeFix

    public final boolean syncAcknowledgeFix

- ## Method Details

  - ### setThreadCount

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

  - ### addListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener(EventListener<? super E> l, Class<E> clazz) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### addListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener(EventListener<? super E> l, Class<E> clazz, String query) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### addListener

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

  - ### addListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void addListener(EventListener<? super E> l, Class<E> clazz, int moduleId, int pluginId, 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 ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener(EventListener<? super E> l, Class<E> clazz, int moduleId, int pluginId, String query) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### updateListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener(EventListener<? super E> l, Class<E> clazz) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### updateListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> boolean updateListener(EventListener<? super E> l, Class<E> clazz, String query) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### updateListener

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

  - ### getKey

    public static <E extends ru.bitel.bgbilling.kernel.event.common.Event> String getKey(Class<E> clazz, int moduleId, int pluginId, String query)

  - ### removeListener

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

  - ### removeListener

    public <E extends ru.bitel.bgbilling.kernel.event.common.Event> void removeListener(EventListener<?> l, Class<E> clazz, int moduleId, String query) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### removeListener

    public void removeListener(EventListener<?> l, Collection<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, ru.bitel.bgbilling.kernel.event.common.Event e)

  - ### publishAfterCommit

    public final void publishAfterCommit(ru.bitel.bgbilling.kernel.event.common.Event e)

  - ### publish

    public final void publish(ru.bitel.bgbilling.kernel.event.common.Event event) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### request

    public final <Q extends ru.bitel.bgbilling.kernel.event.common.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 ru.bitel.bgbilling.kernel.event.common.Event> Q request(Q e, long timeout) throws EventProcessorException
    Отправка события и ожидание ответа на него. Ответ - это (возможно) измененный объект e Но в тоже время он был передан по сети туда и обратно, потому result != e
    Если задан таймаут, то необходимо на повторное событие с теми же параметрами - отвечать одинаково,
    так как событие на самом деле может все равно обработаться, но таймаут выйти и ответ не придет.
    Throws:
      `EventProcessorException`

  - ### requestAsync

    public <Q extends ru.bitel.bgbilling.kernel.event.common.Event> Future<Q> requestAsync(Q e, long timeout) throws EventProcessorException
    Выполнение запроса асинхронно.
    Если ответ не пришел, обязательно должен быть обязательно вызван `Future.cancel(boolean)`!!!
    Type Parameters:
      `Q` -
    Parameters:
      `e` -
      `timeout` -
    Returns:
    Throws:
      `EventProcessorException`

  - ### getListeningEvents

    public List<Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningEvents()
    Возвращает список событий, которые слушаются.
    Returns:

  - ### getListeningQueueEvents

    public List<Class<? extends ru.bitel.bgbilling.kernel.event.common.Event>> getListeningQueueEvents()

  - ### getListeningEventKeys

    public List<EventKey> getListeningEventKeys()
    Возвращает список событий, которые слушаются.
    Returns:

  - ### getInstance

    public static final EventProcessor getInstance()
    Получение instance процессора. Процессор инициализируется при первом использовании.
    Returns:

  - ### newPoolEventPublisher

    public <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent> PoolEventPublisher<E> newPoolEventPublisher(Class<E> clazz, int moduleId)
    Создание отправщика `PoolEvent`.
    Type Parameters:
      `E` -
    Parameters:
      `clazz` -
      `moduleId` - код модуля, с которым будут все отправленные события.
    Returns:
    See Also:
      - `PoolEvent`

  - ### newPoolEventPublisher

    public <E extends ru.bitel.bgbilling.kernel.event.common.PoolEvent> PoolEventPublisher<E> newPoolEventPublisher(Class<E> clazz, int moduleId, int capacity, long delay)
    Создание отправщика `PoolEvent`.
    Type Parameters:
      `E` -
    Parameters:
      `clazz` -
      `moduleId` - код модуля, с которым будут все отправленные события
      `capacity` - максимальный размер буфера сообщений
      `delay` - частота отправки буфера, в миллисекундах
    Returns:

  - ### newPoolQueueEventPublisher

    public <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher(Class<E> clazz, int moduleId)
    Создание отправщика `PoolEvent`.
    Type Parameters:
      `E` -
    Parameters:
      `clazz` -
      `moduleId` - код модуля, с которым будут все отправленные события.
    Returns:
    See Also:
      - `PoolEvent`

  - ### newPoolQueueEventPublisher

    public <E extends ru.bitel.bgbilling.kernel.event.common.PoolQueueEvent> PoolEventPublisher<E> newPoolQueueEventPublisher(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, InterruptedException
    Останов и ожидание окончания выполнения уже полученных событий.
    Throws:
      `javax.jms.JMSException`
      `InterruptedException`

  - ### doCrossComponentQuery

    public Map<String,Object> doCrossComponentQuery(String componentName, int componentId, String componentOperation, Object... params) throws Exception
    Parameters:
      `componentName` -
      `componentId` -
      `componentOperation` -
      `params` -
    Returns:
    Throws:
      `ru.bitel.bgbilling.common.BGException`
      `Exception`