[jboss-svn-commits] JBL Code SVN: r33618 - in labs/jbossrules/trunk: drools-process/drools-bam and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 23 22:32:05 EDT 2010
Author: KrisVerlaenen
Date: 2010-06-23 22:32:04 -0400 (Wed, 23 Jun 2010)
New Revision: 33618
Added:
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java
labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/orm.xml
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/jndi.properties
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml
Log:
JBRULES-2529: History Log: Support JPA for WorkingMemoryDbLogger
- added JPA-based implementation
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2010-06-24 01:26:47 UTC (rev 33617)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -270,5 +270,9 @@
}
ksession.fireAllRules( );
}
+
+ public Environment getEnvironment() {
+ return environment;
+ }
}
Modified: labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/pom.xml 2010-06-24 01:26:47 UTC (rev 33617)
+++ labs/jbossrules/trunk/drools-process/drools-bam/pom.xml 2010-06-24 02:32:04 UTC (rev 33618)
@@ -30,6 +30,12 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-persistence-jpa</artifactId>
+ <scope>test</scope>
+ </dependency>
+
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
@@ -37,6 +43,24 @@
<version>3.4.0.GA</version>
</dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <version>3.4.0.GA</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-commons-annotations</artifactId>
+ <version>3.1.0.GA</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>3.3.0.SP1</version>
+ </dependency>
+
<!-- H2 -->
<dependency>
<groupId>com.h2database</groupId>
@@ -59,6 +83,13 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.btm</groupId>
+ <artifactId>btm</artifactId>
+ <version>1.3.3</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1,112 @@
+package org.drools.process.audit;
+
+import java.util.List;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+
+public class JPAProcessInstanceDbLog {
+
+ private EntityManagerFactory emf;
+ private EntityManager em;
+
+ @SuppressWarnings("unchecked")
+ public List<ProcessInstanceLog> findProcessInstances() {
+ List<ProcessInstanceLog> result = getEntityManager()
+ .createQuery("FROM ProcessInstanceLog").getResultList();
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<ProcessInstanceLog> findProcessInstances(String processId) {
+ List<ProcessInstanceLog> result = getEntityManager()
+ .createQuery("FROM ProcessInstanceLog p WHERE p.processId = :processId")
+ .setParameter("processId", processId).getResultList();
+ return result;
+ }
+
+ public ProcessInstanceLog findProcessInstance(long processInstanceId) {
+ ProcessInstanceLog result = (ProcessInstanceLog) getEntityManager()
+ .createQuery("FROM ProcessInstanceLog p WHERE p.processInstanceId = :processInstanceId")
+ .setParameter("processInstanceId", processInstanceId).getSingleResult();
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<NodeInstanceLog> findNodeInstances(long processInstanceId) {
+ List<NodeInstanceLog> result = getEntityManager()
+ .createQuery("FROM NodeInstanceLog n WHERE n.processInstanceId = :processInstanceId ORDER BY date")
+ .setParameter("processInstanceId", processInstanceId).getResultList();
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<NodeInstanceLog> findNodeInstances(long processInstanceId, String nodeId) {
+ List<NodeInstanceLog> result = getEntityManager()
+ .createQuery("FROM NodeInstanceLog n WHERE WHERE n.processInstanceId = :processInstanceId AND n.nodeId = :nodeId ORDER BY date")
+ .setParameter("processInstanceId", processInstanceId)
+ .setParameter("nodeId", nodeId).getResultList();
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void clear() {
+ try {
+ UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ List<ProcessInstanceLog> processInstances = getEntityManager()
+ .createQuery("FROM ProcessInstanceLog").getResultList();
+ for (ProcessInstanceLog processInstance: processInstances) {
+ getEntityManager().remove(processInstance);
+ }
+ List<NodeInstanceLog> nodeInstances = getEntityManager()
+ .createQuery("FROM NodeInstanceLog").getResultList();
+ for (NodeInstanceLog nodeInstance: nodeInstances) {
+ getEntityManager().remove(nodeInstance);
+ }
+ em.joinTransaction();
+ ut.commit();
+ } catch (SecurityException e) {
+ e.printStackTrace();
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ } catch (RollbackException e) {
+ e.printStackTrace();
+ } catch (HeuristicMixedException e) {
+ e.printStackTrace();
+ } catch (HeuristicRollbackException e) {
+ e.printStackTrace();
+ } catch (SystemException e) {
+ e.printStackTrace();
+ } catch (NamingException e) {
+ e.printStackTrace();
+ } catch (NotSupportedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private EntityManager getEntityManager() {
+ if (emf == null) {
+ emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+ }
+ if (em == null) {
+ em = emf.createEntityManager();
+ }
+ return em;
+ }
+
+ public void dispose() {
+ em.close();
+ emf.close();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1,107 @@
+package org.drools.process.audit;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.drools.WorkingMemory;
+import org.drools.audit.WorkingMemoryLogger;
+import org.drools.audit.event.LogEvent;
+import org.drools.audit.event.RuleFlowLogEvent;
+import org.drools.audit.event.RuleFlowNodeLogEvent;
+import org.drools.event.KnowledgeRuntimeEventManager;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.KnowledgeRuntime;
+
+/**
+ * Enables history log via JPA.
+ *
+ * @author jserdaru
+ * @author krisv
+ *
+ */
+public class JPAWorkingMemoryDbLogger extends WorkingMemoryLogger {
+
+ protected Environment env;
+
+ public JPAWorkingMemoryDbLogger(WorkingMemory workingMemory) {
+ super(workingMemory);
+ env = workingMemory.getEnvironment();
+ }
+
+ public JPAWorkingMemoryDbLogger(KnowledgeRuntimeEventManager session) {
+ super(session);
+ if (session instanceof KnowledgeRuntime) {
+ env = ((KnowledgeRuntime) session).getEnvironment();
+ } else if (session instanceof StatelessKnowledgeSessionImpl) {
+ env = ((StatelessKnowledgeSessionImpl) session).getEnvironment();
+ } else {
+ throw new IllegalArgumentException(
+ "Not supported session in logger: " + session.getClass());
+ }
+ }
+
+ public void logEventCreated(LogEvent logEvent) {
+ switch (logEvent.getType()) {
+ case LogEvent.BEFORE_RULEFLOW_CREATED:
+ RuleFlowLogEvent processEvent = (RuleFlowLogEvent) logEvent;
+ addProcessLog(processEvent.getProcessInstanceId(), processEvent.getProcessId());
+ break;
+ case LogEvent.AFTER_RULEFLOW_COMPLETED:
+ processEvent = (RuleFlowLogEvent) logEvent;
+ updateProcessLog(processEvent.getProcessInstanceId());
+ break;
+ case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
+ RuleFlowNodeLogEvent nodeEvent = (RuleFlowNodeLogEvent) logEvent;
+ addNodeEnterLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId());
+ break;
+ case LogEvent.BEFORE_RULEFLOW_NODE_EXITED:
+ nodeEvent = (RuleFlowNodeLogEvent) logEvent;
+ addNodeExitLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId());
+ break;
+ default:
+ // ignore all other events
+ }
+ }
+
+ private void addProcessLog(long processInstanceId, String processId) {
+ ProcessInstanceLog log = new ProcessInstanceLog(processInstanceId, processId);
+ getEntityManager().persist(log);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateProcessLog(long processInstanceId) {
+ List<ProcessInstanceLog> result = getEntityManager().createQuery(
+ "from ProcessInstanceLog as log where log.processInstanceId = ? and log.end is null")
+ .setParameter(1, processInstanceId).getResultList();
+ if (result != null && result.size() != 0) {
+ ProcessInstanceLog log = result.get(result.size() - 1);
+ log.setEnd(new Date());
+ getEntityManager().merge(log);
+ }
+ }
+
+ private void addNodeEnterLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId) {
+ NodeInstanceLog log = new NodeInstanceLog(
+ NodeInstanceLog.TYPE_ENTER, processInstanceId, processId, nodeInstanceId, nodeId);
+ getEntityManager().persist(log);
+ }
+
+ private void addNodeExitLog(long processInstanceId,
+ String processId, String nodeInstanceId, String nodeId) {
+ NodeInstanceLog log = new NodeInstanceLog(
+ NodeInstanceLog.TYPE_EXIT, processInstanceId, processId, nodeInstanceId, nodeId);
+ getEntityManager().persist(log);
+ }
+
+ public void dispose() {
+ }
+
+ protected EntityManager getEntityManager() {
+ return (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java 2010-06-24 01:26:47 UTC (rev 33617)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -3,6 +3,26 @@
import java.io.Serializable;
import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+ at Entity
+ at NamedQueries( {
+ @NamedQuery(name = "NodeInstanceLog.findByProcessId", query = "FROM NodeInstanceLog n "
+ + "WHERE n.processId = :processId ORDER BY date"),
+ @NamedQuery(name = "NodeInstanceLog.findByProcessIdAndNodeId", query = "FROM NodeInstanceLog n "
+ + "WHERE n.processId = :processId AND n.nodeId = :nodeId ORDER BY date"),
+ @NamedQuery(name = "NodeInstanceLog.findByProcessInstance", query = "FROM NodeInstanceLog n "
+ + "WHERE n.processId = :processId AND n.processInstanceId = :processInstanceId ORDER BY date"),
+ @NamedQuery(name = "NodeInstanceLog.findByProcessInstanceAndNodeId", query = "FROM NodeInstanceLog n "
+ + "WHERE n.processId = :processId AND n.processInstanceId = :processInstanceId AND n.nodeId = :nodeId ORDER BY date") })
public class NodeInstanceLog implements Serializable {
public static final int TYPE_ENTER = 0;
@@ -10,12 +30,16 @@
private static final long serialVersionUID = 4L;
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private int type;
private long processInstanceId;
private String processId;
private String nodeInstanceId;
private String nodeId;
+ @Temporal(TemporalType.TIMESTAMP)
+ @Column(name = "log_date")
private Date date;
NodeInstanceLog() {
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceLog.java 2010-06-24 01:26:47 UTC (rev 33617)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceLog.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -3,14 +3,29 @@
import java.io.Serializable;
import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+ at Entity
public class ProcessInstanceLog implements Serializable {
private static final long serialVersionUID = 4L;
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private long processInstanceId;
private String processId;
+ @Temporal(TemporalType.TIMESTAMP)
+ @Column(name = "start_date")
private Date start;
+ @Temporal(TemporalType.TIMESTAMP)
+ @Column(name = "end_date")
private Date end;
ProcessInstanceLog() {
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml 2010-06-24 01:26:47 UTC (rev 33617)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml 2010-06-24 02:32:04 UTC (rev 33618)
@@ -12,7 +12,7 @@
<property name="connection.url">jdbc:h2:mem:mydb</property>
<!--property name="connection.url">jdbc:h2:file:/NotBackedUp/data/mydb</property-->
<property name="connection.username">sa</property>
- <property name="connection.password"></property>
+ <property name="connection.password">sasa</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1,181 @@
+package org.drools.process.audit;
+
+import java.util.List;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
+public class JPAWorkingMemoryDbLoggerTest extends TestCase {
+
+ PoolingDataSource ds1;
+
+ @Override
+ protected void setUp() throws Exception {
+ ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ ds1.close();
+ }
+
+ public void testLogger1() throws Exception {
+ // load the process
+ KnowledgeBase kbase = createKnowledgeBase();
+ // create a new session
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+ new JPAWorkingMemoryDbLogger(session);
+ JPAProcessInstanceDbLog log = new JPAProcessInstanceDbLog();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+
+ // start process instance
+ long processInstanceId = session.startProcess("com.sample.ruleflow").getId();
+
+ System.out.println("Checking process instances for process 'com.sample.ruleflow'");
+ List<ProcessInstanceLog> processInstances =
+ log.findProcessInstances("com.sample.ruleflow");
+ assertEquals(1, processInstances.size());
+ ProcessInstanceLog processInstance = processInstances.get(0);
+ System.out.print(processInstance);
+ System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+ assertNotNull(processInstance.getStart());
+ assertNotNull(processInstance.getEnd());
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow", processInstance.getProcessId());
+ List<NodeInstanceLog> nodeInstances = log.findNodeInstances(processInstanceId);
+ assertEquals(6, nodeInstances.size());
+ for (NodeInstanceLog nodeInstance: nodeInstances) {
+ System.out.println(nodeInstance);
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow", processInstance.getProcessId());
+ assertNotNull(nodeInstance.getDate());
+ }
+ log.clear();
+ processInstances = log.findProcessInstances("com.sample.ruleflow");
+ assertEquals(0, processInstances.size());
+ log.dispose();
+ }
+
+ public void testLogger2() {
+ // load the process
+ KnowledgeBase kbase = createKnowledgeBase();
+ // create a new session
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+ new JPAWorkingMemoryDbLogger(session);
+ JPAProcessInstanceDbLog log = new JPAProcessInstanceDbLog();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+
+ // start process instance
+ session.startProcess("com.sample.ruleflow");
+ session.startProcess("com.sample.ruleflow");
+
+ System.out.println("Checking process instances for process 'com.sample.ruleflow'");
+ List<ProcessInstanceLog> processInstances =
+ log.findProcessInstances("com.sample.ruleflow");
+ assertEquals(2, processInstances.size());
+ for (ProcessInstanceLog processInstance: processInstances) {
+ System.out.print(processInstance);
+ System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+ List<NodeInstanceLog> nodeInstances = log.findNodeInstances(processInstance.getProcessInstanceId());
+ for (NodeInstanceLog nodeInstance: nodeInstances) {
+ System.out.print(nodeInstance);
+ System.out.println(" -> " + nodeInstance.getDate());
+ }
+ assertEquals(6, nodeInstances.size());
+ }
+ log.clear();
+ log.dispose();
+ }
+
+ public void testLogger3() {
+ // load the process
+ KnowledgeBase kbase = createKnowledgeBase();
+ // create a new session
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+ new JPAWorkingMemoryDbLogger(session);
+ JPAProcessInstanceDbLog log = new JPAProcessInstanceDbLog();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+
+ // start process instance
+ long processInstanceId = session.startProcess("com.sample.ruleflow2").getId();
+
+ System.out.println("Checking process instances for process 'com.sample.ruleflow2'");
+ List<ProcessInstanceLog> processInstances =
+ log.findProcessInstances("com.sample.ruleflow2");
+ assertEquals(1, processInstances.size());
+ ProcessInstanceLog processInstance = processInstances.get(0);
+ System.out.print(processInstance);
+ System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+ assertNotNull(processInstance.getStart());
+ assertNotNull(processInstance.getEnd());
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow2", processInstance.getProcessId());
+ List<NodeInstanceLog> nodeInstances = log.findNodeInstances(processInstanceId);
+ for (NodeInstanceLog nodeInstance: nodeInstances) {
+ System.out.print(nodeInstance);
+ System.out.println(" -> " + nodeInstance.getDate());
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow2", processInstance.getProcessId());
+ assertNotNull(nodeInstance.getDate());
+ }
+ assertEquals(14, nodeInstances.size());
+ log.clear();
+ log.dispose();
+ }
+
+ private KnowledgeBase createKnowledgeBase() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
+ kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/orm.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/orm.xml 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+ version="1.0">
+ <named-query name="ProcessInstancesWaitingForEvent">
+ <query>
+select
+ processInstanceInfo.processInstanceId
+from
+ ProcessInstanceInfo processInstanceInfo
+where
+ :type in elements(processInstanceInfo.eventTypes)
+ </query>
+ </named-query>
+</entity-mappings>
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+ <!--persistence-unit name="ProcessService">
+ <jta-data-source>java:/DefaultDS</jta-data-source>
+ <properties>
+ <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+ </properties>
+ </persistence-unit-->
+ <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>jdbc/testDS1</jta-data-source>
+ <class>org.drools.persistence.session.SessionInfo</class>
+ <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+ <class>org.drools.process.audit.ProcessInstanceLog</class>
+ <class>org.drools.process.audit.NodeInstanceLog</class>
+ <class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+ <class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+ <class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
+ <class>org.drools.persistence.processinstance.WorkItemInfo</class>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <property name="hibernate.max_fetch_depth" value="3"/>
+ <property name="hibernate.hbm2ddl.auto" value="update" />
+ <property name="hibernate.show_sql" value="false" />
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
+ </properties>
+ </persistence-unit>
+</persistence>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/jndi.properties
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/jndi.properties (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/jndi.properties 2010-06-24 02:32:04 UTC (rev 33618)
@@ -0,0 +1 @@
+java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
\ No newline at end of file
More information about the jboss-svn-commits
mailing list