private void validate(KnowledgeBuilder kbuilder) { if (kbuilder.hasErrors()) { StringBuilder msg = new StringBuilder(); for (KnowledgeBuilderError ebe : kbuilder.getErrors()) { msg.append("Error:").append(ebe.getMessage()).append(". "); } throw new IllegalArgumentException( "KnowledgeBuilder failed while compiling a drools resource of RiskRule " + ". Errors: " + msg.toString()); } }
@Test public void testPersistenceVariables() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("VariablesProcess.rf"), ResourceType.DRF); for (KnowledgeBuilderError error : kbuilder.getErrors()) { logger.debug(error.toString()); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession ksession = InfinispanKnowledgeService.newStatefulKnowledgeSession(kbase, null, env); long id = ksession.getIdentifier(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("name", "John Doe"); ProcessInstance processInstance = ksession.startProcess("org.drools.test.TestProcess", parameters); TestWorkItemHandler handler = TestWorkItemHandler.getInstance(); WorkItem workItem = handler.getWorkItem(); assertNotNull(workItem); assertEquals("John Doe", workItem.getParameter("name")); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env); processInstance = ksession.getProcessInstance(processInstance.getId()); assertNotNull(processInstance); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); workItem = handler.getWorkItem(); assertNotNull(workItem); assertEquals("John Doe", workItem.getParameter("text")); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env); processInstance = ksession.getProcessInstance(processInstance.getId()); assertNotNull(processInstance); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); workItem = handler.getWorkItem(); assertNull(workItem); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env); processInstance = ksession.getProcessInstance(processInstance.getId()); assertNull(processInstance); }
private KnowledgeBase loadKnowledgeBase(String fileName) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource(fileName, getClass()), ResourceType.DRL); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) { logger.warn(error.toString()); } throw new IllegalArgumentException("Could not parse knowledge."); } assertFalse(kbuilder.hasErrors()); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); Collection<KnowledgePackage> knowledgePackages = kbuilder.getKnowledgePackages(); kbase.addKnowledgePackages(knowledgePackages); return kbase; }
@Test public void testCollectAfterOrCE() throws Exception { // Set up facts final Cheesery bonFromage = new Cheesery(); bonFromage.addCheese(new Cheese("cheddar")); bonFromage.addCheese(new Cheese("cheddar")); // Test in memory compile of DRL KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("test_OrCEFollowedByCollect.drl", getClass()), ResourceType.DRL); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) { logger.warn(error.toString()); } throw new IllegalArgumentException("Could not parse knowledge."); } assertFalse(kbuilder.hasErrors()); Collection<KnowledgePackage> knowledgePackages = kbuilder.getKnowledgePackages(); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(knowledgePackages); StatefulKnowledgeSession session = createKnowledgeSession(kbase); session.insert(bonFromage); int rules = session.fireAllRules(); assertEquals(2, rules); // Serialize and test again knowledgePackages = SerializationHelper.serializeObject(knowledgePackages); kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(knowledgePackages); session = createKnowledgeSession(kbase); session.insert(bonFromage); rules = session.fireAllRules(); assertEquals(2, rules); }
private KieBase createKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource( "memory/BPMN2-RuleTaskWithInsertProcessInstance.bpmn2"), ResourceType.BPMN2); kbuilder.add( ResourceFactory.newClassPathResource("memory/ProcessInstanceRule.drl"), ResourceType.DRL); if (!kbuilder.getErrors().isEmpty()) { Iterator<KnowledgeBuilderError> errIter = kbuilder.getErrors().iterator(); while (errIter.hasNext()) { KnowledgeBuilderError err = errIter.next(); StringBuilder lines = new StringBuilder(""); if (err.getLines().length > 0) { lines.append(err.getLines()[0]); for (int i = 1; i < err.getLines().length; ++i) { lines.append(", " + err.getLines()[i]); } } logger.warn(err.getMessage() + " (" + lines.toString() + ")"); } throw new IllegalArgumentException("Errors while parsing knowledge base"); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; }