Merge pull request #70 from pymma/kafka

Add clonning of values in fact logging to keep initial values
This commit is contained in:
Nicolas Héron 2020-07-23 09:21:24 +02:00 committed by GitHub
commit be07d716c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 199 additions and 85 deletions

View file

@ -15,6 +15,7 @@ import org.chtijbug.drools.console.middle.DababaseContentInit;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.chtijbug.drools.console.service.util.ApplicationContextProvider;
import org.chtijbug.drools.console.service.wbconnector.KieBusinessCentralConnector;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -60,6 +61,8 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
@Autowired
private ProjectRepository projectRepository;
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Bean
public WebMvcConfigurer corsConfigurer() {
@ -88,6 +91,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
public KieConfigurationData createKieConfigurationData(){
KieConfigurationData kieConfigurationData = new KieConfigurationData();
kieConfigurationData.setKiewbUrl(kiewbUrl);
kieConfigurationData.setName("demo");
return kieConfigurationData;
}
@Override
@ -174,36 +178,52 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
public void InitPlatform(){
dababaseContentInit.initDatabaseIfNecessary();
/**
Map<String,KieContainerResource> kies = new HashMap<>();
KieServerSetup kieServerSetup = kieBusinessCentralConnector.connectToBusinessCentral("nheron", "adminnheron00@");
if (kieServerSetup!= null && kieServerSetup.getContainers()!= null) {
for (KieWorkbench kieWorkbench: kieWorkbenchRepository.findAll()) {
Map<String, KieContainerResource> kies = new HashMap<>();
KieServerSetup kieServerSetup = kieBusinessCentralConnector.connectToBusinessCentral("nheron", "adminnheron00@", kieWorkbench.getName(),kieWorkbench.getExternalUrl());
if (kieServerSetup != null && kieServerSetup.getContainers() != null) {
for (KieContainerResource kieContainerResource : kieServerSetup.getContainers()) {
kies.put(kieContainerResource.getContainerId(), kieContainerResource);
}
}
for (ProjectPersist projectPersist : projectRepository.findAll()){
if (projectPersist.getServerNames().size()>0){
if (!kies.containsKey(projectPersist.getContainerID())){
kieBusinessCentralConnector.createContainer("nheron", "adminnheron00@",projectPersist);
}else{
kieBusinessCentralConnector.updateContainer("nheron", "adminnheron00@",projectPersist,kies.get(projectPersist.getContainerID()));
List<ProjectPersist> projectRepositories = projectRepository.findByKieWorkbench(kieWorkbench);
if (!projectRepositories.isEmpty()){
for (ProjectPersist projectPersist : projectRepository.findAll()) {
if (projectPersist.getServerNames().size() > 0) {
if (!kies.containsKey(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion())) {
kieBusinessCentralConnector.createContainer("nheron", "adminnheron00@", projectPersist,kieWorkbench.getExternalUrl());
} else {
kieBusinessCentralConnector.updateContainer("nheron", "adminnheron00@", projectPersist, kies.get(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion()),kieWorkbench.getExternalUrl());
}
}
}
}
/**
for (ProjectPersist projectPersist : projectRepository.findAll()) {
if (projectPersist.getServerNames().size() > 0) {
if (!kies.containsKey(projectPersist.getContainerID())) {
kieBusinessCentralConnector.createContainer("nheron", "adminnheron00@", projectPersist);
} else {
kieBusinessCentralConnector.updateContainer("nheron", "adminnheron00@", projectPersist, kies.get(projectPersist.getContainerID()));
}
}
}
ServerInstanceKeyList serverInstanceKeyList = kieBusinessCentralConnector.getListInstances("nheron", "adminnheron00@");
if (serverInstanceKeyList!=null){
for (ServerInstanceKey serverInstanceKey : serverInstanceKeyList.getServerInstanceKeys()){
if (serverInstanceKeyList != null) {
for (ServerInstanceKey serverInstanceKey : serverInstanceKeyList.getServerInstanceKeys()) {
String serverInstanceId = serverInstanceKey.getServerInstanceId();
ContainerList containerList = kieBusinessCentralConnector.getListContainers("nheron", "adminnheron00@", serverInstanceId);
System.out.println("coucou");
for (Container container : containerList.getContainers()){
for (Container container : containerList.getContainers()) {
}
}
System.out.println("coucou");
}
System.out.println("coucou");
}
**/
}

View file

@ -128,7 +128,7 @@ public class KieRepositoryService {
return reponseMoteur;
}
public UserConnected login(String url, String username, String password) {
public UserConnected login(String url, String username, String password,String workbenchName) {
User user = userRepository.findByLogin(username);
String completeurl = url + "/chtijbug/login";
@ -161,7 +161,7 @@ public class KieRepositoryService {
userConnected.getProjectResponses().addAll(responseBody.getProjects());
userConnected.getRoles().addAll(responseBody.getRoles());
userConnected.setUserName(username);
userConnected.setKieWorkbenchName(workbenchName);
return userConnected;
} else {
return null;

View file

@ -11,14 +11,8 @@ import org.chtijbug.drools.console.service.model.kie.JobStatus;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.proxy.persistence.json.KieProject;
import org.chtijbug.drools.proxy.persistence.model.ContainerPojoPersist;
import org.chtijbug.drools.proxy.persistence.model.ContainerRuntimePojoPersist;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRepository;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRuntimeRepository;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -60,6 +54,10 @@ public class ProjectPersistService {
@Autowired
private RuntimeRepository runtimeRepository;
@Autowired
private KieWorkbenchRepository workbenchRepository;
@Autowired
private KafkaTemplate<String, ReverseProxyUpdate> kafkaTemplateProxyUpdate;
@ -72,19 +70,22 @@ public class ProjectPersistService {
}
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses) {
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses,String workbenchName) {
KieWorkbench kieWorkbench = workbenchRepository.findByName(workbenchName);
for (PlatformProjectResponse platformProjectResponse : platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()), platformProjectResponse.getBranch());
if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse);
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist = projectRepository.save(projectPersist);
addProjectToSession(projectPersist, true);
} else {
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.getClassNameList().clear();
for (String className : platformProjectResponse.getJavaClasses()) {
projectPersist.getClassNameList().add(className);

View file

@ -50,8 +50,9 @@ public class KieServerRestImpl {
}
//@RequestHeader HttpHeaders headers
@GetMapping(produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public KieServerInfo getInfo() {
@GetMapping(path="/{kieServerName}",produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public KieServerInfo getInfo(
@PathVariable("kieServerName") String kieServerName) {
KieServerInfo kieServerInfo = new KieServerInfo();
kieServerInfo.setServerId(kieserverID);
kieServerInfo.setLocation(controlerLocation);
@ -61,9 +62,10 @@ public class KieServerRestImpl {
return kieServerInfo;
}
@GetMapping(path = "/containers",
@GetMapping(path = "/{kieServerName}/containers",
produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response listContainers(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@RequestParam("groupId") String groupId,
@RequestParam("artifactId") String artifactId,
@RequestParam("version") String version,
@ -80,10 +82,11 @@ public class KieServerRestImpl {
}
@PutMapping(path = "/containers/{" + CONTAINER_ID + "}",
@PutMapping(path = "/{kieServerName}/containers/{" + CONTAINER_ID + "}",
consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response createContainer(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id,
String containerPayload) {
@ -91,61 +94,67 @@ public class KieServerRestImpl {
}
@PutMapping(path = "/containers/{" + CONTAINER_ID + "}/status/activated",
@PutMapping(path = "/{kieServerName}/containers/{" + CONTAINER_ID + "}/status/activated",
consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response activateContainer(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id) {
return null;
}
@PutMapping(path="/containers/{" + CONTAINER_ID + "}/status/deactivated",
@PutMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}/status/deactivated",
consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response deactivateContainer(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id) {
return null;
}
@GetMapping(path="/containers/{" + CONTAINER_ID + "}",
@GetMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}",
consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getContainerInfo(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id) {
return null;
}
@DeleteMapping(path="/containers/{" + CONTAINER_ID + "}",
@DeleteMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}",
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response disposeContainer(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id) {
return null;
}
@GetMapping(path="/containers/{" + CONTAINER_ID + "}/scanner",
@GetMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}/scanner",
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getScannerInfo(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id) {
return null;
}
@PostMapping(path="/containers/{" + CONTAINER_ID + "}/scanner",
@PostMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}/scanner",
consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response updateScanner(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id,
String resourcePayload) {
return null;
}
@GetMapping(path="/containers/{" + CONTAINER_ID + "}/release-id",
@GetMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}/release-id",
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getReleaseId(@RequestHeader HttpHeaders headers,
@PathVariable(CONTAINER_ID) String id) {
@ -153,10 +162,11 @@ public class KieServerRestImpl {
}
@PostMapping(path="/containers/{" + CONTAINER_ID + "}/release-id",
@PostMapping(path="/{kieServerName}/containers/{" + CONTAINER_ID + "}/release-id",
consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
produces={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response updateReleaseId(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@PathVariable(CONTAINER_ID) String id,
String releaseIdPayload,
@RequestParam(value = "resetBeforeUpdate", defaultValue = "false") boolean resetBeforeUpdate) {
@ -164,19 +174,21 @@ public class KieServerRestImpl {
return null;
}
@GetMapping(path="/state",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@GetMapping(path="/{kieServerName}/state",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getServerState(@RequestHeader HttpHeaders headers) {
return null;
}
@GetMapping(path="/readycheck",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response readycheck(@RequestHeader HttpHeaders headers) {
@GetMapping(path="/{kieServerName}/readycheck",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response readycheck(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName) {
return null;
}
@GetMapping(path="/healthcheck",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@GetMapping(path="/{kieServerName}/healthcheck",consumes={MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response healthcheck(@RequestHeader HttpHeaders headers,
@PathVariable("kieServerName") String kieServerName,
@RequestParam(value = "report", defaultValue = "false") boolean report) {
return null;
}

View file

@ -16,6 +16,8 @@ public class UserConnected {
private boolean connected;
private String kieWorkbenchName;
public UserConnected() {
}
@ -40,6 +42,13 @@ public class UserConnected {
this.userPassword = userPassword;
}
public String getKieWorkbenchName() {
return kieWorkbenchName;
}
public void setKieWorkbenchName(String kieWorkbenchName) {
this.kieWorkbenchName = kieWorkbenchName;
}
public List<PlatformProjectResponse> getProjectResponses() {
return projectResponses;

View file

@ -8,6 +8,7 @@ public class KieConfigurationData {
private String password;
private String name;
public String getKiewbUrl() {
@ -34,4 +35,11 @@ public class KieConfigurationData {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View file

@ -51,11 +51,16 @@ public class KieBusinessCentralConnector {
mapper.registerModule(new JaxbAnnotationModule());
}
public String createContainer(String username, String password, ProjectPersist projectPersist){
String completeurl=kiewbUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
public String createContainer(String username, String password, ProjectPersist projectPersist, String externalUrl){
String completeurl;
if (externalUrl==null || externalUrl.isEmpty()) {
completeurl=kiewbUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
}else{
completeurl=externalUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
}
ContainerSpec containerSpec = new ContainerSpec();
containerSpec.setId(projectPersist.getContainerID());
containerSpec.setContainerName(projectPersist.getContainerID());
containerSpec.setId(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion());
containerSpec.setContainerName(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion());
containerSpec.setReleasedId(new ReleaseId());
containerSpec.setStatus(KieContainerStatus.STARTED);
containerSpec.getReleasedId().setArtifactId(projectPersist.getArtifactID());
@ -86,11 +91,16 @@ public class KieBusinessCentralConnector {
}
}
public String updateContainer(String username, String password, ProjectPersist projectPersist, KieContainerResource kieContainerResource){
String completeurl=kiewbUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
public String updateContainer(String username, String password, ProjectPersist projectPersist, KieContainerResource kieContainerResource, String externalUrl){
String completeurl;
if (externalUrl==null || externalUrl.isEmpty()) {
completeurl=kiewbUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
}else{
completeurl=externalUrl+"/controller/management/servers/"+kieserverID+"/containers/"+projectPersist.getContainerID();
}
ContainerSpec containerSpec = new ContainerSpec();
containerSpec.setId(projectPersist.getContainerID());
containerSpec.setContainerName(projectPersist.getContainerID());
containerSpec.setId(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion());
containerSpec.setContainerName(projectPersist.getArtifactID()+"_"+projectPersist.getProjectVersion());
containerSpec.setReleasedId(new ReleaseId());
containerSpec.setStatus(KieContainerStatus.STARTED);
containerSpec.getReleasedId().setArtifactId(projectPersist.getArtifactID());
@ -179,15 +189,24 @@ public class KieBusinessCentralConnector {
return null;
}
}
public KieServerSetup connectToBusinessCentral(String username, String password){
String completeurl=kiewbUrl+"/controller/server/"+kieserverID;
public KieServerSetup connectToBusinessCentral(String username, String password, String kieServerName, String externalUrl){
String completeurl;
if (externalUrl==null || externalUrl.isEmpty()) {
completeurl = kiewbUrl + "/controller/server/" + kieserverID;
}else{
completeurl = externalUrl + "/controller/server/" + kieserverID;
}
KieServerInfo kieServerInfo = new KieServerInfo();
kieServerInfo.setVersion("1.0.0");
kieServerInfo.setServerId("1");
kieServerInfo.setName(kieserverID);
kieServerInfo.setMode(KieServerMode.DEVELOPMENT);
kieServerInfo.setServerId(kieserverID);
kieServerInfo.setLocation(controlerLocation);
if (kieServerName==null || kieServerName.isEmpty()){
kieServerInfo.setLocation(controlerLocation+"/demo");
}else{
kieServerInfo.setLocation(controlerLocation+"/"+kieServerName);
}
kieServerInfo.setCapabilities(new ArrayList<>());
kieServerInfo.getCapabilities().add("BRM");
ResponseEntity<KieServerSetup> response = restTemplateKiewb

View file

@ -124,12 +124,13 @@ public class FormulaireComposant extends VerticalLayout {
UserConnected connected = kieRepositoryService.login(
configKie.getKiewbUrl(),
userConnectedBinder.getBean().getUserName(),
userConnectedBinder.getBean().getUserPassword());
userConnectedBinder.getBean().getUserPassword(),
configKie.getName());
if(connected!=null) {
connected.setConnected(true);
userConnectedService.addUserToSession(connected);
projectPersistService.saveIfnotExist(connected.getProjectResponses());
projectPersistService.saveIfnotExist(connected.getProjectResponses(),configKie.getName());
return true;
}else {

View file

@ -153,7 +153,7 @@ public class DroolsChtijbugRulesExecutionService {
return chtijbugObjectRequest;
} catch (DroolsChtijbugException e) {
e.printStackTrace();
logger.error("FireAllRulesAndStartProcess",e);
}
throw new IllegalStateException("Unable to execute command " + chtijbugObjectRequest.getObjectRequest());

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtime.impl;
import com.rits.cloning.Cloner;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
import org.chtijbug.drools.common.reflection.ReflectionUtils;
@ -380,9 +381,12 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
public Object fireAllRulesAndStartProcess(Object inputObject, String processName) throws DroolsChtijbugException {
DroolsFactObject inputDroolsObject = null;
DroolsFactObject outputDroolsObject = null;
Object inputObjectClone;
if (inputObject != null) {
this.insertByReflection(inputObject);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObject);
Cloner cloner = new Cloner();
inputObjectClone=cloner.deepClone(inputObject);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObjectClone);
}
if (processName != null && processName.length() > 0) {
this.startProcess(processName);
@ -537,9 +541,12 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
DroolsFactObject inputDroolsObject = null;
DroolsFactObject outputDroolsObject = null;
Object inputObjectClone;
if (inputObject != null) {
this.insertByReflection(inputObject);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObject);
Cloner cloner = new Cloner();
inputObjectClone=cloner.deepClone(inputObject);
inputDroolsObject = DroolsFactObjectFactory.createFactObject(inputObjectClone);
}
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("inputObject", inputObject);

View file

@ -52,6 +52,11 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency-->
<dependency>
<groupId>io.github.kostaskougios</groupId>
<artifactId>cloning</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtimeevent.impl.fact;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.SessionContext;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.fact.DeletedFactHistoryEvent;
@ -34,7 +35,8 @@ public class DeleteFactEventStrategy implements AbstractMemoryEventHandlerStrate
Fact fact = new Fact();
fact.setFullClassName(deletedFactHistoryEvent.getDeletedObject().getFullClassName());
fact.setObjectVersion(deletedFactHistoryEvent.getDeletedObject().getObjectVersion());
fact.setRealFact(deletedFactHistoryEvent.getDeletedObject().getRealObject());
Cloner cloner = new Cloner();
fact.setRealFact(cloner.deepClone(deletedFactHistoryEvent.getDeletedObject().getRealObject()));
fact.setModificationDate(deletedFactHistoryEvent.getDateEvent());
fact.setFactType(FactType.DELETED);
RuleExecution existingInSessionRuleExecution = null;

View file

@ -15,6 +15,7 @@
*/
package org.chtijbug.drools.runtimeevent.impl.fact;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.SessionContext;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.fact.InsertedFactHistoryEvent;
@ -33,7 +34,8 @@ public class InsertedFactEventStrategy implements AbstractMemoryEventHandlerStra
Fact fact = new Fact();
fact.setFullClassName(insertedFactHistoryEvent.getInsertedObject().getFullClassName());
fact.setObjectVersion(insertedFactHistoryEvent.getInsertedObject().getObjectVersion());
fact.setRealFact(insertedFactHistoryEvent.getInsertedObject().getRealObject());
Cloner cloner = new Cloner();
fact.setRealFact(cloner.deepClone(insertedFactHistoryEvent.getInsertedObject().getRealObject()));
fact.setModificationDate(insertedFactHistoryEvent.getDateEvent());
fact.setFactType(FactType.INSERTED);
fact.setEventid(insertedFactHistoryEvent.getEventID());

View file

@ -16,6 +16,7 @@
package org.chtijbug.drools.runtimeevent.impl.fact;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.SessionContext;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.fact.UpdatedFactHistoryEvent;
@ -32,17 +33,18 @@ public class UpdatedFactEventStrategy implements AbstractMemoryEventHandlerStrat
@Override
public void handleMessageInternally(HistoryEvent historyEvent, SessionContext sessionContext) {
UpdatedFactHistoryEvent updatedFactHistoryEvent = (UpdatedFactHistoryEvent) historyEvent;
Cloner cloner=new Cloner();
Fact factOldValue = new Fact();
factOldValue.setFullClassName(updatedFactHistoryEvent.getObjectOldValue().getFullClassName());
factOldValue.setObjectVersion(updatedFactHistoryEvent.getObjectOldValue().getObjectVersion());
factOldValue.setRealFact(updatedFactHistoryEvent.getObjectOldValue().getRealObject());
factOldValue.setRealFact(cloner.deepClone(updatedFactHistoryEvent.getObjectOldValue().getRealObject()));
factOldValue.setModificationDate(updatedFactHistoryEvent.getDateEvent());
factOldValue.setFactType(FactType.UPDATED_OLDVALUE);
factOldValue.setEventid(updatedFactHistoryEvent.getEventID());
Fact factNewValue = new Fact();
factNewValue.setFullClassName(updatedFactHistoryEvent.getObjectNewValue().getFullClassName());
factNewValue.setObjectVersion(updatedFactHistoryEvent.getObjectNewValue().getObjectVersion());
factNewValue.setRealFact(updatedFactHistoryEvent.getObjectNewValue().getRealObject());
factNewValue.setRealFact(cloner.deepClone(updatedFactHistoryEvent.getObjectNewValue().getRealObject()));
factNewValue.setModificationDate(updatedFactHistoryEvent.getDateEvent());
factNewValue.setFactType(FactType.UPDATED_NEWVALUE);
factNewValue.setEventid(updatedFactHistoryEvent.getEventID());

View file

@ -16,6 +16,7 @@
package org.chtijbug.drools.runtimeevent.impl.knowledgeSession;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.SessionContext;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.history.HistoryEvent;
@ -31,6 +32,7 @@ public class KnowledgeSessionFireAllRulesAndStartProcessEventStrategy implements
public void handleMessageInternally(HistoryEvent historyEvent, SessionContext sessionContext) {
SessionFireAllRulesAndStartProcess sessionFireAllRulesAndStartProcess = (SessionFireAllRulesAndStartProcess) historyEvent;
SessionExecution existingSessionRutime = sessionContext.getSessionExecution();
if (existingSessionRutime != null) {
if (sessionFireAllRulesAndStartProcess.getInputObject() != null) {
DroolsFactObject inputObject = sessionFireAllRulesAndStartProcess.getInputObject();
@ -38,7 +40,8 @@ public class KnowledgeSessionFireAllRulesAndStartProcessEventStrategy implements
inputFact.setEventid(sessionContext.getSessionExecution().getStartEventID());
inputFact.setFactType(FactType.INPUTDATA);
inputFact.setFullClassName(inputObject.getFullClassName());
inputFact.setRealFact(inputObject.getRealObject());
Cloner cloner=new Cloner();
inputFact.setRealFact(cloner.deepClone(inputObject.getRealObject()));
inputFact.setModificationDate(sessionFireAllRulesAndStartProcess.getDateEvent());
inputFact.setObjectVersion(inputObject.getObjectVersion());
existingSessionRutime.getFacts().add(inputFact);
@ -49,7 +52,8 @@ public class KnowledgeSessionFireAllRulesAndStartProcessEventStrategy implements
outputFact.setEventid(sessionContext.getSessionExecution().getStopEventID());
outputFact.setFactType(FactType.OUTPUTDATA);
outputFact.setFullClassName(outputObject.getFullClassName());
outputFact.setRealFact(outputObject.getRealObject());
Cloner cloner=new Cloner();
outputFact.setRealFact(cloner.deepClone(outputObject.getRealObject()));
outputFact.setModificationDate(sessionFireAllRulesAndStartProcess.getDateEvent());
outputFact.setObjectVersion(outputObject.getObjectVersion());
existingSessionRutime.getFacts().add(outputFact);

View file

@ -16,6 +16,7 @@
package org.chtijbug.drools.runtimeevent.impl.rule;
import com.rits.cloning.Cloner;
import org.chtijbug.drools.SessionContext;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.history.HistoryEvent;
@ -49,10 +50,11 @@ public class BeforeRuleFiredEventStrategy implements AbstractMemoryEventHandlerS
ruleExecution.setRuleName(beforeRuleFiredHistoryEvent.getRule().getRuleName());
ruleExecution.setPackageName(beforeRuleFiredHistoryEvent.getRule().getRulePackageName());
ruleExecution.setStartEventID(beforeRuleFiredHistoryEvent.getEventID());
Cloner cloner = new Cloner();
for (DroolsFactObject droolsFactObject : beforeRuleFiredHistoryEvent.getWhenObjects()) {
if (droolsFactObject != null) {
Fact fact = new Fact();
fact.setRealFact(droolsFactObject.getRealObject());
fact.setRealFact(cloner.deepClone(droolsFactObject.getRealObject()));
fact.setFactType(FactType.WHEN);
fact.setObjectVersion(droolsFactObject.getObjectVersion());
fact.setFullClassName(droolsFactObject.getFullClassName());

View file

@ -20,9 +20,6 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.23.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.23.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.23.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.6.RELEASE" level="project" />
@ -80,6 +77,8 @@
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" />
<orderEntry type="module" module-name="cloning" />
<orderEntry type="library" name="Maven: org.objenesis:objenesis:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.3" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.40.0.20200703" level="project" />

View file

@ -95,6 +95,8 @@
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" />
<orderEntry type="module" module-name="cloning" />
<orderEntry type="library" name="Maven: org.objenesis:objenesis:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.40.0.20200703" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.40.0.20200703" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.40.0.20200703" level="project" />

View file

@ -5,6 +5,7 @@ import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
@ -30,6 +31,8 @@ public class ProjectPersist implements Serializable {
@Indexed
private String uuid;
@DBRef
private KieWorkbench kieWorkbench;
private KieProject projectName;
@ -164,6 +167,18 @@ public class ProjectPersist implements Serializable {
this.branch = branch;
}
public KieWorkbench getKieWorkbench() {
return kieWorkbench;
}
public void setKieWorkbench(KieWorkbench kieWorkbench) {
this.kieWorkbench = kieWorkbench;
}
public void setServerNames(List<String> serverNames) {
this.serverNames = serverNames;
}
public ProjectPersist duplicate(){
ArrayList<String> listServerNames = new ArrayList<String>();
listServerNames.addAll(serverNames);

View file

@ -1,6 +1,7 @@
package org.chtijbug.drools.proxy.persistence.repository;
import org.chtijbug.drools.proxy.persistence.json.KieProject;
import org.chtijbug.drools.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@ -15,5 +16,6 @@ public interface ProjectRepository extends MongoRepository<ProjectPersist, Strin
public ProjectPersist findByDeploymentName(String deploymentName);
public List<ProjectPersist> findByServerNamesIn(List<String> serverNames);
public List<ProjectPersist> findByServerNamesInAndDeploymentName(List<String> serverNames,String deploymentName);
public List<ProjectPersist> findByKieWorkbench(KieWorkbench kieWorkbench);
}

View file

@ -39,6 +39,8 @@
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.1" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="module" module-name="cloning" />
<orderEntry type="library" name="Maven: org.objenesis:objenesis:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.3" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.40.0.20200703" level="project" />