[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