use of org.kie.api.event.rule.MatchCreatedEvent in project jbpm by kiegroup.
the class StateNodeInstance method signalEvent.
public void signalEvent(String type, Object event) {
if ("signal".equals(type)) {
if (event instanceof String) {
for (Connection connection : getStateNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
boolean selected = false;
Constraint constraint = getStateNode().getConstraint(connection);
if (constraint == null) {
if (((String) event).equals(connection.getTo().getName())) {
selected = true;
}
} else if (((String) event).equals(constraint.getName())) {
selected = true;
}
if (selected) {
triggerEvent(ExtendedNodeImpl.EVENT_NODE_EXIT);
removeEventListeners();
((org.jbpm.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
triggerConnection(connection);
return;
}
}
}
} else if (getActivationEventType().equals(type)) {
if (event instanceof MatchCreatedEvent) {
activationCreated((MatchCreatedEvent) event);
}
} else {
super.signalEvent(type, event);
}
}
use of org.kie.api.event.rule.MatchCreatedEvent in project jbpm by kiegroup.
the class ProcessRuntimeImpl method initProcessActivationListener.
private void initProcessActivationListener() {
kruntime.addEventListener(new DefaultAgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
String ruleFlowGroup = ((RuleImpl) event.getMatch().getRule()).getRuleFlowGroup();
if ("DROOLS_SYSTEM".equals(ruleFlowGroup)) {
// new activations of the rule associate with a state node
// signal process instances of that state node
String ruleName = event.getMatch().getRule().getName();
if (ruleName.startsWith("RuleFlowStateNode-")) {
int index = ruleName.indexOf('-', 18);
index = ruleName.indexOf('-', index + 1);
String eventType = ruleName.substring(0, index);
kruntime.queueWorkingMemoryAction(new SignalManagerSignalAction(eventType, event));
} else if (ruleName.startsWith("RuleFlowStateEventSubProcess-") || ruleName.startsWith("RuleFlowStateEvent-") || ruleName.startsWith("RuleFlow-Milestone-") || ruleName.startsWith("RuleFlow-AdHocComplete-") || ruleName.startsWith("RuleFlow-AdHocActivate-")) {
kruntime.queueWorkingMemoryAction(new SignalManagerSignalAction(ruleName, event));
}
}
}
});
kruntime.addEventListener(new DefaultAgendaEventListener() {
public void afterRuleFlowGroupDeactivated(final RuleFlowGroupDeactivatedEvent event) {
if (kruntime instanceof StatefulKnowledgeSession) {
signalManager.signalEvent("RuleFlowGroup_" + event.getRuleFlowGroup().getName() + "_" + ((StatefulKnowledgeSession) kruntime).getIdentifier(), null);
} else {
signalManager.signalEvent("RuleFlowGroup_" + event.getRuleFlowGroup().getName(), null);
}
}
});
}
use of org.kie.api.event.rule.MatchCreatedEvent in project jbpm by kiegroup.
the class ActivityTest method testRuleTaskWithFacts.
@Test
@RequirePersistence(false)
public void testRuleTaskWithFacts() throws Exception {
KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-RuleTaskWithFact.bpmn2", "BPMN2-RuleTask3.drl");
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(new AgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
}
public void matchCancelled(MatchCancelledEvent event) {
}
public void beforeRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
}
public void beforeRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
}
public void beforeMatchFired(BeforeMatchFiredEvent event) {
}
public void agendaGroupPushed(org.kie.api.event.rule.AgendaGroupPushedEvent event) {
}
public void agendaGroupPopped(org.kie.api.event.rule.AgendaGroupPoppedEvent event) {
}
public void afterRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
}
public void afterRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
ksession.fireAllRules();
}
public void afterMatchFired(AfterMatchFiredEvent event) {
}
});
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", "SomeString");
ProcessInstance processInstance = ksession.startProcess("RuleTask", params);
assertProcessInstanceFinished(processInstance, ksession);
params = new HashMap<String, Object>();
try {
processInstance = ksession.startProcess("RuleTask", params);
fail("Should fail");
} catch (Exception e) {
e.printStackTrace();
}
params = new HashMap<String, Object>();
params.put("x", "SomeString");
processInstance = ksession.startProcess("RuleTask", params);
assertProcessInstanceFinished(processInstance, ksession);
}
Aggregations