Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
devel:documentation:architecture:dev:events [2019/03/18 09:10]
tomiskar [Duplicate role processors]
devel:documentation:architecture:dev:events [2021/08/13 07:18] (current)
tomiskar [Entities with event support]
Line 65: Line 65:
       * adds event type ''PASSWORD\_EXPIRED'' - password expires       * adds event type ''PASSWORD\_EXPIRED'' - password expires
     * ''IdmProfileDto'' - operation with the identity profile     * ''IdmProfileDto'' - operation with the identity profile
-      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''+      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE'', ''NOTIFY''
     * ''IdmPasswordDto'' - operation with the CzechIdM password     * ''IdmPasswordDto'' - operation with the CzechIdM password
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
Line 109: Line 109:
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''        * supports base event types ''CREATE'', ''UPDATE'', ''DELETE'' 
     * ''IdmLongRunningTaskDto'' - long running task     * ''IdmLongRunningTaskDto'' - long running task
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
       * adds event type ''END'' - long running task ended.       * adds event type ''END'' - long running task ended.
     * ''IdmEntityEventDto'' - persisted event     * ''IdmEntityEventDto'' - persisted event
Line 120: Line 121:
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
     * ''IdmCodeListItemDto'' - code list items     * ''IdmCodeListItemDto'' - code list items
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
 +    * ''IdmNotificationTemplateDto'' - notification templates
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
 +    * ''IdmIdentityProjectionDto'' - identity form projections
 +      * supports base event types ''CREATE'', ''UPDATE''
 +    * ''ModuleDescriptorDto'' - application modules
 +      * supports base event types ''INIT'', ''ENABLE'', ''DISABLE''
 +    * ''IdmScripDto'' - groovy scripts
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE'' 
 +    * ''IdmMonitoringDto'' - monitoring evaluators
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
 +      * adds event type ''EXECUTE'' - run monitoring evaluator
 +    * ''IdmMonitoringResultDto'' - monitoring results (returned from evaluator)
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
   * ''acc'':   * ''acc'':
Line 128: Line 142:
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
     * ''SysSystemDto'' - System in ACC module     * ''SysSystemDto'' - System in ACC module
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
 +    * ''SysRemoteServerDto'' - Remote server in ACC module
       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''       * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
     * ''SysSystemMappingDto'' - Mapping between system and his mapping of provisioning or sync     * ''SysSystemMappingDto'' - Mapping between system and his mapping of provisioning or sync
Line 139: Line 155:
       * adds event type ''CANCEL'' - cancels provisioning operation       * adds event type ''CANCEL'' - cancels provisioning operation
     * ''AbstractSysSyncConfigDto'' (''SysSyncConfigDto'', ''SysSyncContractConfigDto'', ''SysSyncIdentityConfigDto'') - synchronization     * ''AbstractSysSyncConfigDto'' (''SysSyncConfigDto'', ''SysSyncContractConfigDto'', ''SysSyncIdentityConfigDto'') - synchronization
 +      * supports base event types ''CREATE'', ''UPDATE'', ''DELETE''
       * adds event type ''START'' - starts synchronization       * adds event type ''START'' - starts synchronization
       * adds event type ''START\_ITEM'' - starts synchronization of one item (~entity)       * adds event type ''START\_ITEM'' - starts synchronization of one item (~entity)
