4.4. События и операции#

Исторически в архитектуре oracle решения операции использовались в качестве трех ролей:

В postgres архитектуре мы говорим об операциях только как об объектах, представляющих интерфейсные элементы управления. В ней события и сеттеры обособлены в отдельные сущности. Однако ради совместимости с oracle архитектурой в метаданные AS события и операции от postgres решения приходили единой коллекцией не различимых по типу объектов. А отправка событий выполнялась через вызов обработчиков операций с помощью (CoreRepController.CoreOperationExecutor). Начиная с версии сервера v1.23.0-rc5 новые события отправляются через диспетчер событий CoreEventDispatcher и объявляются (именуются) в соответствие с его спецификацией. Назначение обработчика событий возлагается на прикладной код.

Attention

Важным последствием разделения терминов операция и событие являться возможность не совпадение системного имени события и имени метода обработчика.

Note

В следующих версиях AS планируется перевести посылку всех событий на диспетчер и начать игнорировать события приходящие в метаданных в коллекции с операциями

Характеристики архитектуры событий postgres решения:

  • Событие отправляются через диспетчер событий CoreEventDispatcher.

  • Событие определяется выполненным по флагу CoreEvent.isHandled.

  • Наличие обработчика события не является обязательным условием.

Note

В старой архитектуре событие считается выполненным, если удалось вызвать обработчик события. доступность обработчика события определяется его наличием в метаданных.

Формат имени события:

Определение имени события по системе EBNF#
full event name = [prefix, "."] name
prefix = source name
source name = application model node name

Note

source name это компонент, отправляющий событие в диспетчер. Имя источника совпадает с узлом модели приложения компонента, для которого необходимо обработать событие.

Для обеспечения совместимости архитектур:

  • В метаданных приходит единая коллекция, состоящая из операций, сеттеров и обработчиков событий.

  • Вызов сеттеров и обработчиков событий производится через механизм вызова операций (CoreRepController.CoreOperationExecutor).