use of eu.bcvsolutions.idm.core.api.dto.IdmEntityEventDto in project CzechIdMng by bcvsolutions.
the class DefaultIdmEntityEventServiceIntegrationTest method testReferentialIntegrityOwnerIsDeleted.
@Test
@Ignore
@Transactional
public void testReferentialIntegrityOwnerIsDeleted() {
IdmIdentityDto identity = helper.createIdentity((GuardedString) null);
IdmIdentityDto identityTwo = helper.createIdentity((GuardedString) null);
//
IdmEntityEventDto entityEvent = new IdmEntityEventDto();
entityEvent.setOwnerType(entityEventManager.getOwnerType(identity.getClass()));
entityEvent.setEventType("empty");
entityEvent.setOwnerId(identity.getId());
entityEvent.setInstanceId("empty");
entityEvent.setResult(new OperationResultDto(OperationState.BLOCKED));
entityEvent.setPriority(PriorityType.NORMAL);
entityEvent = entityEventService.save(entityEvent);
//
Assert.assertNotNull(entityEvent.getId());
//
IdmEntityStateDto entityState = new IdmEntityStateDto(entityEvent);
entityState.setResult(new OperationResultDto(OperationState.BLOCKED));
entityState = entityStateService.save(entityState);
//
Assert.assertNotNull(entityState.getId());
//
identityService.delete(identityTwo);
//
Assert.assertNotNull(identityService.get(identity));
Assert.assertNotNull(entityEventService.get(entityEvent));
Assert.assertNotNull(entityStateService.get(entityState));
//
identityService.delete(identity);
//
Assert.assertNull(identityService.get(identity));
Assert.assertNull(entityEventService.get(entityEvent));
Assert.assertNull(entityStateService.get(entityState));
}
use of eu.bcvsolutions.idm.core.api.dto.IdmEntityEventDto in project CzechIdMng by bcvsolutions.
the class DefaultIdmEntityEventServiceIntegrationTest method testReferentialIntegrity.
@Test
@Transactional
public void testReferentialIntegrity() {
IdmEntityEventDto entityEvent = new IdmEntityEventDto();
entityEvent.setOwnerType("empty");
entityEvent.setEventType("empty");
entityEvent.setOwnerId(UUID.randomUUID());
entityEvent.setInstanceId("empty");
entityEvent.setResult(new OperationResultDto(OperationState.BLOCKED));
entityEvent.setPriority(PriorityType.NORMAL);
entityEvent = entityEventService.save(entityEvent);
//
Assert.assertNotNull(entityEvent.getId());
//
IdmEntityStateDto entityState = new IdmEntityStateDto(entityEvent);
entityState.setResult(new OperationResultDto(OperationState.BLOCKED));
entityState = entityStateService.save(entityState);
//
Assert.assertNotNull(entityState.getId());
//
entityEventService.delete(entityEvent);
//
Assert.assertNull(entityEventService.get(entityEvent));
Assert.assertNull(entityStateService.get(entityState));
}
use of eu.bcvsolutions.idm.core.api.dto.IdmEntityEventDto in project CzechIdMng by bcvsolutions.
the class DefaultIdmEntityEventServiceIntegrationTest method testReferentialIntegritParentIsDeleted.
@Test(expected = EventDeleteFailedHasChildrenException.class)
@Transactional
public void testReferentialIntegritParentIsDeleted() {
IdmEntityEventDto parentEvent = new IdmEntityEventDto();
parentEvent.setOwnerType("empty");
parentEvent.setEventType("empty");
parentEvent.setOwnerId(UUID.randomUUID());
parentEvent.setInstanceId("empty");
parentEvent.setResult(new OperationResultDto(OperationState.BLOCKED));
parentEvent.setPriority(PriorityType.NORMAL);
parentEvent = entityEventService.save(parentEvent);
//
IdmEntityEventDto entityEvent = new IdmEntityEventDto();
entityEvent.setOwnerType("empty");
entityEvent.setEventType("empty");
entityEvent.setOwnerId(UUID.randomUUID());
entityEvent.setInstanceId("empty");
entityEvent.setResult(new OperationResultDto(OperationState.BLOCKED));
entityEvent.setPriority(PriorityType.NORMAL);
entityEvent.setParent(parentEvent.getId());
entityEvent = entityEventService.save(entityEvent);
//
Assert.assertNotNull(entityEvent.getId());
//
entityEventService.delete(parentEvent);
}
use of eu.bcvsolutions.idm.core.api.dto.IdmEntityEventDto in project CzechIdMng by bcvsolutions.
the class DefaultEntityEventManager method putToQueue.
@SuppressWarnings({ "unchecked", "rawtypes" })
private void putToQueue(IdmEntityEventDto entityEvent) {
if (entityEvent.getPriority() == PriorityType.IMMEDIATE) {
LOG.trace("Event type [{}] for owner with id [{}] will be executed synchronously.", entityEvent.getEventType(), entityEvent.getOwnerId());
executeEvent(entityEvent);
return;
}
if (!eventConfiguration.isAsynchronous()) {
LOG.trace("Event type [{}] for owner with id [{}] will be executed synchronously, asynchronous event processing [{}] is disabled.", entityEvent.getEventType(), entityEvent.getOwnerId(), EventConfiguration.PROPERTY_EVENT_ASYNCHRONOUS_ENABLED);
executeEvent(entityEvent);
return;
}
//
// get enabled processors
final EntityEvent<Identifiable> event = toEvent(entityEvent);
List<EntityEventProcessor> registeredProcessors = context.getBeansOfType(EntityEventProcessor.class).values().stream().filter(enabledEvaluator::isEnabled).filter(processor -> !processor.isDisabled()).filter(processor -> processor.supports(event)).filter(processor -> processor.conditional(event)).sorted(new AnnotationAwareOrderComparator()).collect(Collectors.toList());
if (registeredProcessors.isEmpty()) {
LOG.debug("Event type [{}] for owner with id [{}] will not be executed, no enabled processor is registered.", entityEvent.getEventType(), entityEvent.getOwnerId());
return;
}
//
// evaluate event priority by registered processors
PriorityType priority = evaluatePriority(event, registeredProcessors);
if (priority != null && priority.getPriority() < entityEvent.getPriority().getPriority()) {
entityEvent.setPriority(priority);
}
// registered processors voted about event will be processed synchronously
if (entityEvent.getPriority() == PriorityType.IMMEDIATE) {
LOG.trace("Event type [{}] for owner with id [{}] will be executed synchronously.", entityEvent.getEventType(), entityEvent.getOwnerId());
executeEvent(entityEvent);
return;
}
//
// notification - info about registered (asynchronous) processors
Map<String, Object> parameters = new LinkedHashMap<>();
parameters.put("eventType", entityEvent.getEventType());
parameters.put("ownerId", entityEvent.getOwnerId());
parameters.put("instanceId", entityEvent.getInstanceId());
parameters.put("processors", registeredProcessors.stream().map(DefaultEntityEventManager.this::toDto).collect(Collectors.toList()));
notificationManager.send(CoreModuleDescriptor.TOPIC_EVENT, new IdmMessageDto.Builder().setLevel(NotificationLevel.INFO).setModel(new DefaultResultModel(CoreResultCode.EVENT_ACCEPTED, parameters)).build());
//
// persist event - asynchronous processing
entityEventService.save(entityEvent);
}
use of eu.bcvsolutions.idm.core.api.dto.IdmEntityEventDto in project CzechIdMng by bcvsolutions.
the class DefaultEntityEventManager method scheduleProcessCreated.
/**
* Spring schedule new task after previous task ended (don't run concurrently)
*/
@Scheduled(fixedDelayString = "${" + SchedulerConfiguration.PROPERTY_EVENT_QUEUE_PROCESS + ":" + SchedulerConfiguration.DEFAULT_EVENT_QUEUE_PROCESS + "}")
public void scheduleProcessCreated() {
if (!eventConfiguration.isAsynchronous()) {
// prevent to debug some messages into log - usable for devs
return;
}
// run as system - called from scheduler internally
securityService.setSystemAuthentication();
//
// calculate events to process
String instanceId = configurationService.getInstanceId();
List<IdmEntityEventDto> events = getCreatedEvents(instanceId);
LOG.trace("Events to process [{}] on instance [{}].", events.size(), instanceId);
for (IdmEntityEventDto event : events) {
// @Transactional
context.getBean(this.getClass()).executeEvent(event);
;
}
}
Aggregations