use of org.drools.mvel.compiler.Person in project drools by kiegroup.
the class JpaPersistentStatefulSessionTest method fromNodeWithModifiedCollection.
private void fromNodeWithModifiedCollection(final boolean withOOPath) {
// DROOLS-376
final String str = "package org.drools.test\n" + "import org.drools.mvel.compiler.Person\n" + "import org.drools.mvel.compiler.Address\n" + "rule rule1\n" + "when\n" + (withOOPath ? " $p: Person($list : addresses, /addresses[street == \"y\"])\n" : " $p: Person($list : addresses)\n" + " $a: Address(street == \"y\") from $list\n") + "then\n" + " $list.add( new Address(\"z\") );\n" + " $list.add( new Address(\"w\") );\n" + "end\n";
final KieBase kbase = new KieHelper().addContent(str, ResourceType.DRL).build();
final KieSession ksession = KieServices.get().getStoreServices().newKieSession(kbase, null, env);
final Person p1 = new Person("John");
p1.addAddress(new Address("x"));
p1.addAddress(new Address("y"));
ksession.insert(p1);
ksession.fireAllRules();
assertThat(p1.getAddresses()).hasSize(4);
ksession.dispose();
// Should not fail here
}
use of org.drools.mvel.compiler.Person 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);
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
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
// dynamic add pkgs
kpkgs = loadKnowledgePackages("test_Dynamic3_0.drl");
kBase.addPackages(SerializationHelper.serializeObject(kpkgs));
session = 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));
assertTrue(results.contains(bob2.getObject()));
assertTrue(results.contains(bob1.getObject()));
// serialize session
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
// dynamic add pkgs
kpkgs = loadKnowledgePackages("test_Dynamic1_2.drl");
kBase.addPackages(SerializationHelper.serializeObject(kpkgs));
session = 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));
assertTrue(results.contains(addr2.getObject()));
assertTrue(results.contains(addr1.getObject()));
// serialize session
session = 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));
assertTrue(results.contains(addr4.getObject()));
assertTrue(results.contains(addr3.getObject()));
// serialize session
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.dispose();
}
use of org.drools.mvel.compiler.Person in project drools by kiegroup.
the class MarshallingTest method testSerializeAddRemove_NoClassDefFoundError.
/*
* I have tried both the scenarios
* 1. Remove a rule from a pkg.
* 2. Remove a pkg
*
* But both cases after inserting associated data points (i.e data points which are used to fire/activate the removed rule)
* session.fireAllRules() is throwing NoClassDefFoundError
*/
@Test
public void testSerializeAddRemove_NoClassDefFoundError() 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);
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
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
// dynamic add pkgs
kpkgs = loadKnowledgePackages("test_Dynamic3_0.drl");
kBase.addPackages(SerializationHelper.serializeObject(kpkgs));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
results.clear();
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(3, results.size());
assertEquals(stilton2.getObject(), results.get(0));
assertTrue(results.contains(bob1.getObject()));
assertTrue(results.contains(bob2.getObject()));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
results.clear();
// CASE 1: remove rule
kBase.removeRule("org.drools.compiler.test", "like stilton");
InternalFactHandle stilton3 = (InternalFactHandle) session.insert(new Cheese("stilton", 20));
InternalFactHandle brie3 = (InternalFactHandle) session.insert(new Cheese("brie", 20));
InternalFactHandle bob3 = (InternalFactHandle) session.insert(new Person("bob", 20));
InternalFactHandle bob4 = (InternalFactHandle) session.insert(new Person("bob", 30));
session.fireAllRules();
assertEquals(2, results.size());
assertTrue(results.contains(bob3.getObject()));
assertTrue(results.contains(bob4.getObject()));
// deserialize the session and test it
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
results.clear();
// CASE 2: remove pkg
kBase.removeKiePackage("org.drools.compiler.test");
InternalFactHandle stilton4 = (InternalFactHandle) session.insert(new Cheese("stilton", 20));
InternalFactHandle brie4 = (InternalFactHandle) session.insert(new Cheese("brie", 20));
InternalFactHandle bob5 = (InternalFactHandle) session.insert(new Person("bob", 20));
InternalFactHandle bob6 = (InternalFactHandle) session.insert(new Person("bob", 30));
session.fireAllRules();
assertEquals(2, results.size());
assertTrue(results.contains(bob5.getObject()));
assertTrue(results.contains(bob6.getObject()));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
results.clear();
session.setGlobal("results", results);
InternalFactHandle stilton5 = (InternalFactHandle) session.insert(new Cheese("stilton", 30));
InternalFactHandle brie5 = (InternalFactHandle) session.insert(new Cheese("brie", 30));
InternalFactHandle bob7 = (InternalFactHandle) session.insert(new Person("bob", 30));
InternalFactHandle bob8 = (InternalFactHandle) session.insert(new Person("bob", 40));
session.fireAllRules();
assertEquals(2, results.size());
assertTrue(results.contains(bob7.getObject()));
assertTrue(results.contains(bob8.getObject()));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.dispose();
}
use of org.drools.mvel.compiler.Person in project drools by kiegroup.
the class MarshallingTest method testMarshalWithProtoBuf.
@Test
public void testMarshalWithProtoBuf() throws Exception {
KieBase kbase = loadKnowledgeBase("test_Serializable.drl");
KieSession ksession = kbase.newKieSession();
ksession.setGlobal("list", new ArrayList());
final Person bob = new Person("bob");
ksession.insert(bob);
ksession = marsallStatefulKnowledgeSession(ksession);
assertEquals(1, ksession.getFactCount());
assertEquals(bob, ksession.getObjects().iterator().next());
int fired = ksession.fireAllRules();
assertEquals(3, fired);
List list = (List) ksession.getGlobal("list");
assertEquals(3, list.size());
// because of agenda-groups
assertEquals(new Integer(4), list.get(0));
Collection<? extends Object> facts = ksession.getObjects();
System.out.println(new ArrayList(facts));
assertEquals(2, facts.size());
}
use of org.drools.mvel.compiler.Person in project drools by kiegroup.
the class MarshallingTest method testMultiRuleMultiJoinNodePatternsWithHalt.
@Test
public void testMultiRuleMultiJoinNodePatternsWithHalt() throws Exception {
String rule1 = "package org.drools.compiler.test;\n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + Cheese.class.getCanonicalName() + "\n" + "global java.util.List list\n" + "rule \"Rule 1\"\n" + "when\n" + " $c : Cheese( ) \n" + " $p : Person( cheese == $c ) \n" + "then\n" + " list.add( $p );\n" + "end";
String rule2 = "package org.drools.compiler.test;\n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + Cheese.class.getCanonicalName() + "\n" + "import " + Cell.class.getCanonicalName() + "\n" + "global java.util.List list\n" + "rule \"Rule 2\"\n" + "when\n" + " $c : Cheese( ) \n" + " $p : Person( cheese == $c ) \n" + " $x : Cell( value == $p.age ) \n" + "then\n" + " list.add( $x );\n" + "end";
String rule3 = "package org.drools.compiler.test;\n" + "import " + Person.class.getCanonicalName() + "\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + FactB.class.getCanonicalName() + "\n" + "import " + FactC.class.getCanonicalName() + "\n" + "global java.util.List list\n" + "rule \"Rule 3\"\n" + "when\n" + " $a : FactA( field2 > 10 ) \n" + " $b : FactB( f2 >= $a.field2 ) \n" + " $p : Person( name == \"darth vadar\" ) \n" + " $c : FactC( f2 >= $b.f2 ) \n" + "then\n" + " list.add( $c );\n" + " drools.halt();\n" + "end";
KieBase kBase = loadKnowledgeBaseFromString(rule1, rule2, rule3);
KieSession session = kBase.newKieSession();
List list = new ArrayList();
session.setGlobal("list", list);
Cheese stilton = new Cheese("stilton", 25);
Cheese brie = new Cheese("brie", 49);
Person bobba = new Person("bobba fet", 30);
bobba.setCheese(stilton);
Person vadar = new Person("darth vadar", 38);
Person c3po = new Person("c3p0", 17);
c3po.setCheese(stilton);
Person r2d2 = new Person("r2d2", 58);
r2d2.setCheese(brie);
session.insert(stilton);
session.insert(bobba);
session.insert(vadar);
session.insert(brie);
session.insert(c3po);
session.insert(r2d2);
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.fireAllRules();
list = (List) session.getGlobal("list");
assertEquals(3, list.size());
assertTrue(list.contains(r2d2));
assertTrue(list.contains(c3po));
assertTrue(list.contains(bobba));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
Cell cell30 = new Cell(30);
session.insert(cell30);
Cell cell58 = new Cell(58);
session.insert(cell58);
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.fireAllRules();
assertEquals(5, list.size());
assertTrue(list.contains(cell30));
assertTrue(list.contains(cell58));
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.insert(new FactA(15));
session.insert(new FactB(20));
FactC factC27 = new FactC(27);
session.insert(factC27);
FactC factC52 = new FactC(52);
session.insert(factC52);
session = getSerialisedStatefulKnowledgeSession(session, kBase, true);
session.fireAllRules();
session.fireAllRules();
assertEquals(7, list.size());
assertTrue(list.contains(factC52));
assertTrue(list.contains(factC27));
}
Aggregations