Search in sources :

Example 11 with KieSessionModel

use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.

the class KieHelloWorldTest method createKieProjectWithPackages.

private KieModuleModel createKieProjectWithPackages(KieServices ks, String pkg) {
    KieModuleModel kproj = ks.newKieModuleModel();
    KieBaseModel kieBaseModel1 = kproj.newKieBaseModel().setEqualsBehavior(EqualityBehaviorOption.EQUALITY).setEventProcessingMode(EventProcessingOption.STREAM).addPackage(pkg);
    KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setType(KieSessionType.STATEFUL).setClockType(ClockTypeOption.get("realtime")).setDefault(true);
    return kproj;
}
Also used : KieBaseModel(org.kie.api.builder.model.KieBaseModel) KieModuleModel(org.kie.api.builder.model.KieModuleModel) KieSessionModel(org.kie.api.builder.model.KieSessionModel)

Example 12 with KieSessionModel

use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.

the class ListenersTest method prepareKieModule.

/**
 * Inserts a new KieModule containing single KieBase and a stateful and stateless KieSessions with listeners
 * into KieRepository.
 *
 * @return created KIE module ReleaseId
 */
private ReleaseId prepareKieModule() {
    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(MarkingAgendaEventListener.class.getName(), ListenerModel.Kind.AGENDA_EVENT_LISTENER);
    statelessSessionModel.newListenerModel(MarkingRuntimeEventListener.class.getName(), ListenerModel.Kind.RULE_RUNTIME_EVENT_LISTENER);
    KieFileSystem kfs = ks.newKieFileSystem();
    kfs.writeKModuleXML(module.toXML());
    kfs.generateAndWritePomXML(RELEASE_ID);
    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());
    return RELEASE_ID;
}
Also used : KieBaseModel(org.kie.api.builder.model.KieBaseModel) KieFileSystem(org.kie.api.builder.KieFileSystem) KieModuleModel(org.kie.api.builder.model.KieModuleModel) KieServices(org.kie.api.KieServices) KieBuilder(org.kie.api.builder.KieBuilder) KieSessionModel(org.kie.api.builder.model.KieSessionModel)

Example 13 with KieSessionModel

use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.

the class MBeansMonitoringTest method testAggregatedAndDispose.

