refactoring and adding camel business proxy

This commit is contained in:
Nicolas Héron 2018-12-29 23:05:41 +01:00
commit a474dcf891
876 changed files with 1692 additions and 1038 deletions

View file

@ -0,0 +1,13 @@
package org.chtijbug;
public class Test {
String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

View file

@ -0,0 +1,85 @@
package org.chtijbug.drools.runtime.impl;
import com.thoughtworks.xstream.XStream;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import java.io.*;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
/**
* Created with IntelliJ IDEA.
* User: Samuel
* Date: 26/11/12
* Time: 12:21
* To change this template use File | Settings | File Templates.
*/
public class RuleBasePackageTestCase {
private static String readFileAsString(String filePath)
throws java.io.IOException {
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(
new FileReader(filePath));
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
@Before
public void justBefore() {
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
}
@Test
@Ignore
public void testXStreamSerialization() {
try {
XStream xstream = new XStream();
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
String pkgXML = xstream.toXML(ruleBasePackage);
FileWriter fstream = new FileWriter("/tmp/chtijbug-rule-cache");
BufferedWriter out = new BufferedWriter(fstream);
out.write(pkgXML);
out.close();
} catch (IOException ex) {
Assert.fail(ex.getMessage());
} catch (DroolsChtijbugException e) {
Assert.fail(e.getMessage());
}
}
@Test
@Ignore
public void testXStreamDeserialization() {
String ruleBaseXML = null;
try {
ruleBaseXML = readFileAsString("/tmp/chtijbug-rule-cache");
if (ruleBaseXML == null)
fail();
XStream xStream = new XStream();
RuleBaseSingleton ruleBasePackage = (RuleBaseSingleton) xStream.fromXML(ruleBaseXML);
assertNotNull(ruleBasePackage);
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
fail();
}
}
}

View file

@ -0,0 +1,103 @@
package org.chtijbug.drools.runtime.impl;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.*;
/**
* Created with IntelliJ IDEA.
* User: samuel
* Date: 28/09/12
* Time: 17:55
*/
public class RuleBaseStatefulSessionTestCase {
private static RuleBaseSingleton ruleBase;
private RuleBaseStatefulSession session;
private FileKnowledgeResource fibonacciFile;
@Before
public void before() throws Exception {
fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
ruleBase = new RuleBaseSingleton(1L, 5000, null, "com.pymmasoftware.test", "fibonacci", "1.0.0-SNAPSHOT");
// TODO Créer une kbase
ruleBase.createKBase(Arrays.asList(fibonacciFile));
// TODO créer une session à partir dela KBase
session = (RuleBaseStatefulSession) ruleBase.createRuleBaseSession();
}
@Test
public void runInsertByReflection() throws Exception {
DummyFact sibling = new DummyFact("sibling");
DummyFact item1 = new DummyFact("items 1");
DummyFact item2 = new DummyFact("items 2");
DummyFact root = new DummyFact("ROOT", sibling, Arrays.asList(item1, item2));
try {
//_____ Execute reflection insertion
session.insertByReflection(root);
//_____ Assert that all fact handle have been correctly created
Collection<DroolsFactObject> droolsFactObjects = session.listLastVersionObjects();
assertEquals(4, droolsFactObjects.size());
DroolsFactObject rootFactObject = session.getLastFactObjectVersion(root);
assertNotNull(rootFactObject);
DroolsFactObject siblingFactObject = session.getLastFactObjectVersion(sibling);
assertNotNull(siblingFactObject);
DroolsFactObject item1FactObject = session.getLastFactObjectVersion(item1);
assertNotNull(item1FactObject);
DroolsFactObject item2FactObject = session.getLastFactObjectVersion(item2);
assertNotNull(item2FactObject);
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
public class DummyFact {
private String name;
private DummyFact property;
private List<DummyFact> listOfFacts;
DummyFact(String name) {
this.name = name;
}
DummyFact(String name, DummyFact property) {
this(name);
this.property = property;
}
DummyFact(String name, DummyFact property, List<DummyFact> listOfFacts) {
this(name, property);
this.listOfFacts = listOfFacts;
}
public String getName() {
return name;
}
public DummyFact getProperty() {
return property;
}
public List<DummyFact> getListOfFacts() {
return listOfFacts;
}
}
}

View file

@ -0,0 +1,79 @@
package org.chtijbug.drools.runtime.resource;
/**
* Created with IntelliJ IDEA.
* User: samuel
* Date: 26/09/12
* Time: 18:01
*/
public class WorkbenchResourceTestCase {
/**
@Test public void testRemoveTrailingSlash() {
String expected = "//String";
String toEval = WorkbenchResource.removeTrailingSlash("//String/");
assertEquals("Remove trailind '/' operation failed", expected, toEval);
}
@Test public void testGetWebResourceUrl() {
WorkbenchResource toTest = new WorkbenchResource("http://localhost:8080/", "drools-guvnor", "amag/", "LATEST", "tomcat", "tomcat");
String expected = "http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/amag/LATEST";
String toEval = toTest.getWebResourceUrl();
assertEquals("Expected webresource url not match", expected, toEval);
}
@Test public void testGetResource() {
WorkbenchResource toTest = new WorkbenchResource("http://localhost:8080/", "drools-guvnor", "amag/", "LATEST", "tomcat", "tomcat");
final String expectedChangeSet = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<change-set xmlns=\"http://drools.org/drools-5.0/change-set\"" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
" xsi:schemaLocation=\"http://drools.org/drools-5.0/change-set changeset-1.0.0.xsd\">" +
" <add>" +
" <resource" +
" type=\"PKG\"" +
" source=\"http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/amag/LATEST\"" +
" basicAuthentication=\"enabled\"" +
" username=\"tomcat\"" +
" password=\"tomcat\">" +
" </resource>" +
" </add>" +
"</change-set>";
try {
Resource toEval = toTest.getResource();
InputStreamReader reader = new InputStreamReader(toEval.getInputStream());
BufferedReader bufferedReader = new BufferedReader(reader);
StringWriter writer = new StringWriter();
String line;
while ( (line=bufferedReader.readLine()) != null ){
writer.write(line);
}
String generatedChangeSet = writer.toString();
assertEquals("Generated Change set does not match with the expected one.", expectedChangeSet, generatedChangeSet);
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
public static String prettyFormat(String input, int indent) {
try {
Source xmlInput = new StreamSource(new StringReader(input));
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", indent);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);
return xmlOutput.getWriter().toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
*/
}

View file

@ -0,0 +1,123 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.runtime.*;
import org.junit.*;
import java.math.BigDecimal;
import static org.junit.Assert.assertTrue;
/**
* @author nheron
*/
public class DroolsFactObjectFactoryTest {
public DroolsFactObjectFactoryTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
// TODO add test methods here.
// The methods must be annotated with annotation @Test. For example:
//
@Test
public void TestIntrosepct() {
TestPojoOne underTest = new TestPojoOne();
DroolsFactObject fact = DroolsFactObjectFactory.createFactObject(underTest, 1);
assertTrue(fact.getListfactObjectAttributes().size() == 7);
}
@Test
@Ignore
public void TestIntrosepct2() throws DroolsChtijbugException {
RuleBasePackage kbase = RuleBaseBuilder.createRuleBasePackage(new Long("1"), null);
RuleBaseSession session = kbase.createRuleBaseSession(2000, null, null);
}
public class TestPojoOne {
private Long at01 = new Long(12);
private String at02 = "hello";
private Integer at03 = new Integer("12");
private BigDecimal at04 = new BigDecimal(12.04);
private int at10 = 1;
private short at11 = 1;
private double at12 = 12.99;
public Long getAt01() {
return at01;
}
public void setAt01(Long at01) {
this.at01 = at01;
}
public String getAt02() {
return at02;
}
public void setAt02(String at02) {
this.at02 = at02;
}
public Integer getAt03() {
return at03;
}
public void setAt03(Integer at03) {
this.at03 = at03;
}
public BigDecimal getAt04() {
return at04;
}
public void setAt04(BigDecimal at04) {
this.at04 = at04;
}
public int getAt10() {
return at10;
}
public void setAt10(int at10) {
this.at10 = at10;
}
public short getAt11() {
return at11;
}
public void setAt11(short at11) {
this.at11 = at11;
}
public double getAt12() {
return at12;
}
public void setAt12(double at12) {
this.at12 = at12;
}
}
}

View file

@ -0,0 +1,157 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.fact.DeletedFactHistoryEvent;
import org.chtijbug.drools.entity.history.fact.InsertedFactHistoryEvent;
import org.chtijbug.drools.entity.history.fact.UpdatedFactHistoryEvent;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.junit.*;
/**
* Created by IntelliJ IDEA.
* Date: 26/09/12
* Time: 14:31
* To change this template use File | Settings | File Templates.
*/
public class FactHandlerListernerTestTest {
static RuleBaseSession session;
static RuleBasePackage ruleBasePackage;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Before
public void justBefore() {
// insert1File = FileKnowledgeResource.createDRLClassPathResource("insert1.drl");
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
session.dispose();
}
@Test
public void test1ObjectInserted() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 1);
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(0);
if (event instanceof InsertedFactHistoryEvent) {
Assert.assertEquals(1, 1);
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
Assert.assertEquals(session.getSessionId(), event.getSessionId());
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) event;
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
}
}
}
}
@Test
public void test1ObjectUpdated() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
newObject.setValue(100);
session.updateObject(newObject);
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
if (event instanceof UpdatedFactHistoryEvent) {
Assert.assertEquals(1, 1);
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
Assert.assertEquals(session.getSessionId(), event.getSessionId());
UpdatedFactHistoryEvent updatedFactHistoryEvent = (UpdatedFactHistoryEvent) event;
DroolsFactObject droolsFactObject = updatedFactHistoryEvent.getObjectOldValue();
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
}
}
DroolsFactObject droolsFactObject2 = updatedFactHistoryEvent.getObjectNewValue();
Assert.assertEquals(droolsFactObject2.getObjectVersion(), 1);
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject2.getListfactObjectAttributes()) {
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "100");
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
}
}
}
}
@Test
public void retracted() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
session.retractObject(newObject);
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
if (event instanceof DeletedFactHistoryEvent) {
Assert.assertEquals(1, 1);
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
Assert.assertEquals(session.getSessionId(), event.getSessionId());
DeletedFactHistoryEvent deletedFactHistoryEvent = (DeletedFactHistoryEvent) event;
DroolsFactObject droolsFactObject = deletedFactHistoryEvent.getDeletedObject();
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
}
}
}
}
@Test
public void test1RuleFired() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
session = ruleBasePackage.createRuleBaseSession();
session.fireAllRules();
Assert.assertEquals(session.listRules().size(), 1);
Assert.assertEquals(session.listLastVersionObjects().size(), 1);
for (DroolsFactObject droolsFactObject : session.listLastVersionObjects()) {
Assert.assertEquals(droolsFactObject.getObjectVersion(), 0);
Assert.assertEquals(droolsFactObject.getFullClassName(), "org.chtijbug.drools.runtime.test.Fibonacci");
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
}
}
}
}
}

