use of org.drools.compiler.Cheese in project drools by kiegroup.
the class MarshallingTest method testSerializeAdd3.
/*
* Works Fine if both the scenarios mentioned above are skipped.
*/
@Test
public void testSerializeAdd3() throws Exception {
// Create a rulebase, a session, and test it
Collection<KiePackage> kpkgs = loadKnowledgePackages("../test_Dynamic1_0.drl");
kpkgs = SerializationHelper.serializeObject(kpkgs);
InternalKnowledgeBase kBase = (InternalKnowledgeBase) getKnowledgeBase();
kBase.addPackages(kpkgs);
kBase = SerializationHelper.serializeObject(kBase);
List results = new ArrayList();
KieSession session = kBase.newKieSession();
session.setGlobal("results", results);
InternalFactHandle stilton1 = (InternalFactHandle) session.insert(new Cheese("stilton", 10));
InternalFactHandle brie1 = (InternalFactHandle) session.insert(new Cheese("brie", 10));
session.fireAllRules();
assertEquals(1, results.size());
assertEquals(stilton1.getObject(), results.get(0));
// serialize session and rulebase
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
// dynamic add pkgs
kpkgs = loadKnowledgePackages("../test_Dynamic3_0.drl");
kBase.addPackages(SerializationHelper.serializeObject(kpkgs));
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
InternalFactHandle stilton2 = (InternalFactHandle) session.insert(new Cheese("stilton", 20));
InternalFactHandle brie2 = (InternalFactHandle) session.insert(new Cheese("brie", 20));
InternalFactHandle bob1 = (InternalFactHandle) session.insert(new Person("bob", 20));
InternalFactHandle bob2 = (InternalFactHandle) session.insert(new Person("bob", 30));
session.fireAllRules();
assertEquals(4, results.size());
assertEquals(stilton2.getObject(), results.get(1));
assertEquals(bob2.getObject(), results.get(2));
assertEquals(bob1.getObject(), results.get(3));
// serialize session and rulebase
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
// dynamic add pkgs
kpkgs = loadKnowledgePackages("../test_Dynamic1_2.drl");
kBase.addPackages(SerializationHelper.serializeObject(kpkgs));
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
InternalFactHandle stilton3 = (InternalFactHandle) session.insert(new Cheese("stilton", 40));
InternalFactHandle brie3 = (InternalFactHandle) session.insert(new Cheese("brie", 40));
InternalFactHandle bob3 = (InternalFactHandle) session.insert(new Person("bob", 40));
InternalFactHandle bob4 = (InternalFactHandle) session.insert(new Person("bob", 40));
InternalFactHandle addr1 = (InternalFactHandle) session.insert(new Address("bangalore"));
InternalFactHandle addr2 = (InternalFactHandle) session.insert(new Address("India"));
session.fireAllRules();
assertEquals(9, results.size());
assertEquals(stilton3.getObject(), results.get(4));
assertEquals(bob4.getObject(), results.get(5));
assertEquals(bob3.getObject(), results.get(6));
assertEquals(addr2.getObject(), results.get(7));
assertEquals(addr1.getObject(), results.get(8));
// serialize session and rulebase
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
InternalFactHandle stilton4 = (InternalFactHandle) session.insert(new Cheese("stilton", 50));
InternalFactHandle brie4 = (InternalFactHandle) session.insert(new Cheese("brie", 50));
InternalFactHandle bob5 = (InternalFactHandle) session.insert(new Person("bob", 50));
InternalFactHandle bob6 = (InternalFactHandle) session.insert(new Person("bob", 50));
InternalFactHandle addr3 = (InternalFactHandle) session.insert(new Address("Tripura"));
InternalFactHandle addr4 = (InternalFactHandle) session.insert(new Address("Agartala"));
session.fireAllRules();
assertEquals(14, results.size());
assertEquals(stilton4.getObject(), results.get(9));
assertEquals(bob6.getObject(), results.get(10));
assertEquals(bob5.getObject(), results.get(11));
assertEquals(addr4.getObject(), results.get(12));
assertEquals(addr3.getObject(), results.get(13));
// serialize session and rulebase
kBase = (InternalKnowledgeBase) SerializationHelper.serializeObject(kBase);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.dispose();
}
use of org.drools.compiler.Cheese in project drools by kiegroup.
the class MarshallingTest method testActivationGroups.
@Test
public void testActivationGroups() throws Exception {
String rule1 = "package org.drools.compiler.test;\n";
rule1 += "import org.drools.compiler.Cheese\n";
rule1 += "global java.util.List list\n";
rule1 += "rule \"Rule 1\"\n";
rule1 += " activation-group \"activation-group-1\"\n";
rule1 += "when\n";
rule1 += " $c : Cheese( ) \n";
rule1 += "then\n";
rule1 += " list.add( \"rule1\" );\n";
rule1 += " drools.halt();\n";
rule1 += "end";
String rule2 = "package org.drools.compiler.test;\n";
rule2 += "import org.drools.compiler.Cheese\n";
rule2 += "global java.util.List list\n";
rule2 += "rule \"Rule 2\"\n";
rule2 += " salience 10\n";
rule2 += " activation-group \"activation-group-1\"\n";
rule2 += "when\n";
rule2 += " $c : Cheese( ) \n";
rule2 += "then\n";
rule2 += " list.add( \"rule2\" );\n";
rule2 += " drools.halt();\n";
rule2 += "end";
String rule3 = "package org.drools.compiler.test;\n";
rule3 += "import org.drools.compiler.Cheese\n";
rule3 += "global java.util.List list\n";
rule3 += "rule \"Rule 3\"\n";
rule3 += " activation-group \"activation-group-1\"\n";
rule3 += "when\n";
rule3 += " $c : Cheese( ) \n";
rule3 += "then\n";
rule3 += " list.add( \"rule3\" );\n";
rule3 += " drools.halt();\n";
rule3 += "end";
String rule4 = "package org.drools.compiler.test;\n";
rule4 += "import org.drools.compiler.Cheese\n";
rule4 += "global java.util.List list\n";
rule4 += "rule \"Rule 4\"\n";
rule4 += " activation-group \"activation-group-2\"\n";
rule4 += "when\n";
rule4 += " $c : Cheese( ) \n";
rule4 += "then\n";
rule4 += " list.add( \"rule4\" );\n";
rule4 += " drools.halt();\n";
rule4 += "end";
KieBase kBase = loadKnowledgeBaseFromString(rule1, rule2, rule3, rule4);
KieSession ksession = kBase.newKieSession();
kBase = SerializationHelper.serializeObject(kBase);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
final List list = new ArrayList();
ksession.setGlobal("list", list);
final Cheese brie = new Cheese("brie", 12);
ksession.insert(brie);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(2, list.size());
assertEquals("rule2", list.get(0));
assertEquals("rule4", list.get(1));
}
use of org.drools.compiler.Cheese in project drools by kiegroup.
the class MarshallingTest method testExists.
@Test
public void testExists() throws Exception {
String header = "package org.drools.compiler.test;\n";
header += "import java.util.List;\n";
header += "import org.drools.compiler.Person\n";
header += "import org.drools.compiler.Cheese\n";
header += "global java.util.List list;\n";
String rule1 = "rule \"not rule test\"\n";
rule1 += "salience 10\n";
rule1 += "when\n";
rule1 += " Person()\n";
rule1 += " exists Cheese( price >= 5 )\n";
rule1 += "then\n";
rule1 += " list.add( new Integer( 5 ) );\n";
rule1 += "end\n";
KieBase kBase = loadKnowledgeBaseFromString(header + rule1);
Environment env = EnvironmentFactory.newEnvironment();
env.set(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, new ObjectMarshallingStrategy[] { new IdentityPlaceholderResolverStrategy(ClassObjectMarshallingStrategyAcceptor.DEFAULT) });
KieSession ksession = kBase.newKieSession(null, env);
List list = new ArrayList();
ksession.setGlobal("list", list);
// add a person, no cheese
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
Person bobba = new Person("bobba fet", 50);
ksession.insert(bobba);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(0, list.size());
// add another person, no cheese
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
Person darth = new Person("darth vadar", 200);
ksession.insert(darth);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(0, list.size());
// add cheese
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
Cheese stilton = new Cheese("stilton", 5);
ksession.insert(stilton);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(2, list.size());
// remove cheese
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.retract(ksession.getFactHandle(stilton));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(2, list.size());
// put 2 cheeses back in
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.insert(stilton);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
Cheese brie = new Cheese("brie", 18);
ksession.insert(brie);
ksession.fireAllRules();
assertEquals(4, list.size());
// now remove a cheese, should be no change
ksession.retract(ksession.getFactHandle(stilton));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(4, list.size());
// now remove a person, should be no change
ksession.retract(ksession.getFactHandle(bobba));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(4, list.size());
// removal remaining cheese, no
ksession.retract(ksession.getFactHandle(brie));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(4, list.size());
// put one cheese back in, with one person should increase by one
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.insert(stilton);
ksession.fireAllRules();
assertEquals(5, list.size());
}
use of org.drools.compiler.Cheese in project drools by kiegroup.
the class MarshallingTest method testRuleFlowGroups.
@Test
public void testRuleFlowGroups() throws Exception {
String rule1 = "package org.drools.compiler.test;\n";
rule1 += "import org.drools.compiler.Cheese\n";
rule1 += "global java.util.List list\n";
rule1 += "rule \"Rule 1\"\n";
rule1 += " ruleflow-group \"ruleflow-group-1\"\n";
rule1 += "when\n";
rule1 += " $c : Cheese( ) \n";
rule1 += "then\n";
rule1 += " list.add( \"rule1\" );\n";
rule1 += " drools.halt();\n";
rule1 += "end";
String rule2 = "package org.drools.compiler.test;\n";
rule2 += "import org.drools.compiler.Cheese\n";
rule2 += "global java.util.List list\n";
rule2 += "rule \"Rule 2\"\n";
rule2 += " salience 10\n";
rule2 += " ruleflow-group \"ruleflow-group-1\"\n";
rule2 += "when\n";
rule2 += " $c : Cheese( ) \n";
rule2 += "then\n";
rule2 += " list.add( \"rule2\" );\n";
rule2 += " drools.halt();\n";
rule2 += "end";
String rule3 = "package org.drools.compiler.test;\n";
rule3 += "import org.drools.compiler.Cheese\n";
rule3 += "global java.util.List list\n";
rule3 += "rule \"Rule 3\"\n";
rule3 += " salience 10\n";
rule3 += " ruleflow-group \"ruleflow-group-2\"\n";
rule3 += " activation-group \"activation-group-2\"\n";
rule3 += "when\n";
rule3 += " $c : Cheese( ) \n";
rule3 += "then\n";
rule3 += " list.add( \"rule3\" );\n";
rule3 += " drools.halt();\n";
rule3 += "end";
String rule4 = "package org.drools.compiler.test;\n";
rule4 += "import org.drools.compiler.Cheese\n";
rule4 += "global java.util.List list\n";
rule4 += "rule \"Rule 4\"\n";
rule4 += " ruleflow-group \"ruleflow-group-2\"\n";
rule4 += " activation-group \"activation-group-2\"\n";
rule4 += "when\n";
rule4 += " $c : Cheese( ) \n";
rule4 += "then\n";
rule4 += " list.add( \"rule4\" );\n";
rule4 += " drools.halt();\n";
rule4 += "end";
KieBase kbase = loadKnowledgeBaseFromString(rule1, rule2, rule3, rule4);
KieSession ksession = getSerialisedStatefulKnowledgeSession(kbase.newKieSession(), true);
kbase = SerializationHelper.serializeObject(kbase);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
final List list = new ArrayList();
ksession.setGlobal("list", list);
final Cheese brie = new Cheese("brie", 12);
ksession.insert(brie);
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("ruleflow-group-1");
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule2", list.get(0));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("ruleflow-group-2");
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule3", list.get(1));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule1", list.get(2));
}
use of org.drools.compiler.Cheese in project drools by kiegroup.
the class EvalTest method testJaninoEval.
@Test
public void testJaninoEval() throws Exception {
final KnowledgeBuilderConfiguration kbconf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
kbconf.setProperty(JavaDialectConfiguration.JAVA_COMPILER_PROPERTY, "JANINO");
KieBase kbase = loadKnowledgeBase(kbconf, "eval_rule_test.drl");
kbase = SerializationHelper.serializeObject(kbase);
KieSession ksession = kbase.newKieSession();
ksession.setGlobal("five", 5);
final List list = new ArrayList();
ksession.setGlobal("list", list);
final Cheese stilton = new Cheese("stilton", 5);
ksession.insert(stilton);
ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals(stilton, ((List) ksession.getGlobal("list")).get(0));
}
Aggregations