@Test
public void testAggregatedAndDispose() throws Exception {
    String drl = "package org.drools.compiler.integrationtests\n" + "rule ND\n" + "when\n" + "    String() \n" + "    not ( Double() ) \n" + "then\n" + "    // do nothing. \n" + "end\n" + "rule ND2\n" + "salience 1\n" + "when\n" + "    $s : String() \n" + "    not ( Double() ) \n" + "then\n" + "    try { Thread.sleep(10); } catch (Exception e) { }\n" + "    insert( new Double(0) );\n" + "    retract( $s );\n" + "end\n";
    KieServices ks = KieServices.Factory.get();
    KieModuleModel kproj = ks.newKieModuleModel();
    KieBaseModel kieBaseModel1 = kproj.newKieBaseModel(KBASE1).setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
    KieSessionModel ksessionModel1 = kieBaseModel1.newKieSessionModel(KSESSION1).setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
    KieBaseModel kieBaseModel2 = kproj.newKieBaseModel(KBASE2).setDefault(false);
    KieSessionModel ksessionModel2 = kieBaseModel2.newKieSessionModel(KSESSION2).setDefault(true).setType(KieSessionModel.KieSessionType.STATELESS);
    ReleaseId releaseId1 = ks.newReleaseId("org.kie.test", "mbeans", "1.0.0");
    createKJar(ks, kproj, releaseId1, null, drl);
    String containerId = "myContainerId";
    KieContainer kc = ks.newKieContainer(containerId, releaseId1);
    KieBase kiebase = kc.getKieBase(KBASE1);
    KieSessionConfiguration sessionConf = ks.newKieSessionConfiguration();
    sessionConf.setOption(ForceEagerActivationOption.YES);
    KieSession ksession = kc.newKieSession(KSESSION1, sessionConf);
    MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer();
    KieSessionMonitoringMXBean aggrMonitor = JMX.newMXBeanProxy(mbserver, DroolsManagementAgent.createObjectNameBy(containerId, KBASE1, KieSessionType.STATEFUL, KSESSION1), KieSessionMonitoringMXBean.class);
    long tft = 0;
    print(aggrMonitor);
    checkAgendaTotals(aggrMonitor, 0, 0, 0);
    checkTotalFactCount(aggrMonitor, 0);
    tft = checkTotalFiringTimeGEQ(aggrMonitor, tft);
    checkTotalSessions(aggrMonitor, 1);
    assertNull(aggrMonitor.getStatsForRule("ND"));
    assertNull(aggrMonitor.getStatsForRule("ND2"));
    assertFalse(aggrMonitor.getStatsByRule().containsKey("ND"));
    assertFalse(aggrMonitor.getStatsByRule().containsKey("ND2"));
    ksession.insert("Ciao");
    ksession.fireAllRules();
    print(aggrMonitor);
    checkAgendaTotals(aggrMonitor, 2, 1, 1);
    checkTotalFactCount(aggrMonitor, 1);
    tft = checkTotalFiringTimeGEQ(aggrMonitor, tft + 1);
    checkTotalSessions(aggrMonitor, 1);
    checkStatsForRule(aggrMonitor, "ND", 1, 1, 0);
    checkStatsForRule(aggrMonitor, "ND2", 1, 0, 1);
    checkStatsByRule(aggrMonitor, "ND", 1, 1, 0);
    checkStatsByRule(aggrMonitor, "ND2", 1, 0, 1);
    ksession.fireAllRules();
    print(aggrMonitor);
    checkAgendaTotals(aggrMonitor, 2, 1, 1);
    checkTotalFactCount(aggrMonitor, 1);
    tft = checkTotalFiringTimeGEQ(aggrMonitor, tft);
    checkTotalSessions(aggrMonitor, 1);
    checkStatsForRule(aggrMonitor, "ND", 1, 1, 0);
    checkStatsForRule(aggrMonitor, "ND2", 1, 0, 1);
    checkStatsByRule(aggrMonitor, "ND", 1, 1, 0);
    checkStatsByRule(aggrMonitor, "ND2", 1, 0, 1);
    LOG.debug("---");
    KieSession ksession2 = kc.newKieSession(KSESSION1, sessionConf);
    ksession2.insert("Ciao");
    ksession2.fireAllRules();
    print(aggrMonitor);
    checkAgendaTotals(aggrMonitor, 4, 2, 2);
    checkTotalFactCount(aggrMonitor, 2);
    tft = checkTotalFiringTimeGEQ(aggrMonitor, tft + 1);
    checkTotalSessions(aggrMonitor, 2);
    checkStatsForRule(aggrMonitor, "ND", 2, 2, 0);
    checkStatsForRule(aggrMonitor, "ND2", 2, 0, 2);
    checkStatsByRule(aggrMonitor, "ND", 2, 2, 0);
    checkStatsByRule(aggrMonitor, "ND2", 2, 0, 2);
    ksession.dispose();
    checkTotalSessions(aggrMonitor, 1);
    checkTotalFactCount(aggrMonitor, 1);
    ksession2.dispose();
    checkTotalSessions(aggrMonitor, 0);
    checkTotalFactCount(aggrMonitor, 0);
    LOG.debug("--- NOW for the STATELESS ---");
    tft = 0;
    StatelessKieSession stateless = kc.newStatelessKieSession(KSESSION2, sessionConf);
    StatelessKieSessionMonitoringMXBean aggrMonitor2 = JMX.newMXBeanProxy(mbserver, DroolsManagementAgent.createObjectNameBy(containerId, KBASE2, KieSessionType.STATELESS, KSESSION2), StatelessKieSessionMonitoringMXBean.class);
    print(aggrMonitor2);
    checkAgendaTotals(aggrMonitor2, 0, 0, 0);
    checkRuleRuntimeTotals(aggrMonitor2, 0, 0);
    tft = checkTotalFiringTimeGEQ(aggrMonitor2, tft);
    checkTotalSessions(aggrMonitor2, 0);
    assertNull(aggrMonitor2.getStatsForRule("ND"));
    assertNull(aggrMonitor2.getStatsForRule("ND2"));
    assertFalse(aggrMonitor2.getStatsByRule().containsKey("ND"));
    assertFalse(aggrMonitor2.getStatsByRule().containsKey("ND2"));
    stateless.execute("Ciao");
    print(aggrMonitor2);
    checkAgendaTotals(aggrMonitor2, 2, 1, 1);
    checkRuleRuntimeTotals(aggrMonitor2, 2, 1);
    tft = checkTotalFiringTimeGEQ(aggrMonitor2, tft + 1);
    checkTotalSessions(aggrMonitor2, 1);
    checkStatsForRule(aggrMonitor2, "ND", 1, 1, 0);
    checkStatsForRule(aggrMonitor2, "ND2", 1, 0, 1);
    checkStatsByRule(aggrMonitor2, "ND", 1, 1, 0);
    checkStatsByRule(aggrMonitor2, "ND2", 1, 0, 1);
    stateless.execute("Ciao");
    print(aggrMonitor2);
    checkAgendaTotals(aggrMonitor2, 4, 2, 2);
    checkRuleRuntimeTotals(aggrMonitor2, 4, 2);
    tft = checkTotalFiringTimeGEQ(aggrMonitor2, tft + 1);
    checkTotalSessions(aggrMonitor2, 2);
    checkStatsForRule(aggrMonitor2, "ND", 2, 2, 0);
    checkStatsForRule(aggrMonitor2, "ND2", 2, 0, 2);
    checkStatsByRule(aggrMonitor2, "ND", 2, 2, 0);
    checkStatsByRule(aggrMonitor2, "ND2", 2, 0, 2);
    StatelessKieSession stateless2 = kc.newStatelessKieSession(KSESSION2, sessionConf);
    LOG.debug(stateless + " " + stateless2);
    checkTotalSessions(aggrMonitor2, 2);
    stateless2.execute("Ciao");
    print(aggrMonitor2);
    checkAgendaTotals(aggrMonitor2, 6, 3, 3);
    checkRuleRuntimeTotals(aggrMonitor2, 6, 3);
    tft = checkTotalFiringTimeGEQ(aggrMonitor2, tft + 1);
    checkTotalSessions(aggrMonitor2, 3);
    checkStatsForRule(aggrMonitor2, "ND", 3, 3, 0);
    checkStatsForRule(aggrMonitor2, "ND2", 3, 0, 3);
    checkStatsByRule(aggrMonitor2, "ND", 3, 3, 0);
    checkStatsByRule(aggrMonitor2, "ND2", 3, 0, 3);
    KieContainer kc2 = ks.newKieContainer("kc2", releaseId1);
    assertEquals(5, mbserver.queryNames(new ObjectName("org.kie:kcontainerId=" + ObjectName.quote(containerId) + ",*"), null).size());
    kc.dispose();
    assertEquals(0, mbserver.queryNames(new ObjectName("org.kie:kcontainerId=" + ObjectName.quote(containerId) + ",*"), null).size());
    assertEquals(1, mbserver.queryNames(new ObjectName("org.kie:kcontainerId=" + ObjectName.quote("kc2") + ",*"), null).size());
}
Also used : GenericKieSessionMonitoringMXBean(org.kie.api.management.GenericKieSessionMonitoringMXBean) KieSessionMonitoringMXBean(org.kie.api.management.KieSessionMonitoringMXBean) StatelessKieSessionMonitoringMXBean(org.kie.api.management.StatelessKieSessionMonitoringMXBean) KieServices(org.kie.api.KieServices) ReleaseId(org.kie.api.builder.ReleaseId) KieSessionModel(org.kie.api.builder.model.KieSessionModel) ObjectName(javax.management.ObjectName) KieBaseModel(org.kie.api.builder.model.KieBaseModel) KieModuleModel(org.kie.api.builder.model.KieModuleModel) KieBase(org.kie.api.KieBase) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KieSession(org.kie.api.runtime.KieSession) StatelessKieSessionMonitoringMXBean(org.kie.api.management.StatelessKieSessionMonitoringMXBean) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) InternalKieContainer(org.drools.core.impl.InternalKieContainer) KieContainer(org.kie.api.runtime.KieContainer) MBeanServer(javax.management.MBeanServer) Test(org.junit.Test)

Example 14 with KieSessionModel

use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.

the class MBeansMonitoringTest method testEventOffset.

@Test
public void testEventOffset() throws Exception {
    String drl = "package org.drools.compiler.test\n" + "import org.drools.compiler.StockTick\n" + "declare StockTick\n" + "    @role(event)\n" + "    @expires(10s)\n" + "end\n" + "rule X\n" + "when\n" + "    StockTick()\n" + "then\n" + "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();
    ObjectName kbOn = DroolsManagementAgent.createObjectNameFor((InternalKnowledgeBase) kiebase);
    mbserver.invoke(kbOn, "startInternalMBeans", new Object[0], new String[0]);
    Object expOffset = mbserver.getAttribute(new ObjectName(kbOn + ",group=EntryPoints,EntryPoint=DEFAULT,ObjectType=org.drools.compiler.StockTick"), "ExpirationOffset");
    assertEquals(10001, ((Number) expOffset).longValue());
}
Also used : KieBaseModel(org.kie.api.builder.model.KieBaseModel) KieModuleModel(org.kie.api.builder.model.KieModuleModel) KieBase(org.kie.api.KieBase) KieServices(org.kie.api.KieServices) ReleaseId(org.kie.api.builder.ReleaseId) KieSessionModel(org.kie.api.builder.model.KieSessionModel) InternalKieContainer(org.drools.core.impl.InternalKieContainer) KieContainer(org.kie.api.runtime.KieContainer) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName) Test(org.junit.Test)

