[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