Merge pull request #202 from pymma/kafka

Impossible to post an asset when no asset are present in the project …
This commit is contained in:
Nicolas Héron 2020-11-19 18:36:56 +01:00 committed by GitHub
commit f975620e3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 20 deletions

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtime.impl;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.history.fact.DeletedFactHistoryEvent;
import org.chtijbug.drools.entity.history.fact.FactHistoryEvent;
@ -42,9 +43,11 @@ public class FactHandlerListener implements RuleRuntimeEventListener {
private static Logger logger = LoggerFactory.getLogger(FactHandlerListener.class);
private final RuleBaseStatefulSession ruleBaseSession;
private Cloner cloner;
public FactHandlerListener(RuleBaseStatefulSession ruleBaseSession) {
public FactHandlerListener(RuleBaseStatefulSession ruleBaseSession, Cloner cloner) {
this.ruleBaseSession = ruleBaseSession;
this.cloner=cloner;
}
@Override
@ -54,9 +57,9 @@ public class FactHandlerListener implements RuleRuntimeEventListener {
//____ Updating reference into the facts map from knowledge Session
//((RuleTerminalNode)((RuleTerminalNodeLeftTuple)((org.drools.common.DefaultFactHandle)event.getFactHandle()).getFirstLeftTuple()).getSink()).getRule().getRuleFlowGroup()
FactHandle f = event.getFactHandle();
Object newObject = event.getObject();
Object newObject = cloner.deepClone(event.getObject());
DroolsFactObject ff = DroolsFactObjectFactory.createFactObject(newObject);
ruleBaseSession.setData(f, newObject, ff);
ruleBaseSession.setData(f, event.getObject(), ff);
//____ Adding the Insert Event from the History Container
InsertedFactHistoryEvent insertFactHistoryEvent = new InsertedFactHistoryEvent(this.ruleBaseSession.nextEventId(), ff, this.ruleBaseSession.getRuleBaseID(), this.ruleBaseSession.getSessionId());
if (insertFactHistoryEvent.getRuleName() == null && event instanceof ObjectInsertedEventImpl) {
@ -77,12 +80,11 @@ public class FactHandlerListener implements RuleRuntimeEventListener {
try {
//____ Updating FactHandle Object reference from the knwoledge session
FactHandle f = event.getFactHandle();
Object oldValue = event.getOldObject();
Object newValue = event.getObject();
Object newValue = cloner.deepClone(event.getObject());
DroolsFactObject factOldValue = this.ruleBaseSession.getLastFactObjectVersion(oldValue);
DroolsFactObject factOldValue = this.ruleBaseSession.getLastFactObjectVersion(event.getOldObject());
DroolsFactObject factNewValue = DroolsFactObjectFactory.createFactObject(newValue, factOldValue.getNextObjectVersion());
ruleBaseSession.setData(f, newValue, factNewValue);
ruleBaseSession.setData(f, event.getObject(), factNewValue);
//____ Adding the Update Event from the History Container
UpdatedFactHistoryEvent updatedFactHistoryEvent = new UpdatedFactHistoryEvent(this.ruleBaseSession.nextEventId(), factOldValue, factNewValue, this.ruleBaseSession.getRuleBaseID(), this.ruleBaseSession.getSessionId());
if (updatedFactHistoryEvent.getRuleName() == null && event instanceof ObjectUpdatedEventImpl) {
@ -101,9 +103,9 @@ public class FactHandlerListener implements RuleRuntimeEventListener {
try {
//____ Removing FactHandle from the KnowledgeBase
FactHandle f = event.getFactHandle();
Object newObject = event.getOldObject();
DroolsFactObject deletedFact = this.ruleBaseSession.getLastFactObjectVersion(newObject);
ruleBaseSession.unsetData(f, newObject);
Object deletedObject = cloner.deepClone(event.getOldObject());
DroolsFactObject deletedFact = this.ruleBaseSession.getLastFactObjectVersion(event.getOldObject());
ruleBaseSession.unsetData(f, event.getOldObject());
//____ Adding a Delete Event from the HistoryContainer
DeletedFactHistoryEvent deleteFactEvent = new DeletedFactHistoryEvent(this.ruleBaseSession.nextEventId(), deletedFact, this.ruleBaseSession.getRuleBaseID(), this.ruleBaseSession.getSessionId());

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtime.impl;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.entity.DroolsJbpmVariableObject;
import org.chtijbug.drools.entity.DroolsNodeInstanceObject;
import org.chtijbug.drools.entity.DroolsProcessInstanceObject;
@ -37,8 +38,10 @@ public class ProcessHandlerListener implements ProcessEventListener {
*/
private final RuleBaseStatefulSession ruleBaseSession;
public ProcessHandlerListener(RuleBaseStatefulSession ruleBaseSession) {
private Cloner cloner;
public ProcessHandlerListener(RuleBaseStatefulSession ruleBaseSession, Cloner cloner) {
this.ruleBaseSession = ruleBaseSession;
this.cloner = cloner;
}
@Override

View file

@ -87,15 +87,16 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
private HistoryListener historyListener;
private EventCounter eventCounter = EventCounter.newCounter();
private Cloner cloner = new Cloner(new ObjenesisInstantiationStrategy());
public RuleBaseStatefulSession(Long ruleBaseID, Long sessionId, KieSession knowledgeSession, int maxNumberRuleToExecute, HistoryListener historyListener) throws DroolsChtijbugException {
this.ruleBaseID = ruleBaseID;
this.sessionId = sessionId;
this.knowledgeSession = knowledgeSession;
this.maxNumberRuleToExecute = maxNumberRuleToExecute;
this.factListener = new FactHandlerListener(this);
this.ruleHandlerListener = new RuleHandlerListener(this);
this.processHandlerListener = new ProcessHandlerListener(this);
this.factListener = new FactHandlerListener(this,cloner);
this.ruleHandlerListener = new RuleHandlerListener(this,cloner);
this.processHandlerListener = new ProcessHandlerListener(this,cloner);
this.historyContainer = new HistoryContainer(sessionId, historyListener);
this.listFactObjects = new HashMap<>();
this.listFact = new HashMap<>();
@ -389,7 +390,7 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
Thread currentThread = Thread.currentThread();
ClassLoader old = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(inputObject.getClass().getClassLoader());
Cloner cloner = new Cloner(new ObjenesisInstantiationStrategy());
inputObjectClone=cloner.deepClone(inputObject);
currentThread.setContextClassLoader(old);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObjectClone);
@ -549,7 +550,6 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
Object inputObjectClone;
if (inputObject != null) {
this.insertByReflection(inputObject);
Cloner cloner = new Cloner();
inputObjectClone=cloner.deepClone(inputObject);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObjectClone);
}

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtime.impl;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.DroolsRuleFlowGroupObject;
import org.chtijbug.drools.entity.DroolsRuleObject;
@ -35,6 +36,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//import org.drools.core.common.InternalFactHandle;
@ -66,14 +68,17 @@ public class RuleHandlerListener extends DefaultAgendaEventListener {
*/
private int maxNumberRuleToExecute;
private Cloner cloner;
/**
* IfMaxNumberRulewasReached
*/
private boolean maxNumerExecutedRulesReached = false;
public RuleHandlerListener(RuleBaseStatefulSession ruleBaseSession) {
public RuleHandlerListener(RuleBaseStatefulSession ruleBaseSession, Cloner cloner) {
this.ruleBaseSession = ruleBaseSession;
this.maxNumberRuleToExecute = ruleBaseSession.getMaxNumberRuleToExecute();
this.cloner=cloner;
}
public boolean isMaxNumerExecutedRulesReached() {
@ -96,14 +101,18 @@ public class RuleHandlerListener extends DefaultAgendaEventListener {
if (h instanceof DefaultFactHandle) {
InternalFactHandle defaultFactHandle = (InternalFactHandle) h;
//System.out.println(defaultFactHandle.toString());
Object object = defaultFactHandle.getObject();
Object object = cloner.deepClone(defaultFactHandle.getObject());
DroolsFactObject sourceFactObject = ruleBaseSession.getLastFactObjectVersionFromFactHandle(h);
if (sourceFactObject==null){
try {
if (object instanceof List){
List lst = (List)object;
sourceFactObject = new DroolsFactObject(lst.toArray(), 1);
}if (object instanceof InitialFactImpl){
List clonedList=new ArrayList();
for (Object l : lst){
clonedList.add(cloner.deepClone(l));
}
sourceFactObject = new DroolsFactObject(clonedList.toArray(), 1);
}else if (object instanceof InitialFactImpl){
//InitialFactImpl initialFact = (InitialFactImpl)object;
// Do Nothing for the time
}