protected boolean matchesSubscription(EventSubscriptionEntity subscription, String type, String eventName) { EnsureUtil.ensureNotNull("event type", type); String subscriptionEventName = subscription.getEventName(); return type.equals(subscription.getEventType()) && ((eventName == null && subscriptionEventName == null) || (eventName != null && eventName.equals(subscriptionEventName))); }
protected boolean matchesSubscription(EventSubscriptionEntity subscription, String type, String eventName) { EnsureUtil.ensureNotNull("event type", type); String subscriptionEventName = subscription.getEventName(); return type.equals(subscription.getEventType()) && ((eventName == null && subscriptionEventName == null) || (eventName != null && eventName.equals(subscriptionEventName))); }
@SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByNameAndExecution(String name, String executionId) { final String query = "selectSignalEventSubscriptionsByNameAndExecution"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventName", name); Set<EventSubscriptionEntity> selectList = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, params)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(executionId.equals(entity.getExecutionId()) && name.equals(entity.getEventName())) { selectList.add(entity); } } return new ArrayList<EventSubscriptionEntity>(selectList); }
@SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByNameAndExecution(String name, String executionId) { final String query = "selectSignalEventSubscriptionsByNameAndExecution"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventName", name); Set<EventSubscriptionEntity> selectList = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, params)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(executionId.equals(entity.getExecutionId()) && name.equals(entity.getEventName())) { selectList.add(entity); } } return new ArrayList<EventSubscriptionEntity>(selectList); }
/** * Find all signal event subscriptions with the given event name and tenant. */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventNameAndTenantId(String eventName, String tenantId) { final String query = "selectSignalEventSubscriptionsByEventNameAndTenantId"; Map<String, Object> parameter = new HashMap<String, Object>(); parameter.put("eventName", eventName); parameter.put("tenantId", tenantId); Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, parameter)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName()) && hasTenantId(entity, tenantId)) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Find all signal event subscriptions with the given event name and tenant. */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventNameAndTenantId(String eventName, String tenantId) { final String query = "selectSignalEventSubscriptionsByEventNameAndTenantId"; Map<String, Object> parameter = new HashMap<String, Object>(); parameter.put("eventName", eventName); parameter.put("tenantId", tenantId); Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, parameter)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName()) && hasTenantId(entity, tenantId)) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Find all signal event subscriptions with the given event name which belongs to the given tenant or no tenant. */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventNameAndTenantIdIncludeWithoutTenantId(String eventName, String tenantId) { final String query = "selectSignalEventSubscriptionsByEventNameAndTenantIdIncludeWithoutTenantId"; Map<String, Object> parameter = new HashMap<String, Object>(); parameter.put("eventName", eventName); parameter.put("tenantId", tenantId); Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, parameter)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName()) && (entity.getTenantId() == null || hasTenantId(entity, tenantId))) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Find all signal event subscriptions with the given event name for any tenant. * * @see #findSignalEventSubscriptionsByEventNameAndTenantId(String, String) */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventName(String eventName) { final String query = "selectSignalEventSubscriptionsByEventName"; Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, configureParameterizedQuery(eventName))); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName())) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Find all signal event subscriptions with the given event name for any tenant. * * @see #findSignalEventSubscriptionsByEventNameAndTenantId(String, String) */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventName(String eventName) { final String query = "selectSignalEventSubscriptionsByEventName"; Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, configureParameterizedQuery(eventName))); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName())) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Find all signal event subscriptions with the given event name which belongs to the given tenant or no tenant. */ @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByEventNameAndTenantIdIncludeWithoutTenantId(String eventName, String tenantId) { final String query = "selectSignalEventSubscriptionsByEventNameAndTenantIdIncludeWithoutTenantId"; Map<String, Object> parameter = new HashMap<String, Object>(); parameter.put("eventName", eventName); parameter.put("tenantId", tenantId); Set<EventSubscriptionEntity> eventSubscriptions = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, parameter)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName()) && (entity.getTenantId() == null || hasTenantId(entity, tenantId))) { eventSubscriptions.add(entity); } } return new ArrayList<EventSubscriptionEntity>(eventSubscriptions); }
/** * Checks if the parameters are the same apart from the execution id */ protected static boolean areEqualEventSubscriptions(EventSubscriptionEntity subscription1, EventSubscriptionEntity subscription2) { return valuesEqual(subscription1.getEventType(), subscription2.getEventType()) && valuesEqual(subscription1.getEventName(), subscription2.getEventName()) && valuesEqual(subscription1.getActivityId(), subscription2.getActivityId()); }
/** * Checks if the parameters are the same apart from the execution id */ protected static boolean areEqualEventSubscriptions(EventSubscriptionEntity subscription1, EventSubscriptionEntity subscription2) { return valuesEqual(subscription1.getEventType(), subscription2.getEventType()) && valuesEqual(subscription1.getEventName(), subscription2.getEventName()) && valuesEqual(subscription1.getActivityId(), subscription2.getActivityId()); }
protected boolean isSameMessageEventSubscriptionAlreadyPresent(EventSubscriptionDeclaration eventSubscription, String tenantId) { // look for subscriptions for the same name in db: List<EventSubscriptionEntity> subscriptionsForSameMessageName = getEventSubscriptionManager() .findEventSubscriptionsByNameAndTenantId(EventType.MESSAGE.name(), eventSubscription.getUnresolvedEventName(), tenantId); // also look for subscriptions created in the session: List<EventSubscriptionEntity> cachedSubscriptions = getDbEntityManager() .getCachedEntitiesByType(EventSubscriptionEntity.class); for (EventSubscriptionEntity cachedSubscription : cachedSubscriptions) { if(eventSubscription.getUnresolvedEventName().equals(cachedSubscription.getEventName()) && hasTenantId(cachedSubscription, tenantId) && !subscriptionsForSameMessageName.contains(cachedSubscription)) { subscriptionsForSameMessageName.add(cachedSubscription); } } // remove subscriptions deleted in the same command subscriptionsForSameMessageName = getDbEntityManager().pruneDeletedEntities(subscriptionsForSameMessageName); // remove subscriptions for different type of event (i.e. remove intermediate message event subscriptions) subscriptionsForSameMessageName = filterSubscriptionsOfDifferentType(eventSubscription, subscriptionsForSameMessageName); return !subscriptionsForSameMessageName.isEmpty(); }
protected boolean isSameMessageEventSubscriptionAlreadyPresent(EventSubscriptionDeclaration eventSubscription, String tenantId) { // look for subscriptions for the same name in db: List<EventSubscriptionEntity> subscriptionsForSameMessageName = getEventSubscriptionManager() .findEventSubscriptionsByNameAndTenantId(EventType.MESSAGE.name(), eventSubscription.getUnresolvedEventName(), tenantId); // also look for subscriptions created in the session: List<EventSubscriptionEntity> cachedSubscriptions = getDbEntityManager() .getCachedEntitiesByType(EventSubscriptionEntity.class); for (EventSubscriptionEntity cachedSubscription : cachedSubscriptions) { if(eventSubscription.getUnresolvedEventName().equals(cachedSubscription.getEventName()) && hasTenantId(cachedSubscription, tenantId) && !subscriptionsForSameMessageName.contains(cachedSubscription)) { subscriptionsForSameMessageName.add(cachedSubscription); } } // remove subscriptions deleted in the same command subscriptionsForSameMessageName = getDbEntityManager().pruneDeletedEntities(subscriptionsForSameMessageName); // remove subscriptions for different type of event (i.e. remove intermediate message event subscriptions) subscriptionsForSameMessageName = filterSubscriptionsOfDifferentType(eventSubscription, subscriptionsForSameMessageName); return !subscriptionsForSameMessageName.isEmpty(); }
@Test @Deployment(resources = SINGLE_CONDITIONAL_START_EVENT_XML) public void testDeploymentCreatesSubscriptions() { // given a deployed process String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey(CONDITIONAL_EVENT_PROCESS).singleResult().getId(); // when List<EventSubscription> eventSubscriptions = runtimeService.createEventSubscriptionQuery().list(); // then assertEquals(1, eventSubscriptions.size()); EventSubscriptionEntity conditionalEventSubscription = (EventSubscriptionEntity) eventSubscriptions.get(0); assertEquals(EventType.CONDITONAL.name(), conditionalEventSubscription.getEventType()); assertEquals(processDefinitionId, conditionalEventSubscription.getConfiguration()); assertNull(conditionalEventSubscription.getEventName()); assertNull(conditionalEventSubscription.getExecutionId()); assertNull(conditionalEventSubscription.getProcessInstanceId()); }
protected boolean matchesSubscription(EventSubscriptionEntity subscription, String type, String eventName) { EnsureUtil.ensureNotNull("event type", type); String subscriptionEventName = subscription.getEventName(); return type.equals(subscription.getEventType()) && ((eventName == null && subscriptionEventName == null) || (eventName != null && eventName.equals(subscriptionEventName))); }
@SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findSignalEventSubscriptionsByNameAndExecution(String name, String executionId) { final String query = "selectSignalEventSubscriptionsByNameAndExecution"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventName", name); Set<EventSubscriptionEntity> selectList = new HashSet<EventSubscriptionEntity>( getDbEntityManager().selectList(query, params)); // add events created in this command (not visible yet in query) for (EventSubscriptionEntity entity : createdSignalSubscriptions) { if(executionId.equals(entity.getExecutionId()) && name.equals(entity.getEventName())) { selectList.add(entity); } } return new ArrayList<EventSubscriptionEntity>(selectList); }
public void testUpdateEventSubscriptionOnDeployment(){ deploymentId = repositoryService.createDeployment() .addClasspathResource(SIGNAL_START_EVENT_PROCESS) .deploy().getId(); EventSubscription eventSubscription = runtimeService.createEventSubscriptionQuery().eventType("signal").singleResult(); assertNotNull(eventSubscription); assertEquals("alert", eventSubscription.getEventName()); // deploy a new version of the process with different signal name String newDeploymentId = repositoryService.createDeployment() .addClasspathResource(SIGNAL_START_EVENT_PROCESS_NEW_VERSION) .deploy().getId(); ProcessDefinition newProcessDefinition = repositoryService.createProcessDefinitionQuery().latestVersion().singleResult(); assertEquals(2, newProcessDefinition.getVersion()); List<EventSubscription> newEventSubscriptions = runtimeService.createEventSubscriptionQuery().eventType("signal").list(); // only one event subscription for the new version of the process definition assertEquals(1, newEventSubscriptions.size()); EventSubscriptionEntity newEventSubscription = (EventSubscriptionEntity) newEventSubscriptions.iterator().next(); assertEquals(newProcessDefinition.getId(), newEventSubscription.getConfiguration()); assertEquals("abort", newEventSubscription.getEventName()); // clean db repositoryService.deleteDeployment(newDeploymentId); }
/** * Checks if the parameters are the same apart from the execution id */ protected static boolean areEqualEventSubscriptions(EventSubscriptionEntity subscription1, EventSubscriptionEntity subscription2) { return valuesEqual(subscription1.getEventType(), subscription2.getEventType()) && valuesEqual(subscription1.getEventName(), subscription2.getEventName()) && valuesEqual(subscription1.getActivityId(), subscription2.getActivityId()); }
@Test @Deployment(resources = SINGLE_CONDITIONAL_START_EVENT_XML) public void testDeploymentCreatesSubscriptions() { // given a deployed process String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey(CONDITIONAL_EVENT_PROCESS).singleResult().getId(); // when List<EventSubscription> eventSubscriptions = runtimeService.createEventSubscriptionQuery().list(); // then assertEquals(1, eventSubscriptions.size()); EventSubscriptionEntity conditionalEventSubscription = (EventSubscriptionEntity) eventSubscriptions.get(0); assertEquals(EventType.CONDITONAL.name(), conditionalEventSubscription.getEventType()); assertEquals(processDefinitionId, conditionalEventSubscription.getConfiguration()); assertNull(conditionalEventSubscription.getEventName()); assertNull(conditionalEventSubscription.getExecutionId()); assertNull(conditionalEventSubscription.getProcessInstanceId()); }