package org.drools.container.spring.timer; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.base.MapGlobalResolver; import org.drools.persistence.jpa.KnowledgeStoreService; import org.drools.runtime.Environment; import org.drools.runtime.EnvironmentName; import org.drools.runtime.StatefulKnowledgeSession; import org.slf4j.LoggerFactory; import org.springframework.orm.jpa.JpaTransactionManager; public class MyDroolsBean { public static int TIMER_TRIGGER_COUNT; private static int sessionId; private EntityManagerFactory emf; private KnowledgeBase kbase; private KnowledgeStoreService kstore; private JpaTransactionManager txm; org.slf4j.Logger logger = LoggerFactory.getLogger( getClass() ); private TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); public void initStartDisposeAndLoadSession() { try { EntityManager em = txm.getEntityManagerFactory().createEntityManager(); // create new ksession with kstore StatefulKnowledgeSession ksession = kstore.newStatefulKnowledgeSession( kbase, null, getEnvironment() ); sessionId = ksession.getId(); logger.info( "\n\tSession id: " + sessionId + "\n" ); ksession.getWorkItemManager().registerWorkItemHandler( "testWorkItemHandler", workItemHandler ); ksession.startProcess( "timer-flow", null ); Thread.sleep( 4000 ); ksession.dispose(); } catch ( Exception ex ) { logger.error( "Exception", ex ); } } public void endTheProcess() { try { StatefulKnowledgeSession ksession = kstore.loadStatefulKnowledgeSession( sessionId, kbase, null, getEnvironment() ); //Sleep to check if the timer continues executing. logger.info( "\n\nSleeping to check that the timer is still running" ); Thread.sleep( 5000 ); ksession.getWorkItemManager().completeWorkItem( TestWorkItemHandler.getWorkItem().getId(), null ); logger.info( "\n\nSleeping to check that the timer is no longer running" ); Thread.sleep( 3000 ); logger.info( "Ok" ); ksession.dispose(); } catch ( InterruptedException ex ) { logger.error( "Exception", ex ); } } private Environment getEnvironment() { Environment environment = KnowledgeBaseFactory.newEnvironment(); environment.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); environment.set( EnvironmentName.TRANSACTION_MANAGER, txm ); environment.set( EnvironmentName.GLOBALS, new MapGlobalResolver() ); return environment; } public void setEmf(EntityManagerFactory emf) { this.emf = emf; } public void setKbase(KnowledgeBase kbase) { this.kbase = kbase; } public void setKstore(KnowledgeStoreService kstore) { this.kstore = kstore; } public void setTxm(JpaTransactionManager txm) { this.txm = txm; } }