Example 15 with KieSessionModel

use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.

the class ClassLoaderTest method testClassLoaderFromPojo.

@Test
public void testClassLoaderFromPojo() throws IOException {
    // DROOLS-1108
    final String source = "package org.drools.testdrl;\n" + "public class MyPojo {\n" + "    public String getUrlPath() {" + "        return getClass().getClassLoader().getResource(\"META-INF/foo.xml\").getPath();\n" + "    }\n" + "}\n";
    final String drl1 = "package org.drools.testdrl;\n" + "import org.drools.testdrl.MyPojo;\n" + "global java.util.List list;\n" + "rule R1 when\n" + "then\n" + "   insert(new MyPojo());\n" + "end\n" + "rule R2 when\n" + "    $m : MyPojo()\n" + "then\n" + "   list.add($m.getUrlPath());\n" + "end\n";
    final String foo = "<xyz/>\n";
    final KieServices ks = KieServices.Factory.get();
    final ReleaseId releaseId = ks.newReleaseId("org.kie", "test-cl", "1.0.0");
    final KieFileSystem kfs = ks.newKieFileSystem();
    final KieModuleModel kproj = ks.newKieModuleModel();
    final KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("testKbase").setDefault(true).addPackage("org.drools.testdrl");
    final KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("testKsession").setDefault(true);
    kfs.writeKModuleXML(kproj.toXML());
    kfs.write("src/main/resources/org/drools/testdrl/rules1.drl", drl1);
    kfs.write("src/main/java/org/drools/testdrl/MyPojo.java", source);
    kfs.write("src/main/resources/META-INF/foo.xml", foo);
    kfs.generateAndWritePomXML(releaseId);
    final KieBuilder kieBuilder = ks.newKieBuilder(kfs);
    assertTrue(kieBuilder.buildAll().getResults().getMessages().isEmpty());
    final KieContainer kieContainer = ks.newKieContainer(releaseId);
    final ClassLoader classLoader = kieContainer.getClassLoader();
    final URL url = classLoader.getResource("META-INF/foo.xml");
    assertNotNull(url);
    final KieSession ksession = kieContainer.newKieSession("testKsession");
    final List<URL> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertEquals(url.getPath(), list.get(0));
    ksession.dispose();
}
Also used : KieFileSystem(org.kie.api.builder.KieFileSystem) ArrayList(java.util.ArrayList) KieServices(org.kie.api.KieServices) ReleaseId(org.kie.api.builder.ReleaseId) URL(java.net.URL) KieSessionModel(org.kie.api.builder.model.KieSessionModel) KieBaseModel(org.kie.api.builder.model.KieBaseModel) KieModuleModel(org.kie.api.builder.model.KieModuleModel) KieSession(org.kie.api.runtime.KieSession) KieBuilder(org.kie.api.builder.KieBuilder) KieContainer(org.kie.api.runtime.KieContainer) Test(org.junit.Test)

Aggregations

KieSessionModel (org.kie.api.builder.model.KieSessionModel)31 KieModuleModel (org.kie.api.builder.model.KieModuleModel)25 KieBaseModel (org.kie.api.builder.model.KieBaseModel)24 KieServices (org.kie.api.KieServices)18 Test (org.junit.Test)15 ReleaseId (org.kie.api.builder.ReleaseId)15 KieContainer (org.kie.api.runtime.KieContainer)14 KieSession (org.kie.api.runtime.KieSession)11 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)10 KieFileSystem (org.kie.api.builder.KieFileSystem)8 KieBuilder (org.kie.api.builder.KieBuilder)6 InternalKieContainer (org.drools.core.impl.InternalKieContainer)5 KieModule (org.kie.api.builder.KieModule)5 InternalKieModule (org.drools.compiler.kie.builder.impl.InternalKieModule)4 PseudoClockScheduler (org.drools.core.time.impl.PseudoClockScheduler)4 MBeanServer (javax.management.MBeanServer)3 ObjectName (javax.management.ObjectName)3 KieBase (org.kie.api.KieBase)3 StringReader (java.io.StringReader)2 ArrayList (java.util.ArrayList)2