Created
October 7, 2016 15:58
-
-
Save tarilabs/0dc970e218bbcf7c694bd43b11d9eaf5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.drools.persistence.monitoring; | |
import org.drools.compiler.Person; | |
import org.drools.core.SessionConfiguration; | |
import org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession; | |
import org.drools.core.command.impl.FireAllRulesInterceptor; | |
import org.drools.core.command.impl.LoggingInterceptor; | |
import org.drools.core.factmodel.traits.Traitable; | |
import org.drools.core.management.DroolsManagementAgent; | |
import org.drools.core.time.SessionPseudoClock; | |
import org.drools.persistence.SingleSessionCommandService; | |
import org.drools.persistence.util.DroolsPersistenceUtil; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.junit.runners.Parameterized; | |
import org.junit.runners.Parameterized.Parameters; | |
import org.kie.api.KieBase; | |
import org.kie.api.KieServices; | |
import org.kie.api.builder.KieFileSystem; | |
import org.kie.api.builder.model.KieModuleModel; | |
import org.kie.api.builder.model.KieSessionModel.KieSessionType; | |
import org.kie.api.conf.MBeansOption; | |
import org.kie.api.definition.type.FactType; | |
import org.kie.api.definition.type.Position; | |
import org.kie.api.io.Resource; | |
import org.kie.api.management.KieContainerMonitorMXBean; | |
import org.kie.api.management.KieSessionMonitoringMXBean; | |
import org.kie.api.management.StatelessKieSessionMonitoringMXBean; | |
import org.kie.api.runtime.Environment; | |
import org.kie.api.runtime.EnvironmentName; | |
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.api.runtime.conf.KieSessionOption; | |
import org.kie.api.runtime.conf.KieSessionOptionsConfiguration; | |
import org.kie.api.runtime.rule.FactHandle; | |
import org.kie.internal.command.CommandFactory; | |
import org.kie.internal.persistence.jpa.JPAKnowledgeService; | |
import org.kie.internal.runtime.StatefulKnowledgeSession; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import bitronix.tm.TransactionManagerServices; | |
import javax.management.JMX; | |
import javax.management.MBeanServer; | |
import javax.management.MalformedObjectNameException; | |
import javax.management.ObjectName; | |
import javax.naming.InitialContext; | |
import javax.persistence.Persistence; | |
import javax.transaction.UserTransaction; | |
import java.io.Serializable; | |
import java.lang.management.ManagementFactory; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.Collection; | |
import java.util.Iterator; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.Properties; | |
import java.util.UUID; | |
import java.util.concurrent.atomic.AtomicInteger; | |
import static org.drools.persistence.util.DroolsPersistenceUtil.DROOLS_PERSISTENCE_UNIT_NAME; | |
import static org.drools.persistence.util.DroolsPersistenceUtil.OPTIMISTIC_LOCKING; | |
import static org.drools.persistence.util.DroolsPersistenceUtil.PESSIMISTIC_LOCKING; | |
import static org.drools.persistence.util.DroolsPersistenceUtil.createEnvironment; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertNotNull; | |
import static org.junit.Assert.assertSame; | |
import static org.junit.Assert.assertTrue; | |
@RunWith(Parameterized.class) | |
public class MonitoringWithJPAKnowledgeServiceTest { | |
private static Logger logger = LoggerFactory.getLogger(MonitoringWithJPAKnowledgeServiceTest.class); | |
private Map<String, Object> context; | |
private Environment env; | |
private boolean locking; | |
@Parameters(name="{0}") | |
public static Collection<Object[]> persistence() { | |
Object[][] locking = new Object[][] { | |
{ OPTIMISTIC_LOCKING }, | |
{ PESSIMISTIC_LOCKING } | |
}; | |
return Arrays.asList(locking); | |
}; | |
public MonitoringWithJPAKnowledgeServiceTest(String locking) { | |
this.locking = PESSIMISTIC_LOCKING.equals(locking); | |
} | |
private static String mbeansprop; | |
@BeforeClass | |
public static void setUpClass() throws Exception { | |
mbeansprop = System.getProperty( MBeansOption.PROPERTY_NAME ); | |
System.setProperty( MBeansOption.PROPERTY_NAME, "enabled" ); | |
} | |
@AfterClass | |
public static void tearDownClass() throws Exception { | |
if (mbeansprop != null) { | |
System.setProperty( MBeansOption.PROPERTY_NAME, mbeansprop ); | |
} else { | |
System.setProperty( MBeansOption.PROPERTY_NAME, MBeansOption.DISABLED.toString() ); | |
} | |
} | |
@Before | |
public void setUp() throws Exception { | |
context = DroolsPersistenceUtil.setupWithPoolingDataSource(DROOLS_PERSISTENCE_UNIT_NAME); | |
env = createEnvironment(context); | |
if( locking ) { | |
env.set(EnvironmentName.USE_PESSIMISTIC_LOCKING, true); | |
} | |
} | |
@After | |
public void tearDown() throws Exception { | |
DroolsPersistenceUtil.cleanUp(context); | |
} | |
@Test | |
public void testBasic() throws MalformedObjectNameException { | |
MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); | |
KieServices ks = KieServices.Factory.get(); | |
String containerId = "testcontainer-"+System.currentTimeMillis(); | |
KieContainer kc = ks.newKieClasspathContainer(containerId); | |
KieContainerMonitorMXBean c1Monitor = JMX.newMXBeanProxy( | |
mbserver, | |
DroolsManagementAgent.createObjectNameBy(containerId), | |
KieContainerMonitorMXBean.class); | |
KieBase kb = kc.getKieBase("org.kie.monitoring.kbase1"); | |
// Use JPAKnowledgeService to create the KieSession | |
StatefulKnowledgeSession statefulKieSession = JPAKnowledgeService.newStatefulKnowledgeSession(kb, null, createEnvironment(context)); | |
System.out.println(statefulKieSession); | |
KieSessionMonitoringMXBean statefulKieSessionMonitor = JMX.newMXBeanProxy( | |
mbserver, | |
DroolsManagementAgent.createObjectNameBy(containerId, "org.kie.monitoring.kbase1", KieSessionType.STATEFUL, "org.kie.monitoring.kbase1.ksession1"), | |
KieSessionMonitoringMXBean.class); | |
// There should be 3 mbeans for KieContainer, KieBase and KieSession. | |
assertEquals(3, mbserver.queryNames(new ObjectName("org.kie:kcontainerId="+ObjectName.quote(containerId)+",*"), null).size()); | |
// needs to be done separately: | |
statefulKieSession.dispose(); | |
kc.dispose(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment