@Test public void testUpdateToNonExistingRelease() { // DROOLS-1562 KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.kie", "test-release", "1.0.0"); createAndDeployJar( ks, releaseId, createDRL("ruleA") ); KieContainer kieContainer = ks.newKieContainer(releaseId); Results results = kieContainer.updateToVersion( ks.newReleaseId( "org.kie", "test-release", "1.0.1" ) ); assertEquals( 1, results.getMessages( Level.ERROR ).size() ); assertEquals( "1.0.0", ( (InternalKieContainer) kieContainer ).getContainerReleaseId().getVersion() ); }
@Test public void testSharedTypeDeclarationsUsingFactTypes() throws Exception { String type = "package org.drools.test\n" + "end\n"; KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-delete", "1.0.0"); createAndDeployJar( ks, releaseId1, type, drl1, drl2 ); KieContainer kieContainer = ks.newKieContainer(releaseId1); KieContainer kieContainer2 = ks.newKieContainer(releaseId1); KieSession ksession = kieContainer.newKieSession(); KieSession ksession2 = kieContainer2.newKieSession(); assertEquals( 2, ksession.fireAllRules() ); ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-delete", "1.0.1"); createAndDeployJar( ks, releaseId2, type, null, drl2 ); kieContainer.updateToVersion(releaseId2); ksession = kieContainer.newKieSession(); insertMessageFromTypeDeclaration( ksession ); assertEquals( 1, ksession.fireAllRules() );
public void updateToVersion() { KieServices ks = KieServices.Factory.get(); // Create a new jar for version 1.1.0 ReleaseId releaseId2 = ks.newReleaseId( "org.kie", "test-upgrade", "1.1.0" ); KieModule km = createAndDeployJar( ks, releaseId2, drl1, drl2_2 ); // try to update the container to version 1.1.0 kieContainer.updateToVersion( releaseId2 ); // create and use a new session ksession.insert( new Message( "Hello World" ) ); }
public static void main(String[] args) { KieServices kieServices = KieServices.Factory.get(); // 指定kjar包 final ReleaseId releaseId = kieServices.newReleaseId("com.secbro2", "drools-rules", "1.0.0"); // 创建初始化的kjar InternalKieModule kJar = initKieJar(kieServices, releaseId); KieRepository repository = kieServices.getRepository(); repository.addKieModule(kJar); KieContainer kieContainer = kieServices.newKieContainer(releaseId); KieSession session = kieContainer.newKieSession(); //同一个fact第一次不命中 try { session.fireAllRules(); } finally { session.dispose(); } System.out.println("-----first fire end-------"); //新增一个规则文件 kJar = createKieJar(kieServices, releaseId, new ResourceWrapper(ResourceFactory.newByteArrayResource(RULES.getBytes()), RULES_FILE_NAME)); repository.addKieModule(kJar); kieContainer.updateToVersion(releaseId); //同一个fact再次过滤规则:命中 session = kieContainer.newKieSession(); try { session.fireAllRules(); } finally { session.dispose(); } System.out.println("-----second fire end-------"); }
private boolean deployRules(ReleaseId newReleaseId) { try { // add common header // TODO this will go wrong at some point, use the DRL6Parser to figure what to add, // and potentially also just modify the tree it generates to add the import and globals we want final String[] drls = new String[liveRules.size()]; int i = 0; for (String drl : liveRules) { drls[i] = "package org.graylog2.rules\n" + "import org.graylog2.plugin.*\n" + "global org.slf4j.Logger log\n" + "\n" + drl; i++; } createAndDeployJar(kieServices, newReleaseId, drls); if (kieContainer == null) { kieContainer = kieServices.newKieContainer(newReleaseId); final KieSession session = kieContainer.newKieSession(); this.session.set(session); session.setGlobal("log", LOG); } kieContainer.updateToVersion(newReleaseId); return true; } catch (RulesCompilationException e) { LOG.warn("Unable to add rules due to compilation errors.", e); return false; } }
@Test public void testFromClonedKiePackageThenUpgrade() { final KieServices ks = KieServices.Factory.get(); final ReleaseId v100 = ks.newReleaseId("org.kie", "dmn-test", "1.0.0"); KieHelper.createAndDeployJar(ks, v100, wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("0001-input-data-string.dmn", this.getClass()))); KieContainer kieContainer = ks.newKieContainer(v100); DMNRuntime runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); kieContainer.dispose(); kieContainer = ks.newKieContainer(v100); runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); final ReleaseId v101 = ks.newReleaseId("org.kie", "dmn-test", "1.0.1"); final Resource newClassPathResource = ks.getResources().newClassPathResource("0001-input-data-string-itIT.dmn", this.getClass()); newClassPathResource.setTargetPath("0001-input-data-string.dmn"); KieHelper.createAndDeployJar(ks, v101, wrapWithDroolsModelResource(ks, newClassPathResource)); final Results updateResults = kieContainer.updateToVersion(v101); assertThat(updateResults.hasMessages(Level.ERROR), is(false)); runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); }
@Test public void testKJarUpgradeWithJavaClass() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-upgrade-java", "1.0.0" ); Resource javaResource = ResourceFactory.newByteArrayResource(javaSrc.getBytes()).setResourceType( ResourceType.JAVA ) .setSourcePath( "org/drools/compiler/test/PersonObject.java" ); kieContainer = ks.newKieContainer( km.getReleaseId() ); ksession = kieContainer.newKieSession(); ksession.fireAllRules(); assertEquals("Person from version 1", personId); kieContainer.updateToVersion(releaseId2); assertEquals(releaseId2, kieContainer.getReleaseId()); ksession = kieContainer.newKieSession(); ksession.fireAllRules(); assertEquals("Person from version 2", personId);
@Test public void testUpgrade() throws Exception { final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId_v10 = ks.newReleaseId("org.kie", "dmn-test-PR1997", "1.0"); KieHelper.createAndDeployJar(ks, releaseId_v10, wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("/org/kie/dmn/core/incrementalcompilation/v1/20180731-pr1997.dmn", this.getClass()) .setTargetPath("20180731-pr1997.dmn"), ks.getResources().newClassPathResource("/org/kie/dmn/core/incrementalcompilation/v1/Person.java", this.getClass()) .setTargetPath("acme/Person.java"))); final KieContainer kieContainer = ks.newKieContainer(releaseId_v10); final DMNRuntime runtime = DMNRuntimeUtil.typeSafeGetKieRuntime(kieContainer); checkTestUpgrade(kieContainer, runtime, "setFirstName", "setLastName", "Hello John Doe, your age is: 47"); final ReleaseId releaseId_v11 = ks.newReleaseId("org.kie", "dmn-test-PR1997", "1.1"); KieHelper.createAndDeployJar(ks, releaseId_v11, wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("/org/kie/dmn/core/incrementalcompilation/v2/20180731-pr1997.dmn", this.getClass()) .setTargetPath("20180731-pr1997.dmn"), ks.getResources().newClassPathResource("/org/kie/dmn/core/incrementalcompilation/v2/Person.java", this.getClass()) .setTargetPath("acme/Person.java"))); kieContainer.updateToVersion(releaseId_v11); checkTestUpgrade(kieContainer, runtime, "setFN", "setLN", "UPGRADED Hello John Doe, your age is: 47"); }
@Test public void testIncrementalBuilding() throws Exception { ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId( "org.test", "test", "1.0.0-SNAPSHOT" ); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieBuilder kb = ks.newKieBuilder( kfs ); kfs.generateAndWritePomXML( releaseId1 ); kfs.write( ResourceFactory.newClassPathResource( source1 ).setResourceType( ResourceType.PMML ) ); kb.buildAll(); KieContainer kc = ks.newKieContainer( releaseId1 ); KieSession kSession = kc.newKieSession(); setKbase( kSession.getKieBase() ); kSession.fireAllRules(); kfs.write( ResourceFactory.newClassPathResource( source2 ).setResourceType( ResourceType.PMML ) ); IncrementalResults results = (( InternalKieBuilder ) kb ).incrementalBuild(); kc.updateToVersion( releaseId1 ); kSession.fireAllRules(); assertEquals( 2, kSession.getObjects( new ClassObjectFilter( ModelMarker.class ) ).size() ); assertEquals( 11, kSession.getObjects( new ClassObjectFilter( kSession.getKieBase().getFactType( packageName, "Synapse" ).getFactClass() ) ).size() ); kSession.dispose(); checkGeneratedRules(); }
@Test public void testRemoveAndAddSomething() { final KieServices ks = KieServices.Factory.get(); final KieContainer kieContainer = KieHelper.getKieContainer( ks.newReleaseId("org.kie", "dmn-test", "1.0.0"), wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("0001-input-data-string.dmn", this.getClass()))); DMNRuntime runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); check0001_input_data_string(runtime); final ReleaseId v101 = ks.newReleaseId("org.kie", "dmn-test", "1.0.1"); KieHelper.createAndDeployJar(ks, v101, wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("0001-input-data-string-itIT.dmn", this.getClass()))); final Results updateResults = kieContainer.updateToVersion(v101); assertThat(updateResults.hasMessages(Level.ERROR), is(false)); runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); final DMNContext dmnContext2 = runtime.newContext(); dmnContext2.set("Full Name", "John Doe"); final DMNResult evaluateAll2 = runtime.evaluateAll(runtime.getModels().get(0), dmnContext2); assertThat(evaluateAll2.getDecisionResultByName("Greeting Message").getResult(), is("Salve John Doe")); }
@Test public void testIncrementalBuilding() throws Exception { ReleaseId releaseId1 = KieServices.Factory.get().newReleaseId( "org.test", "test", "1.0.0-SNAPSHOT" ); KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieBuilder kb = ks.newKieBuilder( kfs ); kfs.generateAndWritePomXML( releaseId1 ); kfs.write( ResourceFactory.newClassPathResource( source1 ).setResourceType( ResourceType.PMML ) ); kb.buildAll(); KieContainer kc = ks.newKieContainer( releaseId1 ); KieSession kSession = kc.newKieSession(); setKbase( kSession.getKieBase() ); kSession.fireAllRules(); kfs.write( ResourceFactory.newClassPathResource( source2 ).setResourceType( ResourceType.PMML ) ); IncrementalResults results = (( InternalKieBuilder ) kb ).incrementalBuild(); kc.updateToVersion( releaseId1 ); kSession.fireAllRules(); assertEquals( 1, kSession.getObjects( new ClassObjectFilter( ModelMarker.class ) ).size() ); assertEquals( 9, kSession.getObjects( new ClassObjectFilter( kSession.getKieBase().getFactType( packageName, "Synapse" ).getFactClass() ) ).size() ); kSession.dispose(); checkGeneratedRules(); }
@Test public void testReplace() { final KieServices ks = KieServices.Factory.get(); final KieContainer kieContainer = KieHelper.getKieContainer( ks.newReleaseId("org.kie", "dmn-test", "1.0.0"), wrapWithDroolsModelResource(ks, ks.getResources().newClassPathResource("0001-input-data-string.dmn", this.getClass()))); DMNRuntime runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); check0001_input_data_string(runtime); final ReleaseId v101 = ks.newReleaseId("org.kie", "dmn-test", "1.0.1"); final Resource newClassPathResource = ks.getResources().newClassPathResource("0001-input-data-string-itIT.dmn", this.getClass()); newClassPathResource.setTargetPath("0001-input-data-string.dmn"); KieHelper.createAndDeployJar(ks, v101, wrapWithDroolsModelResource(ks, newClassPathResource)); final Results updateResults = kieContainer.updateToVersion(v101); assertThat(updateResults.hasMessages(Level.ERROR), is(false)); runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); final DMNContext dmnContext2 = runtime.newContext(); dmnContext2.set("Full Name", "John Doe"); final DMNResult evaluateAll2 = runtime.evaluateAll(runtime.getModels().get(0), dmnContext2); assertThat(evaluateAll2.getDecisionResultByName("Greeting Message").getResult(), is("Salve John Doe")); }
@Test public void testReplaceDisposeCreateReplace() { final KieServices ks = KieServices.Factory.get(); DMNRuntime runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); final ReleaseId v101 = ks.newReleaseId("org.kie", "dmn-test", "1.0.1"); final Resource newClassPathResource = ks.getResources().newClassPathResource("0001-input-data-string-itIT.dmn", this.getClass()); newClassPathResource.setTargetPath("0001-input-data-string.dmn"); wrapWithDroolsModelResource(ks, newClassPathResource)); Results updateResults = kieContainer.updateToVersion(v101); assertThat(updateResults.hasMessages(Level.ERROR), is(false)); runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); Assert.assertNotNull(runtime); assertThat(runtime.getModels(), hasSize(1)); updateResults = kieContainer.updateToVersion(v101); assertThat(updateResults.hasMessages(Level.ERROR), is(false));