/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.compiler.integrationtests; import org.drools.compiler.CommonTestMethodBase; import org.drools.compiler.kie.builder.impl.InternalKieContainer; import org.drools.compiler.kie.builder.impl.KieServicesImpl; import org.drools.core.ClockType; import org.drools.core.impl.InternalKnowledgeBase; import org.drools.core.management.DroolsManagementAgent; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.builder.KieModule; import org.kie.api.builder.KieRepository; import org.kie.api.builder.ReleaseId; import org.kie.api.builder.model.KieBaseModel; import org.kie.api.builder.model.KieModuleModel; import org.kie.api.builder.model.KieSessionModel; import org.kie.api.builder.model.KieSessionModel.KieSessionType; import org.kie.api.conf.EventProcessingOption; import org.kie.api.conf.MBeansOption; import org.kie.api.management.KieContainerMonitorMXBean; import org.kie.api.management.GenericKieSessionMonitoringMXBean; import org.kie.api.management.KieSessionMonitoringMXBean; import org.kie.api.management.StatelessKieSessionMonitoringMXBean; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSessionConfiguration; import org.kie.api.runtime.StatelessKieSession; import org.kie.api.runtime.conf.ClockTypeOption; import org.kie.internal.runtime.conf.ForceEagerActivationOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.management.ManagementFactory; import java.net.URL; import java.net.URLClassLoader; import java.util.Scanner; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.management.JMX; import javax.management.MBeanServer; import javax.management.ObjectName; public class MBeansMonitoringTest extends CommonTestMethodBase { public static final Logger LOG = LoggerFactory.getLogger(MBeansMonitoringTest.class); public static final String KSESSION1 = "KSession1"; public static final String KBASE1 = "KBase1"; private static final String KBASE2 = "KBase2"; private static final String KSESSION2 = "KSession2"; private String mbeansprop; @Before public void setUp() throws Exception { ((KieServicesImpl) KieServices.Factory.get()).nullKieClasspathContainer(); ((KieServicesImpl) KieServices.Factory.get()).nullAllContainerIds(); mbeansprop = System.getProperty( MBeansOption.PROPERTY_NAME ); System.setProperty( MBeansOption.PROPERTY_NAME, "enabled" ); } @After public void tearDown() throws Exception { ((KieServicesImpl) KieServices.Factory.get()).nullKieClasspathContainer(); ((KieServicesImpl) KieServices.Factory.get()).nullAllContainerIds(); if (mbeansprop != null) { System.setProperty( MBeansOption.PROPERTY_NAME, mbeansprop ); } else { System.setProperty( MBeansOption.PROPERTY_NAME, MBeansOption.DISABLED.toString() ); } } @Test public void testKieClasspathMBeans() throws Exception { MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); KieServices ks = KieServices.Factory.get(); KieContainer kc = ks.getKieClasspathContainer("myID"); KieContainerMonitorMXBean c1Monitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID"), KieContainerMonitorMXBean.class); KieBase kb = kc.getKieBase("org.kie.monitoring.kbase1"); KieSession statefulKieSession = kc.newKieSession("org.kie.monitoring.kbase1.ksession1"); StatelessKieSession statelessKieSession = kc.newStatelessKieSession("org.kie.monitoring.kbase1.ksession2"); KieSessionMonitoringMXBean statefulKieSessionMonitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID", "org.kie.monitoring.kbase1", KieSessionType.STATEFUL, "org.kie.monitoring.kbase1.ksession1"), KieSessionMonitoringMXBean.class); StatelessKieSessionMonitoringMXBean statelessKieSessionMonitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID", "org.kie.monitoring.kbase1", KieSessionType.STATEFUL, "org.kie.monitoring.kbase1.ksession1"), StatelessKieSessionMonitoringMXBean.class); assertEquals("myID", c1Monitor.getContainerId() ); assertTrue(c1Monitor.getConfiguredReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertTrue(c1Monitor.getResolvedReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertEquals("org.kie.monitoring.kbase1.ksession1", statefulKieSessionMonitor.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statefulKieSessionMonitor.getKieBaseId()); assertEquals("org.kie.monitoring.kbase1.ksession1", statelessKieSessionMonitor.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statelessKieSessionMonitor.getKieBaseId()); KieContainer kc2 = ks.newKieClasspathContainer("myID2"); KieContainerMonitorMXBean c2Monitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID2"), KieContainerMonitorMXBean.class); KieBase kb2 = kc2.getKieBase("org.kie.monitoring.kbase1"); KieSession statefulKieSession2 = kc2.newKieSession("org.kie.monitoring.kbase1.ksession1"); StatelessKieSession statelessKieSession2 = kc2.newStatelessKieSession("org.kie.monitoring.kbase1.ksession2"); KieSessionMonitoringMXBean statefulKieSessionMonitor2 = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID2", "org.kie.monitoring.kbase1", KieSessionType.STATEFUL, "org.kie.monitoring.kbase1.ksession1"), KieSessionMonitoringMXBean.class); StatelessKieSessionMonitoringMXBean statelessKieSessionMonitor2 = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID2", "org.kie.monitoring.kbase1", KieSessionType.STATEFUL, "org.kie.monitoring.kbase1.ksession1"), StatelessKieSessionMonitoringMXBean.class); assertEquals("myID2", c2Monitor.getContainerId() ); assertTrue(c2Monitor.getConfiguredReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertTrue(c2Monitor.getResolvedReleaseId().sameGAVof(KieContainerMonitorMXBean.CLASSPATH_KIECONTAINER_RELEASEID)); assertEquals("org.kie.monitoring.kbase1.ksession1", statefulKieSessionMonitor2.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statefulKieSessionMonitor2.getKieBaseId()); assertEquals("org.kie.monitoring.kbase1.ksession1", statelessKieSessionMonitor2.getKieSessionName()); assertEquals("org.kie.monitoring.kbase1", statelessKieSessionMonitor2.getKieBaseId()); kc.dispose(); kc2.dispose(); } @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" ); Assert.assertEquals( 10001, ((Number) expOffset).longValue() ); } @Test public void testContainerMBeans() 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 ksessionModel1 = 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 ); kc.newKieSession(KSESSION1); kiebase.newKieSession(); String kc1ID = ((InternalKieContainer) kc).getContainerId(); MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); LOG.debug("{}", mbserver.queryNames(new ObjectName("org.kie:kcontainerId="+ObjectName.quote(kc1ID)+",*"), null) ); ReleaseId verRelease = ks.newReleaseId("org.kie.test", "mbeans", "RELEASE" ); KieContainer kc2 = ks.newKieContainer( "Matteo", verRelease ); kc2.newKieSession(KSESSION1); KieContainerMonitorMXBean c1Monitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy(kc1ID), KieContainerMonitorMXBean.class); assertEquals(releaseId1.toExternalForm(), c1Monitor.getConfiguredReleaseIdStr()); assertEquals(releaseId1.toExternalForm(), c1Monitor.getResolvedReleaseIdStr()); assertTrue(c1Monitor.getConfiguredReleaseId().sameGAVof(releaseId1)); assertTrue(c1Monitor.getResolvedReleaseId().sameGAVof(releaseId1)); assertEquals(releaseId1.getVersion(), c1Monitor.getConfiguredReleaseId().getVersion()); assertEquals(releaseId1.getVersion(), c1Monitor.getResolvedReleaseId().getVersion()); KieContainerMonitorMXBean c2Monitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("Matteo"), KieContainerMonitorMXBean.class); assertEquals(verRelease.toExternalForm(), c2Monitor.getConfiguredReleaseIdStr()); assertEquals(releaseId1.toExternalForm(), c2Monitor.getResolvedReleaseIdStr()); assertTrue(c2Monitor.getConfiguredReleaseId().sameGAVof(verRelease)); assertTrue(c2Monitor.getResolvedReleaseId().sameGAVof(releaseId1)); assertEquals(verRelease.getVersion(), c2Monitor.getConfiguredReleaseId().getVersion()); assertEquals(releaseId1.getVersion(), c2Monitor.getResolvedReleaseId().getVersion()); // MBean are supported only via KieContainer public API. assertEquals(3, mbserver.queryNames(new ObjectName("org.kie:kcontainerId="+ObjectName.quote(kc1ID)+",*"), null).size()); kc.dispose(); assertEquals(0, mbserver.queryNames(new ObjectName("org.kie:kcontainerId="+ObjectName.quote(kc1ID)+",*"), null).size()); assertEquals(3, mbserver.queryNames(new ObjectName("org.kie:kcontainerId="+ObjectName.quote("Matteo")+",*"), null).size()); } @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); ksession2.dispose(); checkTotalSessions(aggrMonitor, 1); checkTotalFactCount(aggrMonitor, 1); ksession.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()); } private void checkStatsByRule(GenericKieSessionMonitoringMXBean mb, String ruleName, long mCreated, long mCancelled, long mFired) { assertEquals(mCreated , mb.getStatsByRule().get(ruleName).getMatchesCreated() ); assertEquals(mCancelled , mb.getStatsByRule().get(ruleName).getMatchesCancelled() ); assertEquals(mFired , mb.getStatsByRule().get(ruleName).getMatchesFired() ); } private void checkStatsForRule(GenericKieSessionMonitoringMXBean mb, String ruleName, long mCreated, long mCancelled, long mFired) { assertEquals(mCreated , mb.getStatsForRule(ruleName).getMatchesCreated() ); assertEquals(mCancelled , mb.getStatsForRule(ruleName).getMatchesCancelled() ); assertEquals(mFired , mb.getStatsForRule(ruleName).getMatchesFired() ); } private void print(GenericKieSessionMonitoringMXBean mb) { LOG.debug("total match created : {}",mb.getTotalMatchesCreated()); LOG.debug("total match cancelled: {}",mb.getTotalMatchesCancelled()); LOG.debug("total match fired : {}",mb.getTotalMatchesFired()); if (mb instanceof StatelessKieSessionMonitoringMXBean) { StatelessKieSessionMonitoringMXBean c = (StatelessKieSessionMonitoringMXBean) mb; LOG.debug("inserted and deleted : +{} -{}",c.getTotalObjectsInserted(),c.getTotalObjectsDeleted()); } else if (mb instanceof KieSessionMonitoringMXBean) { KieSessionMonitoringMXBean c = (KieSessionMonitoringMXBean) mb; LOG.debug("total tact count : {}",c.getTotalFactCount()); } LOG.debug("{} ms .", mb.getTotalFiringTime()); } private long checkTotalFiringTimeGEQ(GenericKieSessionMonitoringMXBean mb, long amount) { assertTrue(mb.getTotalFiringTime() >= amount); return mb.getTotalFiringTime(); } private void checkTotalSessions(GenericKieSessionMonitoringMXBean mb, int totalSessions) { assertEquals(totalSessions, mb.getTotalSessions() ); } private void checkTotalFactCount(KieSessionMonitoringMXBean mb, int factCount) { assertEquals(factCount , mb.getTotalFactCount() ); } private void checkRuleRuntimeTotals(StatelessKieSessionMonitoringMXBean mb, int inserted, int deleted) { assertEquals(inserted , mb.getTotalObjectsInserted() ); assertEquals(deleted , mb.getTotalObjectsDeleted() ); } private void checkAgendaTotals(GenericKieSessionMonitoringMXBean mb, long mCreated, long mCancelled, long mFired) { assertEquals(mCreated , mb.getTotalMatchesCreated() ); assertEquals(mCancelled , mb.getTotalMatchesCancelled() ); assertEquals(mFired , mb.getTotalMatchesFired() ); } /** * Copied from KieRepositoryTest to test JMX monitoring */ @Test public void testLoadKjarFromClasspath() { // DROOLS-1335 ClassLoader cl = Thread.currentThread().getContextClassLoader(); URLClassLoader urlClassLoader = new URLClassLoader( new URL[]{this.getClass().getResource( "/kie-project-simple-1.0.0.jar" )} ); Thread.currentThread().setContextClassLoader( urlClassLoader ); MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); try { KieServices ks = KieServices.Factory.get(); KieRepository kieRepository = ks.getRepository(); ReleaseId releaseId = ks.newReleaseId( "org.test", "kie-project-simple", "1.0.0" ); KieModule kieModule = kieRepository.getKieModule( releaseId ); assertNotNull( kieModule ); assertEquals( releaseId, kieModule.getReleaseId() ); ks.newKieContainer("myID", releaseId); KieContainerMonitorMXBean c1Monitor = JMX.newMXBeanProxy( mbserver, DroolsManagementAgent.createObjectNameBy("myID"), KieContainerMonitorMXBean.class); assertTrue(c1Monitor.getConfiguredReleaseId().sameGAVof(releaseId)); assertTrue(c1Monitor.getResolvedReleaseId().sameGAVof(releaseId)); } finally { Thread.currentThread().setContextClassLoader( cl ); } } }