[jboss-svn-commits] JBL Code SVN: r22330 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/persistence/memory and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 2 16:56:30 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-02 16:56:30 -0400 (Tue, 02 Sep 2008)
New Revision: 22330

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/DefaultMemoryObject.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/HashMapMemoryObject.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryObject.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersister.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/MemoryPersisterManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterProcessTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterSessionTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterTest.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/PersistenceManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/StatefulSessionSnapshotter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersistenceManager.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionProcessTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionTest.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryXaResourceTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/transaction/MockByteArraySnapshotter.java
Log:
JBRULES-1755: Add default process persistence / transaction support

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -3,8 +3,12 @@
  */
 package org.drools.persistence;
 
-public interface ByteArraySnapshotter {
-    public byte[] getSnapshot();
+public interface ByteArraySnapshotter<T> {
+	
+    byte[] getSnapshot();
 
-    public void loadSnapshot(byte[] bytes);
+    void loadSnapshot(byte[] bytes);
+    
+    T getObject();
+    
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/PersistenceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/PersistenceManager.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/PersistenceManager.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,15 +0,0 @@
-package org.drools.persistence;
-
-import javax.transaction.xa.XAResource;
-
-public interface PersistenceManager {
-
-    XAResource getXAResource();
-
-    Transaction getTransaction();
-
-    void save();
-
-    void load();
-
-}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java (from rev 21668, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/PersistenceManager.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,21 @@
+package org.drools.persistence;
+
+import javax.transaction.xa.XAResource;
+
+public interface Persister<T> {
+
+    XAResource getXAResource();
+
+    Transaction getTransaction();
+
+    void save();
+
+    void load();
+    
+    String getUniqueId();
+    
+    void setUniqueId(String id);
+    
+    T getObject();
+    
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/StatefulSessionSnapshotter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/StatefulSessionSnapshotter.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/StatefulSessionSnapshotter.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,48 +0,0 @@
-package org.drools.persistence;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import org.drools.StatefulSession;
-import org.drools.common.InternalRuleBase;
-import org.drools.marshalling.DefaultMarshaller;
-import org.drools.marshalling.Marshaller;
-
-public class StatefulSessionSnapshotter
-    implements
-    ByteArraySnapshotter {
-    StatefulSession session;
-    Marshaller      marshaller = new DefaultMarshaller();
-
-    public StatefulSessionSnapshotter(StatefulSession session) {
-        this.session = session;
-    }
-
-    public byte[] getSnapshot() {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        try {
-            marshaller.write( baos,
-                              (InternalRuleBase) session.getRuleBase(),
-                              session );
-        } catch ( IOException e ) {
-            throw new RuntimeException( "Unable to get session snapshot",
-                                        e );
-        }
-
-        return baos.toByteArray();
-    }
-
-    public void loadSnapshot(byte[] bytes) {
-        ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
-        try {
-            marshaller.read( bais,
-                             (InternalRuleBase) session.getRuleBase(),
-                             session );
-        } catch ( Exception e ) {
-            throw new RuntimeException( "Unable to load session snapshot",
-                                        e );
-        }
-
-    }
-}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/DefaultMemoryObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/DefaultMemoryObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/DefaultMemoryObject.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,15 @@
+package org.drools.persistence.memory;
+
+public class DefaultMemoryObject implements MemoryObject {
+
+	private byte[] data;
+	
+	public byte[] getData(String id) {
+		return data;
+	}
+
+	public void setData(byte[] data, String id) {
+		this.data = data;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/HashMapMemoryObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/HashMapMemoryObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/HashMapMemoryObject.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,21 @@
+package org.drools.persistence.memory;
+
+import java.util.HashMap;
+
+public class HashMapMemoryObject implements MemoryObject {
+
+	private HashMap<String, byte[]> map;
+	
+	public HashMapMemoryObject(HashMap<String, byte[]> map) {		
+		this.map = map;
+	}
+	
+	public byte[] getData(String id) {
+		return map.get(id);
+	}
+
+	public void setData(byte[] data, String id) {
+		map.put(id, data);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryObject.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,9 @@
+package org.drools.persistence.memory;
+
+public interface MemoryObject {
+	
+	void setData(byte[] data, String id);
+	
+	byte[] getData(String id);
+
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersistenceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersistenceManager.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersistenceManager.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,123 +0,0 @@
-package org.drools.persistence.memory;
-
-import java.net.Inet4Address;
-import java.util.Random;
-
-import javax.transaction.xa.Xid;
-
-import org.drools.persistence.ByteArraySnapshotter;
-import org.drools.persistence.DroolsXid;
-import org.drools.persistence.PersistenceManager;
-import org.drools.persistence.Transaction;
-
-public class MemoryPersistenceManager
-    implements
-    ByteArraySnapshotter,
-    PersistenceManager {
-    ByteArraySnapshotter  snapshotter;
-    byte[]                lastSave;
-    MemoryXaResource      xaResource;
-
-    public MemoryPersistenceManager(ByteArraySnapshotter snapshotter) {
-        this.snapshotter = snapshotter;
-    }
-
-    public MemoryXaResource getXAResource() {
-        if ( xaResource == null ) {
-            xaResource = new MemoryXaResource( this );
-        }
-        return xaResource;
-    }
-
-    public Transaction getTransaction() {
-        return new Transaction( getUniqueXID(),
-                                getXAResource() );
-    }
-
-    public void save() {
-        if ( xaResource != null && xaResource.isInTransaction() ) {
-            throw new RuntimeException( "You cannot call a persistence save point while a transaction is open" );
-        }
-        lastSave = getSnapshot();
-    }
-
-    public void load() {
-        if ( xaResource != null && xaResource.isInTransaction() ) {
-            throw new RuntimeException( "You cannot call a persistence save point while a transaction is open" );
-        }
-        loadSnapshot( lastSave );
-    }
-
-    public boolean isInTransaction() {
-        return false;
-    }
-
-    public void setLastSave(byte[] lastSave) {
-        this.lastSave = lastSave;
-    }
-
-    public byte[] getLastSave() {
-        return lastSave;
-    }
-
-    public byte[] getSnapshot() {
-        return snapshotter.getSnapshot();
-    }
-
-    public void loadSnapshot(byte[] bytes) {
-        this.snapshotter.loadSnapshot( bytes );
-    }
-
-    byte[]      localIP     = null;
-    private int txnUniqueID = 0;
-    private int tid         = 1;
-
-    private Xid getUniqueXID() {
-        Random rnd = new Random( System.currentTimeMillis() );
-        txnUniqueID++;
-        int txnUID = txnUniqueID;
-        int tidID = tid;
-        int randID = rnd.nextInt();
-        byte[] gtrid = new byte[64];
-        byte[] bqual = new byte[64];
-
-        if ( null == localIP ) {
-            try {
-                localIP = Inet4Address.getLocalHost().getAddress();
-            } catch ( Exception ex ) {
-                localIP = new byte[]{0x01, 0x02, 0x03, 0x04};
-            }
-        }
-
-        System.arraycopy( localIP,
-                          0,
-                          gtrid,
-                          0,
-                          4 );
-        System.arraycopy( localIP,
-                          0,
-                          bqual,
-                          0,
-                          4 );
-
-        // Bytes 4 -> 7 - unique transaction id (unique to our class instance).          
-        // Bytes 8 ->11 - thread id (unique to our thread).
-        // Bytes 12->15 - random number generated using seed from current time in milliseconds.
-        for ( int i = 0; i <= 3; i++ ) {
-            gtrid[i + 4] = (byte) (txnUID % 0x100);
-            bqual[i + 4] = (byte) (txnUID % 0x100);
-            txnUID >>= 8;
-            gtrid[i + 8] = (byte) (tidID % 0x100);
-            bqual[i + 8] = (byte) (tidID % 0x100);
-            tidID >>= 8;
-            gtrid[i + 12] = (byte) (randID % 0x100);
-            bqual[i + 12] = (byte) (randID % 0x100);
-            randID >>= 8;
-        }
-
-        return new DroolsXid( 0x1234,
-                              gtrid,
-                              bqual );
-
-    }
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersister.java (from rev 21668, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersistenceManager.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersister.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersister.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,139 @@
+package org.drools.persistence.memory;
+
+import java.net.Inet4Address;
+import java.util.Random;
+
+import javax.transaction.xa.Xid;
+
+import org.drools.persistence.ByteArraySnapshotter;
+import org.drools.persistence.DroolsXid;
+import org.drools.persistence.Persister;
+import org.drools.persistence.Transaction;
+
+public class MemoryPersister<T> implements ByteArraySnapshotter<T>,	Persister<T> {
+	
+	ByteArraySnapshotter<T> snapshotter;
+	MemoryObject lastSave;
+	MemoryXaResource xaResource;
+	String id;
+
+    public MemoryPersister(ByteArraySnapshotter<T> snapshotter) {
+        this(snapshotter, new DefaultMemoryObject());
+    }
+
+    public MemoryPersister(ByteArraySnapshotter<T> snapshotter, MemoryObject memoryObject) {
+        this.snapshotter = snapshotter;
+        this.lastSave = memoryObject;
+    }
+
+    public MemoryXaResource getXAResource() {
+        if ( xaResource == null ) {
+            xaResource = new MemoryXaResource( this );
+        }
+        return xaResource;
+    }
+
+    public Transaction getTransaction() {
+        return new Transaction( getUniqueXID(),
+                                getXAResource() );
+    }
+
+    public void save() {
+        if ( xaResource != null && xaResource.isInTransaction() ) {
+            throw new RuntimeException( "You cannot call a persistence save point while a transaction is open" );
+        }
+        lastSave.setData( getSnapshot(), id );
+    }
+
+    public void load() {
+        if ( xaResource != null && xaResource.isInTransaction() ) {
+            throw new RuntimeException( "You cannot call a persistence save point while a transaction is open" );
+        }
+        loadSnapshot( lastSave.getData(id) );
+    }
+
+    public boolean isInTransaction() {
+        return false;
+    }
+
+    public void setLastSave(byte[] lastSave) {
+        this.lastSave.setData( lastSave, id );
+    }
+
+    public byte[] getLastSave() {
+        return lastSave.getData(id);
+    }
+
+    public byte[] getSnapshot() {
+        return snapshotter.getSnapshot();
+    }
+
+    public void loadSnapshot(byte[] bytes) {
+        this.snapshotter.loadSnapshot( bytes );
+    }
+    
+    public T getObject() {
+    	return this.snapshotter.getObject();
+    }
+
+    byte[]      localIP     = null;
+    private int txnUniqueID = 0;
+    private int tid         = 1;
+
+    private Xid getUniqueXID() {
+        Random rnd = new Random( System.currentTimeMillis() );
+        txnUniqueID++;
+        int txnUID = txnUniqueID;
+        int tidID = tid;
+        int randID = rnd.nextInt();
+        byte[] gtrid = new byte[64];
+        byte[] bqual = new byte[64];
+
+        if ( null == localIP ) {
+            try {
+                localIP = Inet4Address.getLocalHost().getAddress();
+            } catch ( Exception ex ) {
+                localIP = new byte[]{0x01, 0x02, 0x03, 0x04};
+            }
+        }
+
+        System.arraycopy( localIP,
+                          0,
+                          gtrid,
+                          0,
+                          4 );
+        System.arraycopy( localIP,
+                          0,
+                          bqual,
+                          0,
+                          4 );
+
+        // Bytes 4 -> 7 - unique transaction id (unique to our class instance).          
+        // Bytes 8 ->11 - thread id (unique to our thread).
+        // Bytes 12->15 - random number generated using seed from current time in milliseconds.
+        for ( int i = 0; i <= 3; i++ ) {
+            gtrid[i + 4] = (byte) (txnUID % 0x100);
+            bqual[i + 4] = (byte) (txnUID % 0x100);
+            txnUID >>= 8;
+            gtrid[i + 8] = (byte) (tidID % 0x100);
+            bqual[i + 8] = (byte) (tidID % 0x100);
+            tidID >>= 8;
+            gtrid[i + 12] = (byte) (randID % 0x100);
+            bqual[i + 12] = (byte) (randID % 0x100);
+            randID >>= 8;
+        }
+
+        return new DroolsXid( 0x1234,
+                              gtrid,
+                              bqual );
+
+    }
+
+	public String getUniqueId() {
+		return id;
+	}
+
+	public void setUniqueId(String id) {
+		this.id = id;
+	}
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryPersister.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -11,12 +11,12 @@
 import org.drools.persistence.ByteArraySnapshotter;
 
 public class MemoryXaResource implements XAResource {
-    private MemoryPersistenceManager pm;
+    private MemoryPersister pm;
     
     Map<Xid, byte[]> data = new HashMap<Xid, byte[]>();
     LinkedList<Xid> list = new LinkedList<Xid>();       
 
-    public MemoryXaResource(MemoryPersistenceManager pm) {
+    public MemoryXaResource(MemoryPersister pm) {
         this.pm = pm;
     }
     

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/MemoryPersisterManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/MemoryPersisterManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/MemoryPersisterManager.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,27 @@
+package org.drools.persistence.session;
+
+import java.util.HashMap;
+
+import org.drools.RuleBase;
+import org.drools.StatefulSession;
+import org.drools.persistence.Persister;
+import org.drools.persistence.memory.HashMapMemoryObject;
+import org.drools.persistence.memory.MemoryPersister;
+
+public class MemoryPersisterManager {
+
+	private HashMapMemoryObject map = new HashMapMemoryObject(new HashMap<String, byte[]>());
+	
+	public Persister<StatefulSession> getSessionPersister(StatefulSession session) {
+		return new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(session), map);
+	}
+	
+	public Persister<StatefulSession> getSessionPersister(String uniqueId, RuleBase ruleBase) {
+		Persister<StatefulSession> persister = new MemoryPersister<StatefulSession>(
+			new StatefulSessionSnapshotter(ruleBase), map);
+		persister.setUniqueId(uniqueId);
+		persister.load();
+		return persister;
+	}
+	
+}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java (from rev 21668, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/StatefulSessionSnapshotter.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,56 @@
+package org.drools.persistence.session;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.drools.RuleBase;
+import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
+import org.drools.marshalling.DefaultMarshaller;
+import org.drools.marshalling.Marshaller;
+import org.drools.persistence.ByteArraySnapshotter;
+
+public class StatefulSessionSnapshotter implements ByteArraySnapshotter<StatefulSession> {
+	
+	private RuleBase ruleBase;
+	private StatefulSession session;
+	private Marshaller marshaller = new DefaultMarshaller();
+
+	public StatefulSessionSnapshotter(RuleBase ruleBase) {
+		this.ruleBase = ruleBase;
+	}
+
+	public StatefulSessionSnapshotter(StatefulSession session) {
+		this.session = session;
+		this.ruleBase = session.getRuleBase();
+	}
+
+	public byte[] getSnapshot() {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		try {
+			marshaller.write(baos, (InternalRuleBase) ruleBase, session);
+		} catch (IOException e) {
+			throw new RuntimeException("Unable to get session snapshot", e);
+		}
+
+		return baos.toByteArray();
+	}
+
+	public void loadSnapshot(byte[] bytes) {
+		if (session == null) {
+			session = ruleBase.newStatefulSession();
+		}
+		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+		try {
+			marshaller.read(bais, (InternalRuleBase) ruleBase, session);
+		} catch (Exception e) {
+			throw new RuntimeException("Unable to load session snapshot", e);
+		}
+	}
+
+	public StatefulSession getObject() {
+		return session;
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -8,6 +8,7 @@
 public class CompleteWorkItemCommand implements Command {
 	
 	private long workItemId;
+	private long processInstanceId;
 	private Map<String, Object> results = new HashMap<String, Object>();
 	
 	public long getWorkItemId() {
@@ -18,6 +19,14 @@
 		this.workItemId = workItemId;
 	}
 
+	public long getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(long processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
 	public Map<String, Object> getResults() {
 		return results;
 	}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -3,10 +3,10 @@
 import javax.transaction.xa.XAException;
 
 import org.drools.StatefulSession;
-import org.drools.persistence.PersistenceManager;
-import org.drools.persistence.StatefulSessionSnapshotter;
+import org.drools.persistence.Persister;
 import org.drools.persistence.Transaction;
-import org.drools.persistence.memory.MemoryPersistenceManager;
+import org.drools.persistence.memory.MemoryPersister;
+import org.drools.persistence.session.StatefulSessionSnapshotter;
 import org.drools.process.command.Command;
 import org.drools.process.command.CommandService;
 
@@ -19,11 +19,12 @@
 	}
 	
 	public Object execute(Command command) {
-		PersistenceManager persistenceManager =
-			new MemoryPersistenceManager(new StatefulSessionSnapshotter(session));
-		persistenceManager.save();
-		Transaction transaction = persistenceManager.getTransaction();
+		Persister<StatefulSession> persister =
+			new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(session));
+		persister.save();
+		Transaction transaction = persister.getTransaction();
 		try {
+			transaction.start();
 			Object result = command.execute(session);
 			transaction.commit();
 			return result;

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,117 +1,120 @@
-package org.drools.persistence.memory;
-
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-import junit.framework.TestCase;
-
-import org.drools.persistence.DroolsXid;
-import org.drools.transaction.MockByteArraySnapshotter;
-
-public class MemoryPersistenceManagerTest extends TestCase {
-    private byte[]           data1 = new byte[]{1, 1, 1, 1, 1};
-    private byte[]           data2 = new byte[]{1, 1, 1, 1, 0};
-    private byte[]           data3 = new byte[]{1, 1, 1, 0, 0};
-
-    MockByteArraySnapshotter snapshotter;
-    MemoryPersistenceManager pm;
-
-    protected void setUp() throws Exception {
-        snapshotter = new MockByteArraySnapshotter();
-        pm = new MemoryPersistenceManager( snapshotter );
-    }
-
-    public void testSave() {
-        snapshotter.loadSnapshot( data1 );
-        pm.save();
-        assertTrue( assertEquals( data1,
-                                  snapshotter.bytes ) );
-
-        snapshotter.loadSnapshot( data2 );
-        assertTrue( assertEquals( data2,
-                                  snapshotter.bytes ) );
-
-        pm.load();
-        assertTrue( assertEquals( data1,
-                                  snapshotter.bytes ) );
-    }
-
-    public void testSaveInOpenTransaction() throws XAException {
-        snapshotter.loadSnapshot( data1 );
-
-        XAResource xa = pm.getXAResource();
-        Xid xid = new DroolsXid( 100,
-                                 new byte[]{0x01},
-                                 new byte[]{0x01} );
-        xa.start( xid,
-                  XAResource.TMNOFLAGS );
-
-        try {
-            pm.save();
-            fail( "save should fail as the session currently has an open transaction" );
-        } catch ( Exception e ) {
-            // success
-        }
-    }
-
-    public void testLoadInOpenTransaction() throws XAException {
-        snapshotter.loadSnapshot( data1 );
-        pm.save();
-
-        XAResource xa = pm.getXAResource();
-        Xid xid = new DroolsXid( 100,
-                                 new byte[]{0x01},
-                                 new byte[]{0x01} );
-        xa.start( xid,
-                  XAResource.TMNOFLAGS );
-
-        try {
-            pm.load();
-            fail( "load should fail as the session currently has an open transaction" );
-        } catch ( Exception e ) {
-            // success
-        }
-    }
-
-    public void testLoadSaveAfterTransaction() throws Exception {
-        snapshotter.loadSnapshot( data1 );
-        XAResource xa = pm.getXAResource();
-        Xid xid = new DroolsXid( 100,
-                                 new byte[]{0x01},
-                                 new byte[]{0x01} );
-        xa.start( xid,
-                  XAResource.TMNOFLAGS );
-
-        snapshotter.loadSnapshot( data2 );
-        xa.commit( xid,
-                   true );
-
-        pm.save();
-        assertTrue( assertEquals( data2,
-                                  snapshotter.bytes ) );
-
-        snapshotter.loadSnapshot( data3 );
-        assertTrue( assertEquals( data3,
-                                  snapshotter.bytes ) );
-
-        pm.load();
-        assertTrue( assertEquals( data2,
-                                  snapshotter.bytes ) );
-    }
-
-    public boolean assertEquals(byte[] bytes1,
-                                byte[] bytes2) {
-        if ( bytes1.length != bytes2.length ) {
-            return false;
-        }
-
-        for ( int i = 0; i < bytes1.length; i++ ) {
-            if ( bytes1[i] != bytes2[i] ) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
+package org.drools.persistence.memory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.persistence.Persister;
+import org.drools.persistence.session.MemoryPersisterManager;
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.rule.Package;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.spi.Action;
+import org.drools.spi.KnowledgeHelper;
+import org.drools.spi.ProcessContext;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.WorkItemNode;
+
+public class MemoryPersistenceManagerTest extends TestCase {
+	
+	private Map<Long, WorkItem> workItems = new HashMap<Long, WorkItem>();
+
+	public void testProcessPersistence() {
+		MemoryPersisterManager manager = new MemoryPersisterManager();
+		
+		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+		Package pkg = new Package("org.drools.test");
+		pkg.addProcess(getProcess());
+		ruleBase.addPackage(pkg);
+		StatefulSession session = ruleBase.newStatefulSession();
+		
+		Persister<StatefulSession> persister = manager.getSessionPersister(session);
+		session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
+			public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+				MemoryPersistenceManagerTest.this.workItems.put(workItem.getProcessInstanceId(), workItem);
+			}
+			public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+			}
+        });
+        ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
+        long processInstanceId = processInstance.getId();
+		persister.setUniqueId(processInstanceId + "");
+		persister.save();
+		
+		persister = manager.getSessionPersister(processInstanceId + "", ruleBase);
+		session = persister.getObject();
+		processInstance = session.getProcessInstance(processInstanceId); 
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+		
+		session.getWorkItemManager().completeWorkItem(
+			workItems.get(processInstanceId).getId(), null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        persister.save();
+        
+        persister = manager.getSessionPersister(processInstanceId + "", ruleBase);
+		session = persister.getObject();
+		processInstance = session.getProcessInstance(processInstanceId); 
+        assertNull(processInstance);
+	}
+
+	private RuleFlowProcess getProcess() {
+		RuleFlowProcess process = new RuleFlowProcess();
+		process.setId("org.drools.test.TestProcess");
+		process.setName("TestProcess");
+		process.setPackageName("org.drools.test");
+		StartNode start = new StartNode();
+		start.setId(1);
+		start.setName("Start");
+		process.addNode(start);
+		ActionNode actionNode = new ActionNode();
+		actionNode.setId(2);
+		actionNode.setName("Action");
+		DroolsConsequenceAction action = new DroolsConsequenceAction();
+		action.setMetaData("Action", new Action() {
+			public void execute(KnowledgeHelper knowledgeHelper,
+					WorkingMemory workingMemory, ProcessContext context)
+					throws Exception {
+				System.out.println("Executed action");
+			}
+		});
+		actionNode.setAction(action);
+		process.addNode(actionNode);
+		new ConnectionImpl(
+			start, Node.CONNECTION_DEFAULT_TYPE,
+			actionNode, Node.CONNECTION_DEFAULT_TYPE);
+		WorkItemNode workItemNode = new WorkItemNode();
+		workItemNode.setId(3);
+		workItemNode.setName("WorkItem");
+		Work work = new WorkImpl();
+		work.setName("MyWork");
+		workItemNode.setWork(work);
+		process.addNode(workItemNode);
+		new ConnectionImpl(
+			actionNode, Node.CONNECTION_DEFAULT_TYPE,
+			workItemNode, Node.CONNECTION_DEFAULT_TYPE);
+		EndNode end = new EndNode();
+		end.setId(4);
+		end.setName("End");
+		process.addNode(end);
+		new ConnectionImpl(
+			workItemNode, Node.CONNECTION_DEFAULT_TYPE, 
+			end, Node.CONNECTION_DEFAULT_TYPE);
+		return process;
+	}
+
+}

Deleted: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionProcessTest.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionProcessTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,151 +0,0 @@
-package org.drools.persistence.memory;
-
-import junit.framework.TestCase;
-
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
-import org.drools.WorkingMemory;
-import org.drools.persistence.StatefulSessionSnapshotter;
-import org.drools.persistence.Transaction;
-import org.drools.process.core.Work;
-import org.drools.process.core.impl.WorkImpl;
-import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.WorkItem;
-import org.drools.process.instance.WorkItemHandler;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.rule.Package;
-import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.spi.Action;
-import org.drools.spi.KnowledgeHelper;
-import org.drools.spi.ProcessContext;
-import org.drools.workflow.core.Node;
-import org.drools.workflow.core.impl.ConnectionImpl;
-import org.drools.workflow.core.impl.DroolsConsequenceAction;
-import org.drools.workflow.core.node.ActionNode;
-import org.drools.workflow.core.node.EndNode;
-import org.drools.workflow.core.node.StartNode;
-import org.drools.workflow.core.node.WorkItemNode;
-
-public class MemoryPersistenceSessionProcessTest extends TestCase {
-
-	private WorkItem workItem;
-	
-    public void testSave() throws Exception {
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        Package pkg = new Package( "org.drools.test" );
-        pkg.addProcess( getProcess() );
-        ruleBase.addPackage( pkg );
-
-        StatefulSession session = ruleBase.newStatefulSession();
-        session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
-			public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
-				MemoryPersistenceSessionProcessTest.this.workItem = workItem;
-			}
-			public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
-			}
-        });
-        ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
-        assertNotNull(workItem);
-
-        MemoryPersistenceManager pm = new MemoryPersistenceManager( new StatefulSessionSnapshotter( session ) );
-        pm.save();
-
-        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
-        
-        pm.load();
-        processInstance = session.getProcessInstance(processInstance.getId());
-        assertNotNull(processInstance);
-        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
-        
-        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
-    }
-
-    public void testTransactionWithRollback() throws Exception {
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        Package pkg = new Package( "org.drools.test" );
-        pkg.addProcess( getProcess() );
-        ruleBase.addPackage( pkg );
-
-        StatefulSession session = ruleBase.newStatefulSession();
-        session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
-			public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
-				MemoryPersistenceSessionProcessTest.this.workItem = workItem;
-			}
-			public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
-			}
-        });
-        ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
-
-        MemoryPersistenceManager pm = new MemoryPersistenceManager( new StatefulSessionSnapshotter( session ) );
-        Transaction t = pm.getTransaction();
-        t.start();
-
-        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
-        
-        t.rollback();
-        
-        processInstance = session.getProcessInstance(processInstance.getId());
-        assertNotNull(processInstance);
-        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
-        
-        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
-    }
-
-    private RuleFlowProcess getProcess() {
-    	RuleFlowProcess process = new RuleFlowProcess();
-    	process.setId("org.drools.test.TestProcess");
-    	process.setName("TestProcess");
-    	process.setPackageName("org.drools.test");
-    	StartNode start = new StartNode();
-    	start.setId(1);
-    	start.setName("Start");
-    	process.addNode(start);
-    	ActionNode actionNode = new ActionNode();
-    	actionNode.setId(2);
-    	actionNode.setName("Action");
-    	DroolsConsequenceAction action = new DroolsConsequenceAction();
-    	action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
-            	System.out.println("Executed action");
-            }
-        });
-    	actionNode.setAction(action);
-    	process.addNode(actionNode);
-    	new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
-    	WorkItemNode workItemNode = new WorkItemNode();
-    	workItemNode.setId(3);
-    	workItemNode.setName("WorkItem");
-    	Work work = new WorkImpl();
-    	work.setName("MyWork");
-    	workItemNode.setWork(work);
-    	process.addNode(workItemNode);
-    	new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE);
-    	EndNode end = new EndNode();
-    	end.setId(4);
-    	end.setName("End");
-    	process.addNode(end);
-    	new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
-        return process;
-    }
-
-    public boolean assertEquals(byte[] bytes1,
-                                byte[] bytes2) {
-        if ( bytes1.length != bytes2.length ) {
-            return false;
-        }
-
-        for ( int i = 0; i < bytes1.length; i++ ) {
-            if ( bytes1[i] != bytes2[i] ) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionTest.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -1,238 +0,0 @@
-package org.drools.persistence.memory;
-
-import java.beans.IntrospectionException;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.drools.Person;
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
-import org.drools.WorkingMemory;
-import org.drools.base.ClassFieldAccessorCache;
-import org.drools.base.ClassFieldAccessorStore;
-import org.drools.base.ClassObjectType;
-import org.drools.base.ValueType;
-import org.drools.base.evaluators.EqualityEvaluatorsDefinition;
-import org.drools.base.evaluators.Operator;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.persistence.StatefulSessionSnapshotter;
-import org.drools.persistence.Transaction;
-import org.drools.rule.Declaration;
-import org.drools.rule.InvalidRuleException;
-import org.drools.rule.Package;
-import org.drools.rule.Pattern;
-import org.drools.rule.Rule;
-import org.drools.rule.VariableConstraint;
-import org.drools.spi.BetaNodeFieldConstraint;
-import org.drools.spi.Consequence;
-import org.drools.spi.ConsequenceException;
-import org.drools.spi.Evaluator;
-import org.drools.spi.InternalReadAccessor;
-import org.drools.spi.KnowledgeHelper;
-import org.drools.spi.Tuple;
-
-public class MemoryPersistenceSessionTest extends TestCase {
-    private byte[]          data1 = new byte[]{1, 1, 1, 1, 1};
-    private byte[]          data2 = new byte[]{1, 1, 1, 1, 0};
-    private byte[]          data3 = new byte[]{1, 1, 1, 0, 0};
-
-    ClassFieldAccessorStore store;
-
-    public void testSave() throws Exception {
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        Package pkg = new Package( "org.drools.test" );
-        pkg.addGlobal( "list",
-                       List.class );
-        pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
-        store = pkg.getClassFieldAccessorStore();
-        store.setEagerWire( true );
-
-        pkg.addRule( getFindPersonRule() );
-        ruleBase.addPackage( pkg );
-
-        StatefulSession session = ruleBase.newStatefulSession();
-        List list = new ArrayList();
-        session.setGlobal( "list",
-                           list );
-        Person p1 = new Person( "boba fet",
-                                500 );
-        session.insert( p1 );
-
-        MemoryPersistenceManager pm = new MemoryPersistenceManager( new StatefulSessionSnapshotter( session ) );
-        pm.save();
-
-        Person p2 = new Person( "boba fet",
-                                500 );
-        Person p3 = new Person( "boba fet",
-                                500 );
-        session.insert( p2 );
-        session.insert( p3 );
-        session.insert( new String( "boba fet" ) );
-        assertEquals( 4,
-                      ((InternalWorkingMemory) session).getObjectStore().size() );
-        session.fireAllRules();
-        assertEquals( 3,
-                      list.size() );
-
-        pm.load();
-        list.clear();
-        session.insert( new String( "boba fet" ) );
-        session.fireAllRules();
-        assertEquals( 1,
-                      list.size() );
-        assertEquals( 2,
-                      ((InternalWorkingMemory) session).getObjectStore().size() );
-    }
-
-    public void testTransactionWithRollback() throws Exception {
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        Package pkg = new Package( "org.drools.test" );
-        pkg.addGlobal( "list",
-                       List.class );
-        pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
-        store = pkg.getClassFieldAccessorStore();
-        store.setEagerWire( true );
-
-        pkg.addRule( getFindPersonRule() );
-        ruleBase.addPackage( pkg );
-
-        StatefulSession session = ruleBase.newStatefulSession();
-        List list = new ArrayList();
-        session.setGlobal( "list",
-                           list );
-        Person p1 = new Person( "boba fet",
-                                500 );
-        session.insert( p1 );
-
-        MemoryPersistenceManager pm = new MemoryPersistenceManager( new StatefulSessionSnapshotter( session ) );
-        Transaction t = pm.getTransaction();
-        t.start();
-
-        Person p2 = new Person( "boba fet",
-                                500 );
-        Person p3 = new Person( "boba fet",
-                                500 );
-        session.insert( p2 );
-        session.insert( p3 );
-        session.insert( new String( "boba fet" ) );
-        assertEquals( 4,
-                      ((InternalWorkingMemory) session).getObjectStore().size() );
-        session.fireAllRules();
-        assertEquals( 3,
-                      list.size() );
-
-        t.rollback();
-        list.clear();
-        session.insert( new String( "boba fet" ) );
-        session.fireAllRules();
-        assertEquals( 1,
-                      list.size() );
-        assertEquals( 2,
-                      ((InternalWorkingMemory) session).getObjectStore().size() );
-    }
-
-    private Rule getFindPersonRule() throws IntrospectionException,
-                                    InvalidRuleException {
-        ClassObjectType stringType = new ClassObjectType( String.class );
-        ClassObjectType personType = new ClassObjectType( Person.class );
-
-        final Rule rule = new Rule( "find person" );
-
-        // -----------
-        // $s : String( )
-        // -----------
-        final Pattern stringPattern = new Pattern( 0,
-                                                   stringType,
-                                                   "$s" );
-        rule.addPattern( stringPattern );
-        final Declaration sDeclaration = rule.getDeclaration( "$s" );
-
-        // -----------
-        // $p : Person( name == $s)
-        // -----------
-        final Pattern personPattern = new Pattern( 1,
-                                                   personType,
-                                                   "$p" );
-        EqualityEvaluatorsDefinition evals = new EqualityEvaluatorsDefinition();
-        Evaluator eval = evals.getEvaluator( ValueType.OBJECT_TYPE,
-                                             Operator.EQUAL,
-                                             null );
-        personPattern.addConstraint( getBoundVariableConstraint( personPattern,
-                                                                 "name",
-                                                                 sDeclaration,
-                                                                 eval ) );
-
-        rule.addPattern( personPattern );
-
-        final Declaration pDeclaration = rule.getDeclaration( "$p" );
-
-        final Consequence consequence = new Consequence() {
-
-            public void evaluate(KnowledgeHelper drools,
-                                 WorkingMemory workingMemory) throws ConsequenceException {
-                try {
-                    Rule rule = drools.getRule();
-                    Tuple tuple = drools.getTuple();
-
-                    Person p = (Person) drools.get( pDeclaration );
-
-                    List list = (List) workingMemory.getGlobal( "list" );
-                    list.add( p );
-
-                } catch ( Exception e ) {
-                    e.printStackTrace();
-                    throw new ConsequenceException( e );
-                }
-            }
-
-            public void readExternal(ObjectInput in) throws IOException,
-                                                    ClassNotFoundException {
-
-            }
-
-            public void writeExternal(ObjectOutput out) throws IOException {
-
-            }
-        };
-
-        rule.setConsequence( consequence );
-
-        return rule;
-    }
-
-    public boolean assertEquals(byte[] bytes1,
-                                byte[] bytes2) {
-        if ( bytes1.length != bytes2.length ) {
-            return false;
-        }
-
-        for ( int i = 0; i < bytes1.length; i++ ) {
-            if ( bytes1[i] != bytes2[i] ) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private BetaNodeFieldConstraint getBoundVariableConstraint(final Pattern pattern,
-                                                               final String fieldName,
-                                                               final Declaration declaration,
-                                                               final Evaluator evaluator) throws IntrospectionException {
-        final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
-
-        final InternalReadAccessor extractor = store.getReader( clazz,
-                                                                fieldName,
-                                                                getClass().getClassLoader() );
-
-        return new VariableConstraint( extractor,
-                                       declaration,
-                                       evaluator );
-    }
-}

Copied: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterProcessTest.java (from rev 21891, labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionProcessTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterProcessTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterProcessTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,151 @@
+package org.drools.persistence.memory;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.persistence.Transaction;
+import org.drools.persistence.session.StatefulSessionSnapshotter;
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.rule.Package;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.spi.Action;
+import org.drools.spi.KnowledgeHelper;
+import org.drools.spi.ProcessContext;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.WorkItemNode;
+
+public class MemoryPersisterProcessTest extends TestCase {
+
+	private WorkItem workItem;
+	
+    public void testSave() throws Exception {
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.drools.test" );
+        pkg.addProcess( getProcess() );
+        ruleBase.addPackage( pkg );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
+			public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+				MemoryPersisterProcessTest.this.workItem = workItem;
+			}
+			public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+			}
+        });
+        ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
+        assertNotNull(workItem);
+
+        MemoryPersister pm = new MemoryPersister( new StatefulSessionSnapshotter( session ) );
+        pm.save();
+
+        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        
+        pm.load();
+        processInstance = session.getProcessInstance(processInstance.getId());
+        assertNotNull(processInstance);
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        
+        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+
+    public void testTransactionWithRollback() throws Exception {
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.drools.test" );
+        pkg.addProcess( getProcess() );
+        ruleBase.addPackage( pkg );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
+			public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+				MemoryPersisterProcessTest.this.workItem = workItem;
+			}
+			public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+			}
+        });
+        ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
+
+        MemoryPersister pm = new MemoryPersister( new StatefulSessionSnapshotter( session ) );
+        Transaction t = pm.getTransaction();
+        t.start();
+
+        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        
+        t.rollback();
+        
+        processInstance = session.getProcessInstance(processInstance.getId());
+        assertNotNull(processInstance);
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        
+        session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+
+    private RuleFlowProcess getProcess() {
+    	RuleFlowProcess process = new RuleFlowProcess();
+    	process.setId("org.drools.test.TestProcess");
+    	process.setName("TestProcess");
+    	process.setPackageName("org.drools.test");
+    	StartNode start = new StartNode();
+    	start.setId(1);
+    	start.setName("Start");
+    	process.addNode(start);
+    	ActionNode actionNode = new ActionNode();
+    	actionNode.setId(2);
+    	actionNode.setName("Action");
+    	DroolsConsequenceAction action = new DroolsConsequenceAction();
+    	action.setMetaData("Action", new Action() {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
+            	System.out.println("Executed action");
+            }
+        });
+    	actionNode.setAction(action);
+    	process.addNode(actionNode);
+    	new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
+    	WorkItemNode workItemNode = new WorkItemNode();
+    	workItemNode.setId(3);
+    	workItemNode.setName("WorkItem");
+    	Work work = new WorkImpl();
+    	work.setName("MyWork");
+    	workItemNode.setWork(work);
+    	process.addNode(workItemNode);
+    	new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE);
+    	EndNode end = new EndNode();
+    	end.setId(4);
+    	end.setName("End");
+    	process.addNode(end);
+    	new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
+        return process;
+    }
+
+    public boolean assertEquals(byte[] bytes1,
+                                byte[] bytes2) {
+        if ( bytes1.length != bytes2.length ) {
+            return false;
+        }
+
+        for ( int i = 0; i < bytes1.length; i++ ) {
+            if ( bytes1[i] != bytes2[i] ) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterProcessTest.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterSessionTest.java (from rev 21668, labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceSessionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterSessionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterSessionTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,238 @@
+package org.drools.persistence.memory;
+
+import java.beans.IntrospectionException;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.Person;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassFieldAccessorCache;
+import org.drools.base.ClassFieldAccessorStore;
+import org.drools.base.ClassObjectType;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EqualityEvaluatorsDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.persistence.Transaction;
+import org.drools.persistence.session.StatefulSessionSnapshotter;
+import org.drools.rule.Declaration;
+import org.drools.rule.InvalidRuleException;
+import org.drools.rule.Package;
+import org.drools.rule.Pattern;
+import org.drools.rule.Rule;
+import org.drools.rule.VariableConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Consequence;
+import org.drools.spi.ConsequenceException;
+import org.drools.spi.Evaluator;
+import org.drools.spi.InternalReadAccessor;
+import org.drools.spi.KnowledgeHelper;
+import org.drools.spi.Tuple;
+
+public class MemoryPersisterSessionTest extends TestCase {
+    private byte[]          data1 = new byte[]{1, 1, 1, 1, 1};
+    private byte[]          data2 = new byte[]{1, 1, 1, 1, 0};
+    private byte[]          data3 = new byte[]{1, 1, 1, 0, 0};
+
+    ClassFieldAccessorStore store;
+
+    public void testSave() throws Exception {
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.drools.test" );
+        pkg.addGlobal( "list",
+                       List.class );
+        pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
+        store = pkg.getClassFieldAccessorStore();
+        store.setEagerWire( true );
+
+        pkg.addRule( getFindPersonRule() );
+        ruleBase.addPackage( pkg );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        List list = new ArrayList();
+        session.setGlobal( "list",
+                           list );
+        Person p1 = new Person( "boba fet",
+                                500 );
+        session.insert( p1 );
+
+        MemoryPersister pm = new MemoryPersister( new StatefulSessionSnapshotter( session ) );
+        pm.save();
+
+        Person p2 = new Person( "boba fet",
+                                500 );
+        Person p3 = new Person( "boba fet",
+                                500 );
+        session.insert( p2 );
+        session.insert( p3 );
+        session.insert( new String( "boba fet" ) );
+        assertEquals( 4,
+                      ((InternalWorkingMemory) session).getObjectStore().size() );
+        session.fireAllRules();
+        assertEquals( 3,
+                      list.size() );
+
+        pm.load();
+        list.clear();
+        session.insert( new String( "boba fet" ) );
+        session.fireAllRules();
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( 2,
+                      ((InternalWorkingMemory) session).getObjectStore().size() );
+    }
+
+    public void testTransactionWithRollback() throws Exception {
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.drools.test" );
+        pkg.addGlobal( "list",
+                       List.class );
+        pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
+        store = pkg.getClassFieldAccessorStore();
+        store.setEagerWire( true );
+
+        pkg.addRule( getFindPersonRule() );
+        ruleBase.addPackage( pkg );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        List list = new ArrayList();
+        session.setGlobal( "list",
+                           list );
+        Person p1 = new Person( "boba fet",
+                                500 );
+        session.insert( p1 );
+
+        MemoryPersister pm = new MemoryPersister( new StatefulSessionSnapshotter( session ) );
+        Transaction t = pm.getTransaction();
+        t.start();
+
+        Person p2 = new Person( "boba fet",
+                                500 );
+        Person p3 = new Person( "boba fet",
+                                500 );
+        session.insert( p2 );
+        session.insert( p3 );
+        session.insert( new String( "boba fet" ) );
+        assertEquals( 4,
+                      ((InternalWorkingMemory) session).getObjectStore().size() );
+        session.fireAllRules();
+        assertEquals( 3,
+                      list.size() );
+
+        t.rollback();
+        list.clear();
+        session.insert( new String( "boba fet" ) );
+        session.fireAllRules();
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( 2,
+                      ((InternalWorkingMemory) session).getObjectStore().size() );
+    }
+
+    private Rule getFindPersonRule() throws IntrospectionException,
+                                    InvalidRuleException {
+        ClassObjectType stringType = new ClassObjectType( String.class );
+        ClassObjectType personType = new ClassObjectType( Person.class );
+
+        final Rule rule = new Rule( "find person" );
+
+        // -----------
+        // $s : String( )
+        // -----------
+        final Pattern stringPattern = new Pattern( 0,
+                                                   stringType,
+                                                   "$s" );
+        rule.addPattern( stringPattern );
+        final Declaration sDeclaration = rule.getDeclaration( "$s" );
+
+        // -----------
+        // $p : Person( name == $s)
+        // -----------
+        final Pattern personPattern = new Pattern( 1,
+                                                   personType,
+                                                   "$p" );
+        EqualityEvaluatorsDefinition evals = new EqualityEvaluatorsDefinition();
+        Evaluator eval = evals.getEvaluator( ValueType.OBJECT_TYPE,
+                                             Operator.EQUAL,
+                                             null );
+        personPattern.addConstraint( getBoundVariableConstraint( personPattern,
+                                                                 "name",
+                                                                 sDeclaration,
+                                                                 eval ) );
+
+        rule.addPattern( personPattern );
+
+        final Declaration pDeclaration = rule.getDeclaration( "$p" );
+
+        final Consequence consequence = new Consequence() {
+
+            public void evaluate(KnowledgeHelper drools,
+                                 WorkingMemory workingMemory) throws ConsequenceException {
+                try {
+                    Rule rule = drools.getRule();
+                    Tuple tuple = drools.getTuple();
+
+                    Person p = (Person) drools.get( pDeclaration );
+
+                    List list = (List) workingMemory.getGlobal( "list" );
+                    list.add( p );
+
+                } catch ( Exception e ) {
+                    e.printStackTrace();
+                    throw new ConsequenceException( e );
+                }
+            }
+
+            public void readExternal(ObjectInput in) throws IOException,
+                                                    ClassNotFoundException {
+
+            }
+
+            public void writeExternal(ObjectOutput out) throws IOException {
+
+            }
+        };
+
+        rule.setConsequence( consequence );
+
+        return rule;
+    }
+
+    public boolean assertEquals(byte[] bytes1,
+                                byte[] bytes2) {
+        if ( bytes1.length != bytes2.length ) {
+            return false;
+        }
+
+        for ( int i = 0; i < bytes1.length; i++ ) {
+            if ( bytes1[i] != bytes2[i] ) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    private BetaNodeFieldConstraint getBoundVariableConstraint(final Pattern pattern,
+                                                               final String fieldName,
+                                                               final Declaration declaration,
+                                                               final Evaluator evaluator) throws IntrospectionException {
+        final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
+
+        final InternalReadAccessor extractor = store.getReader( clazz,
+                                                                fieldName,
+                                                                getClass().getClassLoader() );
+
+        return new VariableConstraint( extractor,
+                                       declaration,
+                                       evaluator );
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterSessionTest.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterTest.java (from rev 21668, labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -0,0 +1,117 @@
+package org.drools.persistence.memory;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import junit.framework.TestCase;
+
+import org.drools.persistence.DroolsXid;
+import org.drools.transaction.MockByteArraySnapshotter;
+
+public class MemoryPersisterTest extends TestCase {
+    private byte[]           data1 = new byte[]{1, 1, 1, 1, 1};
+    private byte[]           data2 = new byte[]{1, 1, 1, 1, 0};
+    private byte[]           data3 = new byte[]{1, 1, 1, 0, 0};
+
+    MockByteArraySnapshotter<Object> snapshotter;
+    MemoryPersister<Object> pm;
+
+    protected void setUp() throws Exception {
+        snapshotter = new MockByteArraySnapshotter<Object>();
+        pm = new MemoryPersister<Object>( snapshotter );
+    }
+
+    public void testSave() {
+        snapshotter.loadSnapshot( data1 );
+        pm.save();
+        assertTrue( assertEquals( data1,
+                                  snapshotter.bytes ) );
+
+        snapshotter.loadSnapshot( data2 );
+        assertTrue( assertEquals( data2,
+                                  snapshotter.bytes ) );
+
+        pm.load();
+        assertTrue( assertEquals( data1,
+                                  snapshotter.bytes ) );
+    }
+
+    public void testSaveInOpenTransaction() throws XAException {
+        snapshotter.loadSnapshot( data1 );
+
+        XAResource xa = pm.getXAResource();
+        Xid xid = new DroolsXid( 100,
+                                 new byte[]{0x01},
+                                 new byte[]{0x01} );
+        xa.start( xid,
+                  XAResource.TMNOFLAGS );
+
+        try {
+            pm.save();
+            fail( "save should fail as the session currently has an open transaction" );
+        } catch ( Exception e ) {
+            // success
+        }
+    }
+
+    public void testLoadInOpenTransaction() throws XAException {
+        snapshotter.loadSnapshot( data1 );
+        pm.save();
+
+        XAResource xa = pm.getXAResource();
+        Xid xid = new DroolsXid( 100,
+                                 new byte[]{0x01},
+                                 new byte[]{0x01} );
+        xa.start( xid,
+                  XAResource.TMNOFLAGS );
+
+        try {
+            pm.load();
+            fail( "load should fail as the session currently has an open transaction" );
+        } catch ( Exception e ) {
+            // success
+        }
+    }
+
+    public void testLoadSaveAfterTransaction() throws Exception {
+        snapshotter.loadSnapshot( data1 );
+        XAResource xa = pm.getXAResource();
+        Xid xid = new DroolsXid( 100,
+                                 new byte[]{0x01},
+                                 new byte[]{0x01} );
+        xa.start( xid,
+                  XAResource.TMNOFLAGS );
+
+        snapshotter.loadSnapshot( data2 );
+        xa.commit( xid,
+                   true );
+
+        pm.save();
+        assertTrue( assertEquals( data2,
+                                  snapshotter.bytes ) );
+
+        snapshotter.loadSnapshot( data3 );
+        assertTrue( assertEquals( data3,
+                                  snapshotter.bytes ) );
+
+        pm.load();
+        assertTrue( assertEquals( data2,
+                                  snapshotter.bytes ) );
+    }
+
+    public boolean assertEquals(byte[] bytes1,
+                                byte[] bytes2) {
+        if ( bytes1.length != bytes2.length ) {
+            return false;
+        }
+
+        for ( int i = 0; i < bytes1.length; i++ ) {
+            if ( bytes1[i] != bytes2[i] ) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersisterTest.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryXaResourceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryXaResourceTest.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryXaResourceTest.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -14,11 +14,11 @@
     private byte[]           data3 = new byte[]{1, 1, 1, 0, 0};
 
     MockByteArraySnapshotter snapshotter;
-    MemoryPersistenceManager pm;
+    MemoryPersister pm;
 
     protected void setUp() throws Exception {
         snapshotter = new MockByteArraySnapshotter();
-        pm = new MemoryPersistenceManager( snapshotter );
+        pm = new MemoryPersister( snapshotter );
     }
 
     public void testInitFields() {
@@ -27,7 +27,7 @@
         // make sure these are initialised correctly
         assertEquals( 0,
                       xa.list.size() );
-        assertNull( pm.lastSave );
+        assertNull( pm.lastSave.getData( null ) );
     }
 
     public void testSingleTransactionWithRollBack() throws Exception {
@@ -43,7 +43,7 @@
         assertEquals( 1,
                       xa.list.size() ); // we only have one transaction
         assertSame( xa.data.get( xa.list.get( 0 ) ),
-                    pm.lastSave ); // lastSave is always set to begin of the first transaction
+                    pm.lastSave.getData(null) ); // lastSave is always set to begin of the first transaction
 
         snapshotter.bytes = data2;
         xa.rollback( xid );
@@ -73,7 +73,7 @@
         assertEquals( 0,
                       xa.list.size() );
         assertSame( data2,
-                    pm.lastSave );
+                    pm.lastSave.getData(null) );
 
         // should do nothing as there is nothing to rollback
         xa.rollback( xid );
@@ -104,7 +104,7 @@
         assertEquals( 2,
                       xa.list.size() ); // we now have two levels
         assertSame( xa.data.get( xa.list.get( 0 ) ),
-                    pm.lastSave ); // check lastSave is still first transaction
+                    pm.lastSave.getData(null) ); // check lastSave is still first transaction
 
         Xid xid3 = new DroolsXid( 100,
                                   new byte[]{0x03},
@@ -120,7 +120,7 @@
                    true );
 
         assertSame( xa.data.get( xid2 ),
-                    pm.lastSave ); // xid2 should now be the lastSave point
+                    pm.lastSave.getData(null) ); // xid2 should now be the lastSave point
 
         // rollback xid2, should result in rolling back xid3 too
         xa.rollback( xid2 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/transaction/MockByteArraySnapshotter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/transaction/MockByteArraySnapshotter.java	2008-09-02 20:51:16 UTC (rev 22329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/transaction/MockByteArraySnapshotter.java	2008-09-02 20:56:30 UTC (rev 22330)
@@ -5,13 +5,13 @@
 
 import org.drools.persistence.ByteArraySnapshotter;
 
-public class MockByteArraySnapshotter implements ByteArraySnapshotter {
+public class MockByteArraySnapshotter<T> implements ByteArraySnapshotter<T> {
+	
     public byte[] bytes;
-
+    
     public MockByteArraySnapshotter() {
-        
     }
-    
+
     public MockByteArraySnapshotter(byte[] bytes) {
         this.bytes = bytes;
     }
@@ -22,5 +22,9 @@
 
     public void loadSnapshot(byte[] bytes) {
         this.bytes = bytes;
-    }        
+    }
+
+	public T getObject() {
+		return null;
+	}        
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list