protected KieFileSystem createKieFileSystemWithKProject(KieServices ks) { KieModuleModel kproj = ks.newKieModuleModel(); KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("defaultKieBase").setDefault(true).addPackage("*") .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ); kieBaseModel1.newKieSessionModel("defaultKieSession").setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType( ClockTypeOption.get("realtime") ) .newWorkItemHandlerModel("Log", "new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()"); KieFileSystem kfs = ks.newKieFileSystem(); kfs.writeKModuleXML(kproj.toXML()); return kfs; }
KieMavenRepository repository = KieMavenRepository.getKieMavenRepository(); repository.resolveArtifact(releaseId.toExternalForm()); KieServices ks = KieServices.Factory.get(); KieContainer kieContainer = ks.newKieContainer(releaseId); KieBaseModel defaultKBaseModel = ((KieContainerImpl)kieContainer).getKieProject().getDefaultKieBaseModel(); if (defaultKBaseModel != null) { kbaseName = defaultKBaseModel.getName(); } else { kbaseName = DEFAULT_KBASE_NAME; throw new IllegalStateException("Cannot find kbase, either it does not exist or there are multiple default kbases in kmodule.xml"); KieBase kbase = kieContainer.getKieBase(kbaseName); contaxtParams.put("classLoader", kieContainer.getClassLoader()); .classLoader(kieContainer.getClassLoader()) .registerableItemsFactory(new KModuleRegisterableItemsFactory(kieContainer, ksessionName));
private KieModuleModel createKieProjectWithPackagesAnd2KieBases(KieServices ks) { KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel() .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .addPackage("org.pkg1") .newKieSessionModel("KSession1"); kproj.newKieBaseModel() .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .addPackage("org.pkg2") .newKieSessionModel("KSession2"); return kproj; }
private KieModuleModel createKieProjectWithPackages(KieServices ks, ReleaseId releaseId) { KieModuleModel kproj = ks.newKieModuleModel(); KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1") .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .addPackage("org.pkg1"); KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1") .setType( KieSessionType.STATEFUL ) .setClockType( ClockTypeOption.get("realtime") ); return kproj; }
@Test public void testNotExistingInclude() throws Exception { String drl = "package org.drools.compiler.integrationtests\n" + "declare CancelFact\n" + " cancel : boolean = true\n" + "end\n" + "rule R1 when\n" + " $m : CancelFact( cancel == true )\n" + "then\n" + "end\n"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); KieModuleModel module = ks.newKieModuleModel(); final String defaultBaseName = "defaultKBase"; KieBaseModel defaultBase = module.newKieBaseModel(defaultBaseName) .addInclude( "notExistingKB1" ) .addInclude( "notExistingKB2" ); defaultBase.setDefault(true); defaultBase.addPackage( "*" ); defaultBase.newKieSessionModel("defaultKSession").setDefault( true ); kfs.writeKModuleXML( module.toXML() ); KieBuilder kb = ks.newKieBuilder( kfs ).buildAll(); assertEquals( 2, kb.getResults().getMessages().size() ); }
protected ReleaseId createKJar(String... pairs) throws IOException { KieServices ks = KieServices.Factory.get(); KieModuleModel kproj = ks.newKieModuleModel(); KieFileSystem kfs = ks.newKieFileSystem(); for ( int i = 0; i < pairs.length; i += 2 ) { String id = pairs[i]; String rule = pairs[i + 1]; kfs.write( "src/main/resources/" + id.replaceAll( "\\.", "/" ) + "/rule" + i + ".drl", rule ); KieBaseModel kBase1 = kproj.newKieBaseModel( id ) .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .addPackage( id ); KieSessionModel ksession1 = kBase1.newKieSessionModel(id + ".KSession1") .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("pseudo")); } kfs.writeKModuleXML(kproj.toXML()); // buildAll() automatically adds the module to the kieRepository KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); assertTrue(kieBuilder.getResults().getMessages().isEmpty()); KieModule kieModule = kieBuilder.getKieModule(); return kieModule.getReleaseId(); }
private static KieBase readKnowledgeBase( List<InputStream> theory ) { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieFileSystem kfs = ks.newKieFileSystem(); for ( int j = 0; j < theory.size(); j++ ) { Resource res = ks.getResources().newInputStreamResource( theory.get( j ) ); kfs.write( RESOURCE_PATH + "source_" + j + ".drl", res ); } KieModuleModel model = ks.newKieModuleModel(); KieBaseModel kbModel = model.newKieBaseModel( DEFAULT_KIEBASE ) .setDefault( true ) .addPackage( BASE_PACK ) .setEventProcessingMode( EventProcessingOption.STREAM ); kfs.writeKModuleXML( model.toXML() ); KieBuilder kb = ks.newKieBuilder( kfs ); kb.buildAll(); if ( kb.getResults().hasMessages( Message.Level.ERROR ) ) { throw new RuntimeException( "Build Errors:\n" + kb.getResults().toString() ); } KieContainer kContainer = ks.newKieContainer( kr.getDefaultReleaseId() ); return kContainer.getKieBase(); }
@Test public void testDeclarativeKieConsoleLoggerStateless() throws Exception { String drl = "package org.drools.integrationtests\n" + "import org.drools.compiler.Message;\n" + "rule \"Hello World\"\n" + " when\n" + " m : Message( myMessage : message )\n" + " then\n" + "end"; KieServices ks = KieServices.Factory.get(); KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel("KBase1") .newKieSessionModel("KSession1") .setType(KieSessionModel.KieSessionType.STATELESS) .setConsoleLogger("logger"); KieFileSystem kfs = ks.newKieFileSystem(); kfs.writeKModuleXML(kproj.toXML()); kfs.write("src/main/resources/KBase1/rule.drl", drl); KieModule kieModule = ks.newKieBuilder(kfs).buildAll().getKieModule(); KieContainer kieContainer = ks.newKieContainer(kieModule.getReleaseId()); StatelessKieSession ksession = kieContainer.newStatelessKieSession("KSession1"); ksession.execute( new Message("Hello World") ); KieRuntimeLogger logger = ksession.getLogger(); assertNotNull(logger); logger.close(); }
"end\n"; KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-import", "1.0" ); KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel( "kbase" ) .addPackage( "rules" ) .newKieSessionModel( "ksession" ) .setDefault( true ); KieFileSystem kfs = ks.newKieFileSystem() .generateAndWritePomXML( releaseId ) .write( "src/main/resources/rules/r1.drl", drl1 ) .write( "src/main/resources/myrules/r2.drl", drl2 ) .writeKModuleXML( kproj.toXML() ); KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer( releaseId ).newKieSession( );
final KieServices ks = KieServices.Factory.get(); KieModuleModel module = ks.newKieModuleModel(); KieBaseModel baseModel = module.newKieBaseModel("defaultKBase"); baseModel.setDefault(true); baseModel.addPackage("*"); KieSessionModel sessionModel = baseModel.newKieSessionModel("defaultKSession"); sessionModel.setDefault(true); sessionModel.setType(KieSessionModel.KieSessionType.STATEFUL); sessionModel.newListenerModel(MarkingAgendaEventListener.class.getName(), ListenerModel.Kind.AGENDA_EVENT_LISTENER); sessionModel.newListenerModel(MarkingRuntimeEventListener.class.getName(), ListenerModel.Kind.RULE_RUNTIME_EVENT_LISTENER); KieSessionModel statelessSessionModel = baseModel.newKieSessionModel("defaultStatelessKSession"); statelessSessionModel.setDefault(true); statelessSessionModel.setType(KieSessionModel.KieSessionType.STATELESS); statelessSessionModel.newListenerModel(MarkingRuntimeEventListener.class.getName(), ListenerModel.Kind.RULE_RUNTIME_EVENT_LISTENER); kfs.write("src/main/resources/" + PACKAGE_PATH + "/test.drl", ResourceFactory.newByteArrayResource(DRL.getBytes())); KieBuilder builder = ks.newKieBuilder(kfs).buildAll(); assertEquals("Unexpected compilation errors", 0, builder.getResults().getMessages().size()); ks.getRepository().addKieModule(builder.getKieModule());
private ReleaseId buildKieModule() { final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem(); final ReleaseId id = generateReleaseId(); final KieModuleModel module = ks.newKieModuleModel(); final KieBaseModel base = module.newKieBaseModel(kbaseName); base.setDefault(true); base.addPackage("*"); base.setEventProcessingMode(EventProcessingOption.STREAM); final KieSessionModel kieSessionModel = base.newKieSessionModel(kSessionName).setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL); if (usePseudoClock) { kieSessionModel.setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId())); LOG.debug("kmodule.xml: {}", module.toXML()); kfs.writeKModuleXML(module.toXML()); kfs.generateAndWritePomXML(id); kfs.write("src/main/resources/" + file.getName(), ResourceFactory.newFileResource(file)); final KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built. if (kb.getResults().hasMessages(Message.Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());
"end"; KieServices ks = KieServices.Factory.get(); KieModuleModel kproj = ks.newKieModuleModel(); KieBaseModel kieBaseModel1 = kproj.newKieBaseModel( KBASE1 ).setDefault( true ) .setEventProcessingMode( EventProcessingOption.STREAM ); KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel( KSESSION1 ).setDefault( true ) .setType( KieSessionModel.KieSessionType.STATEFUL ) .setClockType( ClockTypeOption.get( ClockType.PSEUDO_CLOCK.getId() ) ); ReleaseId releaseId1 = ks.newReleaseId( "org.kie.test", "mbeans", "1.0.0" ); createKJar( ks, kproj, releaseId1, null, drl ); KieContainer kc = ks.newKieContainer( releaseId1 ); KieBase kiebase = kc.getKieBase( KBASE1 ); MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel(namespace + ".KBase1") .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .addPackage( namespace + ".KBase1" ) .setDefault( true ); kieBaseModel1.newKieSessionModel( namespace + ".KSession1" ) .setType( KieSessionType.STATELESS ) .setClockType( ClockTypeOption.get( "realtime" ) ) .setDefault( true ); kieBaseModel1.newKieSessionModel( namespace + ".KSession2") kieBaseModel1.newKieSessionModel( namespace + ".KSessionDefault") KieBaseModel kieBaseModel2 = kproj.newKieBaseModel( namespace + ".KBase2") .setEqualsBehavior( EqualityBehaviorOption.IDENTITY ) .addPackage( namespace + ".KBase2") .setEventProcessingMode( EventProcessingOption.CLOUD ); kieBaseModel2.newKieSessionModel(namespace + ".KSession3") KieBaseModel kieBaseModel3 = kproj.newKieBaseModel(namespace + ".KBase3") .addInclude( kieBaseModel1.getName() ) .addInclude( kieBaseModel2.getName() ) .setEqualsBehavior( EqualityBehaviorOption.IDENTITY ) .setEventProcessingMode( EventProcessingOption.CLOUD ); kieBaseModel3.newKieSessionModel(namespace + ".KSession4")
private void build(KieServices ks, ReleaseId releaseId) throws IOException { KieModuleModel kproj = ks.newKieModuleModel(); KieSessionModel ksession1 = kproj.newKieBaseModel("KBase1").newKieSessionModel("KSession1").setDefault(true); ksession1.newListenerModel(RecordingWorkingMemoryEventListener.class.getName(), ListenerModel.Kind.RULE_RUNTIME_EVENT_LISTENER); KieFileSystem kfs = ks.newKieFileSystem(); kfs.writeKModuleXML(kproj.toXML()) .writePomXML( generatePomXml(releaseId) ) .write("src/main/resources/KBase1/rules.drl", createDRL()); KieBuilder kieBuilder = ks.newKieBuilder(kfs); assertTrue(kieBuilder.buildAll().getResults().getMessages().isEmpty()); }
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.generateAndWritePomXML( ks.newReleaseId( "test", "foo", "1.0" ) ); KieModuleModel km = ks.newKieModuleModel(); km.newKieBaseModel( "rules" ) .addPackage( "org.drools.compiler.test2" ) .addPackage( "org.drools.compiler.test1" ); kfs.writeKModuleXML( km.toXML() ); KieResources kr = ks.getResources(); .setSourcePath( "org/drools/compiler/test2/p2.drl" ); kfs.write( r1 ); kfs.write( r2 ); KieBuilder builder = ks.newKieBuilder( kfs ); builder.buildAll(); assertEquals( Collections.emptyList(), builder.getResults().getMessages( Message.Level.ERROR ) ); KieContainer kc = ks.newKieContainer(builder.getKieModule().getReleaseId()); FactType ft = kc.getKieBase( "rules" ).getFactType( "org.drools.compiler.test2", "Child" );
final KieServices services = KieServices.Factory.get(); final KieFileSystem kfs = services.newKieFileSystem(); final KieModuleModel module = services.newKieModuleModel(); final KieBaseModel base = module.newKieBaseModel("kbase_" + rulesetID) .setDefault(true).setEqualsBehavior(EqualityBehaviorOption.EQUALITY) .addPackage("eu.fbk.rdfpro.rules.drools"); base.newKieSessionModel("session_" + rulesetID).setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL); kfs.write("src/main/resources/META-INF/kmodule.xml", module.toXML()); final ReleaseId releaseId = services.newReleaseId("eu.fbk.rdfpro." + rulesetID, rulesetID, "1.0"); kfs.writePomXML("<?xml version=\"1.0\"?>\n" // + "<project>\n" // + "<modelVersion>4.0.0</modelVersion>\n" // kfs.write("src/main/resources/eu/fbk/rdfpro/rules/drools/" + rulesetID + ".drl", this.ruleBuilder.toString()); if (LOGGER.isTraceEnabled()) { final Results results = services.newKieBuilder(kfs).buildAll().getResults(); for (final Message message : results.getMessages(Level.INFO)) { LOGGER.info("[DROOLS] {}", message);
@Test public void testMultipleKBaseWithDrlError() { // RHBRMS-2651 final String drl = "package org.drools.compiler;\n" + "rule \"test\"\n" + " when\n" + " Smurf\n" + " then\n" + "end"; final KieServices ks = KieServices.Factory.get(); final KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel( "kbase1" ).newKieSessionModel( "ksession1" ).setDefault( true ); kproj.newKieBaseModel( "kbase2" ).newKieSessionModel( "ksession2" ); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML( releaseId ).writeKModuleXML( kproj.toXML() ); final Resource drlResource = ResourceFactory.newByteArrayResource( drl.getBytes() ).setResourceType( ResourceType.DRL ) .setSourcePath( "kbase1/drl1.drl" ); kfs.write( "src/main/resources/org/drools/compiler/drl1.drl", drlResource ); final KieBuilder kb = ks.newKieBuilder( kfs ).buildAll(); final List<org.kie.api.builder.Message> messages = kb.getResults().getMessages( org.kie.api.builder.Message.Level.ERROR ); assertEquals( 4, messages.size() ); assertTrue( messages.get(0).toString().contains( "kbase1" ) ); assertTrue( messages.get(1).toString().contains( "kbase1" ) ); assertTrue( messages.get(2).toString().contains( "kbase2" ) ); assertTrue( messages.get(3).toString().contains( "kbase2" ) ); }
@Test public void testMarshallingUnmarshalling() { KieServices ks = KieServices.Factory.get(); KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1") .setEqualsBehavior( EqualityBehaviorOption.EQUALITY ) .setEventProcessingMode( EventProcessingOption.STREAM ) .setDeclarativeAgenda( DeclarativeAgendaOption.ENABLED ) .addInclude("OtherKBase") .addPackage("org.kie.pkg1") .addPackage("org.kie.pkg2"); KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1") .setType(KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("realtime")) .setBeliefSystem(BeliefSystemTypeOption.get("jtms")) assertEquals(EqualityBehaviorOption.EQUALITY, kieBaseModelXML.getEqualsBehavior()); assertEquals(EventProcessingOption.STREAM, kieBaseModelXML.getEventProcessingMode()); assertEquals(DeclarativeAgendaOption.ENABLED, kieBaseModelXML.getDeclarativeAgenda()); assertFalse(kieBaseModelXML.isDefault()); assertEquals("org.kie.pkg1", kieBaseModelXML.getPackages().get(0)); assertEquals("org.kie.pkg2", kieBaseModelXML.getPackages().get(1)); assertEquals("OtherKBase", ((KieBaseModelImpl) kieBaseModelXML).getIncludes().iterator().next()); KieSessionModel kieSessionModelXML = kieBaseModelXML.getKieSessionModels().get("KSession1");
private static RuntimeEnvironmentBuilder setupClasspathKmoduleBuilder( KieContainer kieContainer, String kbaseName, String ksessionName ) { if (StringUtils.isEmpty(kbaseName)) { KieBaseModel defaultKBaseModel = ((KieContainerImpl)kieContainer).getKieProject().getDefaultKieBaseModel(); if (defaultKBaseModel != null) { kbaseName = defaultKBaseModel.getName(); } else { kbaseName = DEFAULT_KBASE_NAME; } } InternalKieModule module = (InternalKieModule) ((KieContainerImpl)kieContainer).getKieModuleForKBase(kbaseName); if (module == null) { throw new IllegalStateException("Cannot find kbase with name " + kbaseName); } KieBase kbase = kieContainer.getKieBase(kbaseName); return getDefault() .knowledgeBase(kbase) .classLoader(kieContainer.getClassLoader()) .registerableItemsFactory(new KModuleRegisterableItemsFactory(kieContainer, ksessionName)); }
protected PMMLResource buildResourceFromSegment(PMML pmml_origin, MiningSegment segment, ClassLoader classLoader, KieModuleModel module) { PMML pmml = new PMML(); DataDictionary dd = pmml_origin.getDataDictionary(); pmml.setDataDictionary(dd); pmml.setHeader(pmml_origin.getHeader()); pmml.getAssociationModelsAndBaselineModelsAndClusteringModels().add(segment.getModel().getRawModel()); addMissingFieldDefinition(pmml, segment.getOwner(), segment); helper.setPack(segment.getModel().getModelPackageName());//PMML4Helper.pmmlDefaultPackageName()+".mining.segment_"+segment.getSegmentId()); StringBuilder rules = new StringBuilder(this.compile(pmml, classLoader)); String extBeanMiningRules = segment.getModel().getExternalBeansMiningRules(); if (extBeanMiningRules != null) { rules.append(extBeanMiningRules); } KieBaseModel kbModel = module.newKieBaseModel(segment.getOwner().getOwner().getModelId() + "_" + segment.getOwner().getSegmentationId() + "_SEGMENT_" + segment.getSegmentId()); kbModel.addPackage(helper.getPack()) .setDefault(false) .setEventProcessingMode(EventProcessingOption.CLOUD); KieSessionModel ksm = kbModel.newKieSessionModel("SEGMENT_" + segment.getSegmentId()); ksm.setDefault(true); PMMLResource resource = new PMMLResource(helper.getPack()); resource.setKieBaseModel(kbModel); resource.addRules(segment.getModel().getModelId(), rules.toString()); return resource; }