use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MVELConsequenceBuilderTest method testImperativeCodeError.
@Test
public void testImperativeCodeError() throws Exception {
InternalKnowledgePackage pkg = CoreComponentFactory.get().createKnowledgePackage("pkg1");
final RuleDescr ruleDescr = new RuleDescr("rule 1");
ruleDescr.setConsequence("if (cheese.price == 10) { cheese.price = 5; }");
Properties properties = new Properties();
properties.setProperty("drools.dialect.default", "mvel");
KnowledgeBuilderConfigurationImpl cfg1 = new KnowledgeBuilderConfigurationImpl(properties);
KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl(pkg, cfg1);
PackageRegistry pkgRegistry = pkgBuilder.getPackageRegistry(pkg.getName());
DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry();
MVELDialect mvelDialect = (MVELDialect) dialectRegistry.getDialect(pkgRegistry.getDialect());
final RuleBuildContext context = new RuleBuildContext(pkgBuilder, ruleDescr, dialectRegistry, pkg, mvelDialect);
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
final ObjectType cheeseObjeectType = new ClassObjectType(Cheese.class);
final Pattern pattern = new Pattern(0, cheeseObjeectType);
final PatternExtractor extractor = new PatternExtractor(cheeseObjeectType);
final Declaration declaration = new Declaration("cheese", extractor, pattern);
final Map<String, Declaration> map = new HashMap<String, Declaration>();
map.put("cheese", declaration);
declarationResolver.setDeclarations(map);
context.setDeclarationResolver(declarationResolver);
final MVELConsequenceBuilder builder = new MVELConsequenceBuilder();
builder.build(context, RuleImpl.DEFAULT_CONSEQUENCE_NAME);
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newKieSession();
final Cheese cheddar = new Cheese("cheddar", 10);
final InternalFactHandle f0 = (InternalFactHandle) ksession.insert(cheddar);
final LeftTupleImpl tuple = new LeftTupleImpl(f0, null, true);
final AgendaItem item = new AgendaItemImpl(0, tuple, 10, null, null, null);
final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper(ksession);
kbHelper.setActivation(item);
try {
((MVELConsequence) context.getRule().getConsequence()).compile((MVELDialectRuntimeData) pkgBuilder.getPackageRegistry(pkg.getName()).getDialectRuntimeRegistry().getDialectData("mvel"));
context.getRule().getConsequence().evaluate(kbHelper, ksession);
fail("should throw an exception, as 'if' is not allowed");
} catch (Exception e) {
}
assertEquals(10, cheddar.getPrice());
}
use of org.drools.mvel.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);
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.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 " + Cheese.class.getCanonicalName() + "\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 " + Cheese.class.getCanonicalName() + "\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 " + Cheese.class.getCanonicalName() + "\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 " + Cheese.class.getCanonicalName() + "\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();
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.mvel.compiler.Cheese 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.Cheese in project drools by kiegroup.
the class MarshallingTest method testAgendaGroups.
@Test
public void testAgendaGroups() throws Exception {
String rule1 = "package org.drools.compiler.test;\n";
rule1 += "import " + Cheese.class.getCanonicalName() + "\n";
rule1 += "global java.util.List list\n";
rule1 += "rule \"Rule 1\"\n";
rule1 += " agenda-group \"agenda-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 " + Cheese.class.getCanonicalName() + "\n";
rule2 += "global java.util.List list\n";
rule2 += "rule \"Rule 2\"\n";
rule2 += " salience 10\n";
rule2 += " agenda-group \"agenda-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 " + Cheese.class.getCanonicalName() + "\n";
rule3 += "global java.util.List list\n";
rule3 += "rule \"Rule 3\"\n";
rule3 += " salience 10\n";
rule3 += " agenda-group \"agenda-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 " + Cheese.class.getCanonicalName() + "\n";
rule4 += "global java.util.List list\n";
rule4 += "rule \"Rule 4\"\n";
rule4 += " agenda-group \"agenda-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 = kBase.newKieSession();
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.getAgenda().getAgendaGroup("agenda-group-1").setFocus();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule2", list.get(0));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.getAgenda().getAgendaGroup("agenda-group-2").setFocus();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule3", list.get(1));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
ksession.fireAllRules();
assertEquals("rule1", list.get(2));
}
Aggregations