View file

@ -0,0 +1,178 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.DroolsFactObject;
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.fact.*;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by IntelliJ IDEA.
* Date: 17/02/14
* Time: 15:37
* To change this template use File | Settings | File Templates.
*/
public class FactHistoryEventTest {
@Before
public void justBefore() {
//fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
}
@Test
public void KnowledgeSessionFact() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(1);
ruleBaseSession.insertObject(fibonacci);
assertThat(historyEvents).hasSize(6);
assertThat(historyEvents.get(5)).isInstanceOfAny(InsertedFactHistoryEvent.class);
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) historyEvents.get(5);
assertThat(insertedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(insertedFactHistoryEvent.getEventID()).isEqualTo(2);
assertThat(insertedFactHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(insertedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
assertThat(droolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(droolsFactObject.getObjectVersion()).isEqualTo(0);
assertThat(droolsFactObject.getRealObject() instanceof Fibonacci);
assertThat(droolsFactObject.getListfactObjectAttributes()).hasSize(2);
DroolsFactObjectAttribute droolsFactObjectAttribute1 = droolsFactObject.getListfactObjectAttributes().get(0);
assertThat(droolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
assertThat(droolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
assertThat(droolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
DroolsFactObjectAttribute droolsFactObjectAttribute2 = droolsFactObject.getListfactObjectAttributes().get(1);
assertThat(droolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
assertThat(droolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
assertThat(droolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
fibonacci.setValue(-2);
ruleBaseSession.updateObject(fibonacci);
assertThat(historyEvents).hasSize(7);
assertThat(historyEvents.get(6) instanceof UpdatedFactHistoryEvent);
UpdatedFactHistoryEvent updatedFactHistoryEvent = (UpdatedFactHistoryEvent) historyEvents.get(6);
assertThat(updatedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(updatedFactHistoryEvent.getEventID()).isEqualTo(3);
assertThat(updatedFactHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(updatedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
DroolsFactObject oldDroolsFactObject = updatedFactHistoryEvent.getObjectOldValue();
assertThat(oldDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(oldDroolsFactObject.getObjectVersion()).isEqualTo(0);
assertThat(oldDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
assertThat(oldDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
DroolsFactObjectAttribute oldDroolsFactObjectAttribute1 = oldDroolsFactObject.getListfactObjectAttributes().get(0);
assertThat(oldDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
assertThat(oldDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
assertThat(oldDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
DroolsFactObjectAttribute oldDroolsFactObjectAttribute2 = oldDroolsFactObject.getListfactObjectAttributes().get(1);
assertThat(oldDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
assertThat(oldDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
assertThat(oldDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
DroolsFactObject newDroolsFactObject = updatedFactHistoryEvent.getObjectNewValue();
assertThat(newDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(newDroolsFactObject.getObjectVersion()).isEqualTo(1);
assertThat(newDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
assertThat(newDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
DroolsFactObjectAttribute newDroolsFactObjectAttribute1 = newDroolsFactObject.getListfactObjectAttributes().get(0);
assertThat(newDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
assertThat(newDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
assertThat(newDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
DroolsFactObjectAttribute newDroolsFactObjectAttribute2 = newDroolsFactObject.getListfactObjectAttributes().get(1);
assertThat(newDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
assertThat(newDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-2");
assertThat(newDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
ruleBaseSession.retractObject(fibonacci);
assertThat(historyEvents).hasSize(8);
assertThat(historyEvents.get(7)).isInstanceOf(DeletedFactHistoryEvent.class);
DeletedFactHistoryEvent deletedFactHistoryEvent = (DeletedFactHistoryEvent) historyEvents.get(7);
assertThat(deletedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(deletedFactHistoryEvent.getEventID()).isEqualTo(4);
assertThat(deletedFactHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(deletedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
DroolsFactObject deletedDroolsFactObject = deletedFactHistoryEvent.getDeletedObject();
assertThat(deletedDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(deletedDroolsFactObject.getObjectVersion()).isEqualTo(1);
assertThat(deletedDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
assertThat(deletedDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
DroolsFactObjectAttribute deletedDroolsFactObjectAttribute1 = deletedDroolsFactObject.getListfactObjectAttributes().get(0);
assertThat(deletedDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
assertThat(deletedDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
assertThat(deletedDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
DroolsFactObjectAttribute deletedDroolsFactObjectAttribute2 = deletedDroolsFactObject.getListfactObjectAttributes().get(1);
assertThat(deletedDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
assertThat(deletedDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-2");
assertThat(deletedDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
}
@Test
public void KnowledgeSessionFactByReflection() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(1);
ruleBaseSession.insertByReflection(fibonacci);
assertThat(historyEvents.size() == 8);
assertThat(historyEvents.get(5)).isInstanceOf(InsertedByReflectionFactStartHistoryEvent.class);
InsertedByReflectionFactStartHistoryEvent insertedByReflectionFactHistoryEvent = (InsertedByReflectionFactStartHistoryEvent) historyEvents.get(5);
assertThat(insertedByReflectionFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(insertedByReflectionFactHistoryEvent.getEventID()).isEqualTo(2);
assertThat(insertedByReflectionFactHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(insertedByReflectionFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
assertThat(historyEvents.get(6)).isInstanceOf(InsertedFactHistoryEvent.class);
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) historyEvents.get(6);
assertThat(insertedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(insertedFactHistoryEvent.getEventID()).isEqualTo(3);
assertThat(insertedFactHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(insertedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
assertThat(droolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(droolsFactObject.getObjectVersion()).isEqualTo(0);
assertThat(droolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
assertThat(droolsFactObject.getListfactObjectAttributes()).hasSize(2);
DroolsFactObjectAttribute droolsFactObjectAttribute1 = droolsFactObject.getListfactObjectAttributes().get(0);
assertThat(droolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
assertThat(droolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
assertThat(droolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
DroolsFactObjectAttribute droolsFactObjectAttribute2 = droolsFactObject.getListfactObjectAttributes().get(1);
assertThat(droolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
assertThat(droolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
assertThat(droolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
assertThat(historyEvents.get(7)).isInstanceOf(InsertedByReflectionFactEndHistoryEvent.class);
InsertedByReflectionFactEndHistoryEvent insertedByReflectionFactEndHistoryEvent = (InsertedByReflectionFactEndHistoryEvent) historyEvents.get(7);
assertThat(insertedByReflectionFactEndHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(insertedByReflectionFactEndHistoryEvent.getEventID()).isEqualTo(4);
assertThat(insertedByReflectionFactEndHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(insertedByReflectionFactEndHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
}
}

View file

@ -0,0 +1,46 @@
/**
*
*/
package org.chtijbug.drools.runtime.test;
/**
* @author Bertrand Gressier
* @date 12 déc. 2011
* <p/>
* <p/>
* Source: http://legacy.drools.codehaus.org/Fibonacci+Example
*/
public class Fibonacci {
private int sequence;
private long value;
public Fibonacci(int sequence) {
this.sequence = sequence;
this.value = -1;
}
public Fibonacci(int sequence, long value) {
this.sequence = sequence;
this.value = value;
}
public Fibonacci() {
}
public int getSequence() {
return this.sequence;
}
public long getValue() {
return this.value;
}
public void setValue(long value) {
this.value = value;
}
@Override
public String toString() {
return "Fibonacci(" + this.sequence + "/" + this.value + ")";
}
}

View file

@ -0,0 +1,167 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseCreateSessionEvent;
import org.chtijbug.drools.entity.history.session.SessionCreatedEvent;
import org.chtijbug.drools.entity.history.session.SessionDisposedEvent;
import org.chtijbug.drools.entity.history.session.SessionFireAllRulesBeginEvent;
import org.chtijbug.drools.entity.history.session.SessionFireAllRulesEndEvent;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by IntelliJ IDEA.
* Date: 17/02/14
* Time: 15:09
* To change this template use File | Settings | File Templates.
*/
public class KnowledgeBaseHistoryEventTest {
@Before
public void justBefore() {
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
}
@Test
public void KnowledgeSessionEventOneSession() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
assertThat(historyEvents).hasSize(5);
assertThat(historyEvents.get(3)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent = (KnowledgeBaseCreateSessionEvent) historyEvents.get(3);
assertThat(knowledgeBaseCreateSessionEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(knowledgeBaseCreateSessionEvent.getEventID()).isEqualTo(4);
assertThat(knowledgeBaseCreateSessionEvent.getSessionId()).isEqualTo(1);
assertThat(knowledgeBaseCreateSessionEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(historyEvents.get(4)).isInstanceOf(SessionCreatedEvent.class);
SessionCreatedEvent sessionCreatedEvent = (SessionCreatedEvent) historyEvents.get(4);
assertThat(sessionCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionCreatedEvent.getEventID()).isEqualTo(1);
assertThat(sessionCreatedEvent.getSessionId()).isEqualTo(1);
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
ruleBaseSession.dispose();
assertThat(historyEvents).hasSize(6);
assertThat(historyEvents.get(5)).isInstanceOf(SessionDisposedEvent.class);
SessionDisposedEvent sessionDisposedEvent = (SessionDisposedEvent) historyEvents.get(5);
assertThat(sessionDisposedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionDisposedEvent.getEventID()).isEqualTo(2);
assertThat(sessionDisposedEvent.getSessionId()).isEqualTo(1);
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
}
@Test
public void KnowledgeSessionEventTwoSession() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
assertThat(historyEvents).hasSize(5);
assertThat(historyEvents.get(3)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent = (KnowledgeBaseCreateSessionEvent) historyEvents.get(3);
assertThat(knowledgeBaseCreateSessionEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(knowledgeBaseCreateSessionEvent.getEventID()).isEqualTo(4);
assertThat(knowledgeBaseCreateSessionEvent.getSessionId()).isEqualTo(1);
assertThat(knowledgeBaseCreateSessionEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(historyEvents.get(4)).isInstanceOf(SessionCreatedEvent.class);
SessionCreatedEvent sessionCreatedEvent = (SessionCreatedEvent) historyEvents.get(4);
assertThat(sessionCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionCreatedEvent.getEventID()).isEqualTo(1);
assertThat(sessionCreatedEvent.getSessionId()).isEqualTo(1);
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
RuleBaseSession ruleBaseSession2 = ruleBasePackage.createRuleBaseSession();
assertThat(historyEvents).hasSize(7);
assertThat(historyEvents.get(5)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent2 = (KnowledgeBaseCreateSessionEvent) historyEvents.get(5);
assertThat(knowledgeBaseCreateSessionEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(knowledgeBaseCreateSessionEvent2.getEventID()).isEqualTo(5);
assertThat(knowledgeBaseCreateSessionEvent2.getSessionId()).isEqualTo(2);
assertThat(knowledgeBaseCreateSessionEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(historyEvents.get(6)).isInstanceOf(SessionCreatedEvent.class);
SessionCreatedEvent sessionCreatedEvent2 = (SessionCreatedEvent) historyEvents.get(6);
assertThat(sessionCreatedEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionCreatedEvent2.getEventID()).isEqualTo(1);
assertThat(sessionCreatedEvent2.getSessionId()).isEqualTo(2);
assertThat(sessionCreatedEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
ruleBaseSession1.dispose();
assertThat(historyEvents).hasSize(8);
assertThat(historyEvents.get(7)).isInstanceOf(SessionDisposedEvent.class);
SessionDisposedEvent sessionDisposedEvent = (SessionDisposedEvent) historyEvents.get(7);
assertThat(sessionDisposedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionDisposedEvent.getEventID()).isEqualTo(2);
assertThat(sessionDisposedEvent.getSessionId()).isEqualTo(1);
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
ruleBaseSession2.dispose();
assertThat(historyEvents).hasSize(9);
assertThat(historyEvents.get(8)).isInstanceOf(SessionDisposedEvent.class);
SessionDisposedEvent sessionDisposedEvent2 = (SessionDisposedEvent) historyEvents.get(8);
assertThat(sessionDisposedEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionDisposedEvent2.getEventID()).isEqualTo(2);
assertThat(sessionDisposedEvent2.getSessionId()).isEqualTo(2);
assertThat(sessionDisposedEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
}
@Test
public void KnowledgeBaseFireAllRules() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(1);
ruleBaseSession1.insertObject(fibonacci);
ruleBaseSession1.fireAllRules();
assertThat(historyEvents).hasSize(11);
assertThat(historyEvents.get(6)).isInstanceOf(SessionFireAllRulesBeginEvent.class);
SessionFireAllRulesBeginEvent sessionFireAllRulesBeginEvent = (SessionFireAllRulesBeginEvent) historyEvents.get(6);
assertThat(sessionFireAllRulesBeginEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionFireAllRulesBeginEvent.getEventID()).isEqualTo(3);
assertThat(sessionFireAllRulesBeginEvent.getSessionId()).isEqualTo(1);
assertThat(sessionFireAllRulesBeginEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
assertThat(historyEvents.get(10)).isInstanceOf(SessionFireAllRulesEndEvent.class);
SessionFireAllRulesEndEvent sessionFireAllRulesEndEvent = (SessionFireAllRulesEndEvent) historyEvents.get(10);
assertThat(sessionFireAllRulesEndEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(sessionFireAllRulesEndEvent.getEventID()).isEqualTo(7);
assertThat(sessionFireAllRulesEndEvent.getSessionId()).isEqualTo(1);
assertThat(sessionFireAllRulesEndEvent.getNumberRulesExecuted()).isEqualTo(1);
assertThat(sessionFireAllRulesEndEvent.getExecutionTime() > 0l);
assertThat(sessionFireAllRulesEndEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
}
}

View file

@ -0,0 +1,87 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseAddResourceEvent;
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseCreatedEvent;
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseInitialLoadEvent;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by IntelliJ IDEA.
* Date: 17/02/14
* Time: 14:02
* To change this template use File | Settings | File Templates.
*/
public class RuleBaseHistoryEventTest {
private FileKnowledgeResource fibonacciFile;
@Before
public void justBefore() {
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
}
@Test
public void PackageCreationEvent() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
assertThat(historyEvents).hasSize(3);
assertThat(historyEvents.get(0)).isInstanceOf(KnowledgeBaseCreatedEvent.class);
KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = (KnowledgeBaseCreatedEvent) historyEvents.get(0);
assertThat(knowledgeBaseCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(knowledgeBaseCreatedEvent.getEventID()).isEqualTo(1);
assertThat(knowledgeBaseCreatedEvent.getSessionId()).isNull();
assertThat(knowledgeBaseCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(historyEvents.get(2)).isInstanceOf(KnowledgeBaseAddResourceEvent.class);
KnowledgeBaseAddResourceEvent knowledgeBaseAddResourceEvent = (KnowledgeBaseAddResourceEvent) historyEvents.get(2);
assertThat(knowledgeBaseAddResourceEvent.getEventID()).isEqualTo(3);
assertThat(knowledgeBaseAddResourceEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(knowledgeBaseAddResourceEvent.getKnowledgeResources()).hasSize(1);
assertThat(knowledgeBaseAddResourceEvent.getKnowledgeResources().get(0)).isInstanceOf(FileKnowledgeResource.class);
FileKnowledgeResource drlRessourceFile = (FileKnowledgeResource) knowledgeBaseAddResourceEvent.getKnowledgeResources().get(0);
assertThat(drlRessourceFile.getPath()).isEqualTo("fibonacci.drl");
assertThat(historyEvents.get(1)).isInstanceOf(KnowledgeBaseInitialLoadEvent.class);
KnowledgeBaseInitialLoadEvent knowledgeBaseInitialLoadEvent = (KnowledgeBaseInitialLoadEvent) historyEvents.get(1);
assertThat(knowledgeBaseInitialLoadEvent.getEventID()).isEqualTo(2);
assertThat(knowledgeBaseInitialLoadEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
/** ruleBasePackage.RecreateKBaseWithNewResources(DrlDroolsResource.createClassPathResource("fibonacciBis.drl"));
assertThat(historyEvents.size() == 6);
assertThat(historyEvents.get(4) instanceof KnowledgeBaseAddResourceEvent);
KnowledgeBaseAddResourceEvent knowledgeBaseAddRessourceEvent2 = (KnowledgeBaseAddResourceEvent) historyEvents.get(4);
assertThat(knowledgeBaseAddRessourceEvent2.getEventID(), 5l);
assertThat(knowledgeBaseAddRessourceEvent2.getTypeEvent(), HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
assertThat(knowledgeBaseAddRessourceEvent2.getResourceFiles().size() == 1);
assertThat(knowledgeBaseAddRessourceEvent2.getResourceFiles().get(0) instanceof DrlResourceFile);
DrlResourceFile drlRessourceFile2 = (DrlResourceFile)knowledgeBaseAddRessourceEvent2.getResourceFiles().get(0);
assertThat(drlRessourceFile2.getFileName().equals("fibonacciBis.drl"));
assertThat(historyEvents.get(5) instanceof KnowledgeBaseReloadedEvent);
KnowledgeBaseReloadedEvent knowledgeBaseReloadedEvent = (KnowledgeBaseReloadedEvent) historyEvents.get(5);
assertThat(knowledgeBaseReloadedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(knowledgeBaseReloadedEvent.getEventID()).isEqualTo(6);
assertThat(knowledgeBaseReloadedEvent.getSessionId()).isEqualTo(0);
assertThat(knowledgeBaseReloadedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
*/
}
}

View file

@ -0,0 +1,116 @@
/**
*
*/
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
import org.junit.*;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Bertrand Gressier @date 12 déc. 2011
*/
@RunWith(MockitoJUnitRunner.class)
public class RuleBaseStatefullSessionfibonacciTest {
static RuleBasePackage ruleBasePackage;
static private FileKnowledgeResource fibonacciFile;
RuleBaseSession session;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
}
@Before
public void justBefore() {
}
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
session = ruleBasePackage.createRuleBaseSession();
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
session.dispose();
}
@Test
public void testFireAllRulesIsOk() throws Exception {
Assert.assertNotNull("RuleBaseSession can't be null", session);
// for (int i = 0; i < 1000; i++) {
RuleBaseSession session1 = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(5);
session1.insertObject(fibonacci);
session1.fireAllRules();
Assert.assertEquals(3, session1.listRules().size());
session1.dispose();
//Thread.sleep(2000);
//}
}
@Test
public void testFireAllRulesIsOk1() throws Exception {
Assert.assertNotNull("RuleBaseSession can't be null", session);
Fibonacci fibonacci = new Fibonacci(5);
session.insertObject(fibonacci);
session.fireAllRules();
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
System.out.println(hevent);
}
Assert.assertEquals(3, session.listRules().size());
}
@Test
public void testFireAllRulesIsOk2() throws Exception {
Assert.assertNotNull("RuleBaseSession can't be null", session);
Fibonacci fibonacci = new Fibonacci(5);
session.insertObject(fibonacci);
session.fireAllRules();
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
System.out.println(hevent);
}
Assert.assertEquals(3, session.listRules().size());
}
@Test
public void testFireAllRulesIs3Ok() throws Exception {
Assert.assertNotNull("RuleBaseSession can't be null", session);
Fibonacci fibonacci = new Fibonacci(5);
session.insertObject(fibonacci);
session.fireAllRules();
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
System.out.println(hevent);
}
Assert.assertEquals(3, session.listRules().size());
}
}

View file

@ -0,0 +1,141 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.rule.AfterRuleFiredHistoryEvent;
import org.chtijbug.drools.entity.history.rule.BeforeRuleFiredHistoryEvent;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
/**
* Created by IntelliJ IDEA.
* Date: 23/11/12
* Time: 09:44
* To change this template use File | Settings | File Templates.
*/
public class RuleHandlerListenerTest {
static RuleBasePackage ruleBasePackage;
RuleBaseSession session;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Before
public void justBefore() {
//infiniteLoopFile = FileKnowledgeResource.createDRLClassPathResource("infiniteLoop.drl");
//ruleflow1File = FileKnowledgeResource.createDRLClassPathResource("ruleflow1.drl");
//ruleFlowProcess1File = FileKnowledgeResource.createDRLClassPathResource("RuleFlowProcess1.bpmn2");
}
/**
* @throws java.lang.Exception
*/
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
}
@Test
public void DefaultMaxNumberRUleExecuted() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
try {
session.fireAllRules();
fail();
} catch (DroolsChtijbugException e) {
assertThat(e.getKey()).isEqualTo(DroolsChtijbugException.MaxNumberRuleExecutionReached);
}
}
@Test
public void max10tMaxNumberRUleExecuted() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
session = ruleBasePackage.createRuleBaseSession(10);
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
try {
session.fireAllRules();
fail();
} catch (DroolsChtijbugException e) {
assertThat(session.getNumberRulesExecuted()).isEqualTo(10);
assertThat(e.getKey()).isEqualTo(DroolsChtijbugException.MaxNumberRuleExecutionReached);
}
}
@Test
public void RuleEvent() throws DroolsChtijbugException {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
try {
session.fireAllRules();
} catch (DroolsChtijbugException e) {
e.printStackTrace();
}
List<HistoryEvent> eventList = session.getHistoryContainer().getListHistoryEvent();
assertThat(eventList).hasSize(6002);
/*
BeforeRuleFiredHistoryEvent
*/
HistoryEvent event1 = eventList.get(1);
assertThat(event1).isInstanceOf(BeforeRuleFiredHistoryEvent.class);
BeforeRuleFiredHistoryEvent beforeRuleFiredHistoryEvent = (BeforeRuleFiredHistoryEvent) event1;
assertThat(beforeRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().size()).isEqualTo(1);
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getListfactObjectAttributes()).hasSize(2);
List<DroolsFactObjectAttribute> droolsFactObjectAttributes = beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getListfactObjectAttributes();
assertThat(droolsFactObjectAttributes.get(0).getAttributeValue()).isEqualTo("0");
/*
AfterRuleFiredHistoryEvent
*/
HistoryEvent event3 = eventList.get(3);
assertThat(event3).isInstanceOf(AfterRuleFiredHistoryEvent.class);
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) event3;
assertThat(afterRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
}
@Test
public void RuleFLowgroup1() throws Exception {
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "ruleflow1.drl", "RuleFlowProcess1.bpmn2");
session = ruleBasePackage.createRuleBaseSession();
Fibonacci newObject = new Fibonacci(0);
session.insertObject(newObject);
session.startProcess("P1");
session.fireAllRules();
//assertThat(session.getNumberRulesExecuted(), 10);
}
}

View file

@ -0,0 +1,130 @@
package org.chtijbug.drools.runtime.test;
import org.chtijbug.drools.entity.DroolsRuleObject;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.entity.history.rule.AfterRuleFiredHistoryEvent;
import org.chtijbug.drools.entity.history.rule.AfterRuleFlowActivatedHistoryEvent;
import org.chtijbug.drools.entity.history.rule.AfterRuleFlowDeactivatedHistoryEvent;
import org.chtijbug.drools.entity.history.rule.BeforeRuleFiredHistoryEvent;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBaseBuilder;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by IntelliJ IDEA.
* Date: 18/02/14
* Time: 13:11
* To change this template use File | Settings | File Templates.
*/
public class RuleHistoryEventTest {
@Before
public void justBefore() {
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
// ruleflow2File = FileKnowledgeResource.createDRLClassPathResource("ruleflow2.drl");
// ruleFlowProcess2File = FileKnowledgeResource.createDRLClassPathResource("RuleFlowProcess2.bpmn2");
}
@Test
public void KnowledgeBaseFireAllRules() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(1);
ruleBaseSession1.insertObject(fibonacci);
ruleBaseSession1.fireAllRules();
Assert.assertTrue(historyEvents.size() == 11);
Assert.assertTrue(historyEvents.get(7) instanceof BeforeRuleFiredHistoryEvent);
BeforeRuleFiredHistoryEvent beforeRuleFiredHistoryEvent = (BeforeRuleFiredHistoryEvent) historyEvents.get(7);
assertThat(beforeRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(beforeRuleFiredHistoryEvent.getEventID()).isEqualTo(4);
assertThat(beforeRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(beforeRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
DroolsRuleObject droolsRuleObject = beforeRuleFiredHistoryEvent.getRule();
assertThat(droolsRuleObject.getRuleName()).isEqualTo("Bootstrap");
assertThat(droolsRuleObject.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
Assert.assertTrue(historyEvents.get(9) instanceof AfterRuleFiredHistoryEvent);
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) historyEvents.get(9);
assertThat(afterRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(afterRuleFiredHistoryEvent.getEventID()).isEqualTo(6);
assertThat(afterRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(afterRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
DroolsRuleObject droolsRuleObject2 = afterRuleFiredHistoryEvent.getRule();
assertThat(droolsRuleObject2.getRuleName()).isEqualTo("Bootstrap");
assertThat(droolsRuleObject2.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
assertThat(afterRuleFiredHistoryEvent.getRuleInstanceId()).isEqualTo(1);
}
@Test
public void KnowledgeBaseFireAllRulesRuleFlowGroup() throws DroolsChtijbugException {
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
HistoryListener historyListener = new HistoryListener() {
@Override
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
historyEvents.add(newHistoryEvent);
}
};
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "ruleflow2.drl", "RuleFlowProcess2.bpmn2");
Long rulePackageID = ruleBasePackage.getRuleBaseID();
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
Fibonacci fibonacci = new Fibonacci(0);
ruleBaseSession1.insertObject(fibonacci);
ruleBaseSession1.startProcess("P1");
ruleBaseSession1.fireAllRules();
assertThat(historyEvents).hasSize(41);
assertThat(historyEvents.get(12)).isInstanceOfAny(AfterRuleFlowActivatedHistoryEvent.class);
AfterRuleFlowActivatedHistoryEvent afterRuleFlowActivatedHistoryEvent = (AfterRuleFlowActivatedHistoryEvent) historyEvents.get(12);
assertThat(afterRuleFlowActivatedHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(afterRuleFlowActivatedHistoryEvent.getEventID()).isEqualTo(8);
assertThat(afterRuleFlowActivatedHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(afterRuleFlowActivatedHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.RuleFlowGroup);
assertThat(afterRuleFlowActivatedHistoryEvent.getDroolsRuleFlowGroupObject().getName()).isEqualTo("Group1");
assertThat(historyEvents.get(15)).isInstanceOfAny(AfterRuleFiredHistoryEvent.class);
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) historyEvents.get(15);
assertThat(afterRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(afterRuleFiredHistoryEvent.getEventID()).isEqualTo(11);
assertThat(afterRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(afterRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
DroolsRuleObject droolsRuleObject2 = afterRuleFiredHistoryEvent.getRule();
assertThat(droolsRuleObject2.getRuleName()).isEqualTo("Account group1");
assertThat(droolsRuleObject2.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
assertThat(afterRuleFiredHistoryEvent.getRuleInstanceId()).isEqualTo(1);
assertThat(historyEvents.get(23)).isInstanceOf(AfterRuleFlowDeactivatedHistoryEvent.class);
AfterRuleFlowDeactivatedHistoryEvent afterRuleFlowDeactivatedHistoryEvent = (AfterRuleFlowDeactivatedHistoryEvent) historyEvents.get(23);
assertThat(afterRuleFlowDeactivatedHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
assertThat(afterRuleFlowDeactivatedHistoryEvent.getEventID()).isEqualTo(19);
assertThat(afterRuleFlowDeactivatedHistoryEvent.getSessionId()).isEqualTo(1);
assertThat(afterRuleFlowDeactivatedHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.RuleFlowGroup);
assertThat(afterRuleFlowDeactivatedHistoryEvent.getDroolsRuleFlowGroupObject().getName()).isEqualTo("Group2");
}
}

View file

@ -0,0 +1,38 @@
/**
*
*/
package org.chtijbug.test.fibonacci;
/**
* @author Bertrand Gressier
* @date 12 déc. 2011
* <p/>
* <p/>
* Source: http://legacy.drools.codehaus.org/Fibonacci+Example
*/
public class Fibonacci {
private final int sequence;
private long value;
public Fibonacci(int sequence) {
this.sequence = sequence;
this.value = -1;
}
public int getSequence() {
return this.sequence;
}
public long getValue() {
return this.value;
}
public void setValue(long value) {
this.value = value;
}
@Override
public String toString() {
return "Fibonacci(" + this.sequence + "/" + this.value + ")";
}
}

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="http://www.jboss.org/drools"
typeLanguage="http://www.java.com/javaTypes"
expressionLanguage="http://www.mvel.org/2.0"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
xmlns:g="http://www.jboss.org/drools/flow/gpd"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">
<process processType="Private" isExecutable="true" id="P1" artifactId="Hello World" tns:groupId="org.chtijbug.drools.runtime.test" >
<!-- nodes -->
<startEvent id="_1" artifactId="StartProcess" />
<endEvent id="_3" artifactId="EndProcess" />
<businessRuleTask id="_4" artifactId="Group1" g:ruleFlowGroup="Group1" >
</businessRuleTask>
<businessRuleTask id="_5" artifactId="Group2" g:ruleFlowGroup="Group2" >
</businessRuleTask>
<!-- connections -->
<sequenceFlow id="_5-_3" sourceRef="_5" targetRef="_3" />
<sequenceFlow id="_1-_4" sourceRef="_1" targetRef="_4" />
<sequenceFlow id="_4-_5" sourceRef="_4" targetRef="_5" />
</process>
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="P1" >
<bpmndi:BPMNShape bpmnElement="_1" >
<dc:Bounds x="16" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" >
<dc:Bounds x="462" y="28" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_4" >
<dc:Bounds x="161" y="64" width="80" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" >
<dc:Bounds x="304" y="50" width="80" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_5-_3" >
<di:waypoint x="344" y="74" />
<di:waypoint x="486" y="52" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_1-_4" >
<di:waypoint x="40" y="40" />
<di:waypoint x="201" y="88" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_4-_5" >
<di:waypoint x="201" y="88" />
<di:waypoint x="344" y="74" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="http://www.jboss.org/drools"
typeLanguage="http://www.java.com/javaTypes"
expressionLanguage="http://www.mvel.org/2.0"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
xmlns:g="http://www.jboss.org/drools/flow/gpd"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">
<process processType="Private" isExecutable="true" id="P1" artifactId="Hello World" tns:groupId="org.chtijbug.drools.runtime.test" >
<!-- nodes -->
<startEvent id="_1" artifactId="StartProcess" />
<endEvent id="_3" artifactId="EndProcess" />
<businessRuleTask id="_4" artifactId="Group1" g:ruleFlowGroup="Group1" >
</businessRuleTask>
<businessRuleTask id="_5" artifactId="Group2" g:ruleFlowGroup="Group2" >
</businessRuleTask>
<!-- connections -->
<sequenceFlow id="_5-_3" sourceRef="_5" targetRef="_3" />
<sequenceFlow id="_1-_4" sourceRef="_1" targetRef="_4" />
<sequenceFlow id="_4-_5" sourceRef="_4" targetRef="_5" />
</process>
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="P1" >
<bpmndi:BPMNShape bpmnElement="_1" >
<dc:Bounds x="16" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" >
<dc:Bounds x="462" y="28" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_4" >
<dc:Bounds x="161" y="64" width="80" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_5" >
<dc:Bounds x="304" y="50" width="80" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_5-_3" >
<di:waypoint x="344" y="74" />
<di:waypoint x="486" y="52" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_1-_4" >
<di:waypoint x="40" y="40" />
<di:waypoint x="201" y="88" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_4-_5" >
<di:waypoint x="201" y="88" />
<di:waypoint x="344" y="74" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View file

@ -0,0 +1,49 @@
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
dialect "mvel"
rule Recurse
salience 10
when
not ( Fibonacci ( sequence == 1 ) )
f : Fibonacci ( value == -1 )
then
insert( new Fibonacci( f.sequence - 1 ) );
System.out.println( "recurse for " + f.sequence );
end
rule Bootstrap
when
f : Fibonacci( sequence == 1 || == 2, value == -1 ) // this is a multi-restriction || on a single field
then
modify ( f ){ value = 1 };
System.out.println( f.sequence + " == " + f.value );
end
rule Calculate
when
f1 : Fibonacci( s1 : sequence, value != -1 ) // here we bind sequence
f2 : Fibonacci( sequence == (s1 + 1 ), value != -1 ) // here we don't, just to demonstrate the different way bindings can be used
f3 : Fibonacci( s3 : sequence == (f2.sequence + 1 ), value == -1 )
then
modify ( f3 ) { value = f1.value + f2.value };
System.out.println( s3 + " == " + f3.value ); // see how you can access pattern and field bindings
end

View file

@ -0,0 +1,49 @@
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
dialect "mvel"
rule Recurse
salience 10
when
not ( Fibonacci ( sequence == 1 ) )
f : Fibonacci ( value == -1 )
then
insert( new Fibonacci( f.sequence - 1 ) );
System.out.println( "recurse for " + f.sequence );
end
rule Bootstrap
when
f : Fibonacci( sequence == 1 || == 2, value == -1 ) // this is a multi-restriction || on a single field
then
modify ( f ){ value = 1 };
System.out.println( f.sequence + " == " + f.value );
end
rule Calculate
when
f1 : Fibonacci( s1 : sequence, value != -1 ) // here we bind sequence
f2 : Fibonacci( sequence == (s1 + 1 ), value != -1 ) // here we don't, just to demonstrate the different way bindings can be used
f3 : Fibonacci( s3 : sequence == (f2.sequence + 1 ), value == -1 )
then
modify ( f3 ) { value = f1.value + f2.value };
System.out.println( s3 + " == " + f3.value ); // see how you can access pattern and field bindings
end

View file

@ -0,0 +1,29 @@
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
dialect "mvel"
rule "infiniteLoop"
when
f : Fibonacci( )
then
update(f);
end

View file

@ -0,0 +1,28 @@
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
dialect "mvel"
rule Recurse
when
then
insert( new Fibonacci( 0 ) );
end

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="org.chtijbug.drools.runtime" level="TRACE"/>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

View file

@ -0,0 +1,22 @@
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
rule "Account group1"
ruleflow-group "Group1"
when
Fibonacci(sequence==0 )
then
insert( new Fibonacci( 1 ) );
end
rule "Account group2"
ruleflow-group "Group2"
when
Fibonacci(sequence==1 )
then
insert( new Fibonacci( 2 ) );
end

View file

@ -0,0 +1,22 @@
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
rule "Account group1"
ruleflow-group "Group1"
when
Fibonacci(sequence==0 )
then
insert( new Fibonacci( 1 ) );
end
rule "Account group2"
ruleflow-group "Group2"
when
Fibonacci(sequence==1 )
then
insert( new Fibonacci( 2 ) );
end

View file

@ -0,0 +1,29 @@
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.chtijbug.drools.runtime.test
import org.chtijbug.drools.runtime.test.Fibonacci;
dialect "mvel"
rule "rule1"
when
Fibonacci(sequence==0 )
then
insert( new Fibonacci( 1 ) );
end