Line 156: Line 173:
  
  
-The default order for listeners (''-'' => before, ''+'' => after)+The [[#predefined_processors_order|default order]] for listeners (''-'' => before, ''+'' => after).
-  * ''core'': **0** +
-  * ''provisioning'': **1000** +
-  * ''delete / archivate processed'': **5000**+
  
 ===== Basic interfaces ===== ===== Basic interfaces =====
Line 202: Line 216:
  
  * ''getPriority(event)'' - Registered async processor can vote about priority of processing for given event. Returns ''null'' by default => processor doesn't vote about priority - preserve original event priority. Use ''IMMEDIATE'' to execute whole event synchronously. All registered processors votes about event priority - whole event will be processed with the highest priority.  * ''getPriority(event)'' - Registered async processor can vote about priority of processing for given event. Returns ''null'' by default => processor doesn't vote about priority - preserve original event priority. Use ''IMMEDIATE'' to execute whole event synchronously. All registered processors votes about event priority - whole event will be processed with the highest priority.
 +
 +==== AbstractInitApplicationProcessor====
 +
 +Use this super class for providing application and module [[.events:init-data|init data]].
 +
 +
  
 ===== Transactions ===== ===== Transactions =====
Line 212: Line 232:
   * saving logs and archives in the new transaction (''Propagation.REQUIRES_NEW'')   * saving logs and archives in the new transaction (''Propagation.REQUIRES_NEW'')
  
 +===== Event properties =====
 +
 +Event properties (''Map'') can be specified for the event. Properties could be used in event processing. 
 +
 +Event properties are propagated automatically from parent into child event:
 +  * if parent event is given, when child event is published
 +  * if child event doesn't contain property with the same key - property can be preset manually and has a higher priority.
 +  * properties needed for internal event mechanism are not propagated. Property keys can be found in ''EntityEvent''.
 +
 +<note tip>When ''NOTIFY'' event is published and event will be processed synchronously (asynchronous event processing is disabled or event has ''IMMEDIATE'' priority), the properties set by processing ''NOTIFY'' event is also available in the original event.</note>
 ===== Asynchronous event processing ===== ===== Asynchronous event processing =====
  
Line 248: Line 278:
 Before event is persisted into queue, then event priority is evaluated, priority types: Before event is persisted into queue, then event priority is evaluated, priority types:
   * ''IMMEDIATE'' - immediate ~ synchronously. Event will be executed synchronously.   * ''IMMEDIATE'' - immediate ~ synchronously. Event will be executed synchronously.
-  * ''HIGH'' - asynchronously (7 / 10 in one cycle) +  * ''HIGH'' - asynchronously (7 / 10 in one cycle, batch size can be [[..:..:application_configuration:dev:backend#entity_events|configured]]
-  * ''NORMAL'' - asynchronously (3 / 10 in one cycle)+  * ''NORMAL'' - asynchronously (3 / 10 in one cycle, batch size can be [[..:..:application_configuration:dev:backend#entity_events|configured]])
  
 Events are processed from queue by internal scheduled tasks by priority. Events with ''HIGH'' priority will use 7 slots, events with ''NORMAL'' priority will use 3 slots => events will be processed **7 / 3**, when internal scheduled task for processing events will be executed. Events are processed from queue by internal scheduled tasks by priority. Events with ''HIGH'' priority will use 7 slots, events with ''NORMAL'' priority will use 3 slots => events will be processed **7 / 3**, when internal scheduled task for processing events will be executed.
Line 277: Line 307:
   * original source (embedded dtos and audit fields are ignored).   * original source (embedded dtos and audit fields are ignored).
  
-Older duplicate events are removed - the newest event is used. Events are processed by priority in bulk, default bulk size is **100 events** => duplicates are removed only in this bulk (not configurable for now, see future development). Bulk size is designed this way, because events are processed by priority - event with ''HIGH'' priority should not wait too long for another bulk is begin to process. Remove duplicates should be redesigned from scratch - remove duplicates through whole queue.+Older duplicate events are removed - the newest event is used. Events are processed by priority in batch, default batch size can be [[..:..:application_configuration:dev:backend#entity_events|configured]] => duplicates are removed only in this batch (not configurable for now, see future development). Batch size is designed this way, because events are processed by priority - event with ''HIGH'' priority should not wait too long for another bulk is begin to process. Remove duplicates should be redesigned from scratch - remove duplicates through whole queue.
  
 === Entity state === === Entity state ===
Line 326: Line 356:
 ===== Implemented processors ===== ===== Implemented processors =====
  
-Basic save and delete processors are not listed.+**Basic processors for simple operations (e.g. savedeleteare not listed.** All registered processors can be listed in agenda (Settings - Modules - Processors). 
 + 
 ==== Automatic roles processors ==== ==== Automatic roles processors ====
 <code properties> <code properties>
Line 739: Line 771:
 } }
 </code> </code>
 +
  
 ===== Future development ===== ===== Future development =====
  • by tomiskar