[jboss-svn-commits] JBL Code SVN: r29126 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa: src/main/java/org/drools/persistence/processinstance and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 31 21:30:46 EDT 2009


Author: salaboy21
Date: 2009-08-31 21:30:45 -0400 (Mon, 31 Aug 2009)
New Revision: 29126

Added:
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf
Modified:
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
Log:
Variable persistence updated

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml	2009-09-01 01:30:45 UTC (rev 29126)
@@ -32,6 +32,7 @@
     	<dependency>
     		<groupId>org.drools</groupId>
     		<artifactId>drools-core</artifactId>
+            <version>5.0.1.SNAPSHOT</version>
     	</dependency>         		  
        
     	<dependency>
@@ -80,7 +81,7 @@
     	<dependency>
     		<groupId>com.h2database</groupId>
     		<artifactId>h2</artifactId>
-    		<version>1.0.77</version>
+    		<version>1.1.117</version>
     	</dependency>
     	
     	<dependency>
@@ -120,11 +121,11 @@
 		    <scope>test</scope>
     	</dependency>
     	
-    	<!--dependency>
+    	<dependency>
             <groupId>postgresql</groupId>
             <artifactId>postgresql</artifactId>
             <version>8.3-603.jdbc3</version>
-        </dependency-->
+        </dependency>
 
       </dependencies>              
                   

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -21,13 +21,17 @@
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.EntityManager;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
 import javax.persistence.Lob;
 
 import javax.persistence.MapKey;
 import javax.persistence.OneToMany;
+import javax.persistence.PostPersist;
+import javax.persistence.PostUpdate;
 import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import javax.persistence.Transient;
@@ -45,6 +49,7 @@
 import org.drools.process.instance.impl.ProcessInstanceImpl;
 import org.drools.ruleflow.instance.RuleFlowProcessInstance;
 import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.process.ProcessInstance;
 import org.hibernate.annotations.CollectionOfElements;
 
@@ -79,7 +84,9 @@
     private Environment env;
     private boolean serializeVariables = false;
 
-    @OneToMany(mappedBy="processInstanceInfo", cascade = CascadeType.ALL )
+   // @OneToMany(mappedBy="processInstanceInfo", targetEntity=VariableInstanceInfo.class )
+    @OneToMany(cascade=CascadeType.ALL)
+    @JoinColumn(name = "processId")
     @MapKey(name="name")
     private Map<String,VariableInstanceInfo> variables;
 
@@ -183,9 +190,8 @@
         // saves the processInstance type first
         stream.writeUTF(processInstanceType);
     }
-    
+    @PrePersist
     @PreUpdate
-    @PrePersist
     public void update() {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         boolean variablesChanged = false;
@@ -217,13 +223,10 @@
         	System.out.println("Saving " + variable + " " + variables.get(variable));
         }
     }
-
+    
     private boolean persistVariables() {
     	boolean changed = false;
-        // VariableScopeInstance variableScopeInstance =
-        //             (VariableScopeInstance)
-        //                 ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
-        //                     .getContextInstance( VariableScope.VARIABLE_SCOPE );
+       
         VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance) this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
         Map<String, Object> processVariables = variableScopeInstance.getVariables();
         List<String> keys = new ArrayList<String>(processVariables.keySet());
@@ -234,17 +237,17 @@
             }
         });
         VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
-     //   this.clearVariables();
-       
+        
         for (String key : keys) {
-        	Object value =  processVariables.get(key);
-        	if (value != null) {
-				VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, value, this.env);
-				if (variable != null) {
-				    variable.setProcessInstanceInfo(this);
-				    changed = addVariable(variable.getName(),variable);
-				}
-        	}
+
+                 VariableInstanceInfo variable =        
+                         persistenceStrategy.persistVariable(key, processVariables.get(key), this.env);
+                if (variable != null) {
+                        getVariables().put(variable.getName(), variable);
+                      //  variable.setProcessInstanceInfo(this);
+                      //  variable.setProcessId(this.processInstanceId);
+                }
+
         }
         //If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
         //we just serialize the variables inside the blob
@@ -268,14 +271,32 @@
         this.variables = variables;
     }
 
-    public boolean addVariable(String name, VariableInstanceInfo variable) {
-    	Object oldValue = variables.put(name, variable);
-    	return !variable.equals(oldValue);
+
+    public void addVariable(String name, VariableInstanceInfo variable) {
+            ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).persist(variable);
+            getVariables().put(variable.getName(), variable);
+           
+       
+       
+
     }
+    public void removeVariable(String name){
+        VariableInstanceInfo variable =  this.variables.remove(name);
+        
+        if(variable != null){
+//            if(variable.getProcessInstanceInfo() != null){
+//                variable.getProcessInstanceInfo().getVariables().remove(variable.getName());
+//             }
+            VariableInstanceInfo variableManaged = ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).find(VariableInstanceInfo.class, variable.getName());
+            if(variableManaged != null){
+                ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).remove(variable);
+            }
+        }
+    }
 
-//    public void clearVariables() {
-//        this.getVariables().clear();
-//    }
+    public void clearVariables() {
+        this.getVariables().clear();
+    }
 
     /**
      * @return the serializeVariables

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -112,21 +112,27 @@
 
     //this method should return an Array of types if multiple variable persistece is enabled
     private String getVariablePersistenceType(Object o) {
-
+        if(o == null){
+            return null;
+        }
         Annotation[] annotations = o.getClass().getDeclaredAnnotations();
-        //First annotations, because annotations have more precedence (??)
-        for (Annotation annotation : annotations) {
-            String persisterFQN = getTypes().getProperty(annotation.annotationType().getName());
-            if (persisterFQN != null && !persisterFQN.equals("")) {
-                return persisterFQN;
+        if(annotations != null){
+            //First annotations, because annotations have more precedence (??)
+            for (Annotation annotation : annotations) {
+                String persisterFQN = getTypes().getProperty(annotation.annotationType().getName());
+                if (persisterFQN != null && !persisterFQN.equals("")) {
+                    return persisterFQN;
+                }
             }
         }
         //Then interfaces
         Class[] interfaces = o.getClass().getInterfaces();
-        for (Class clazz : interfaces) {
-            String persisterFQN = getTypes().getProperty(clazz.getName());
-            if (persisterFQN != null && !persisterFQN.equals("")) {
-                return persisterFQN;
+        if(interfaces != null){
+            for (Class clazz : interfaces) {
+                String persisterFQN = getTypes().getProperty(clazz.getName());
+                if (persisterFQN != null && !persisterFQN.equals("")) {
+                    return persisterFQN;
+                }
             }
         }
         return null;

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -49,37 +49,47 @@
     public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
         
         
-        //EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+        
         EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
         VariableInstanceInfo variable = null;
         try {
            
+            variable = em.find(VariableInstanceInfo.class, name);
+            if(variable !=  null && !(variable instanceof JPAPersistedVariable) ){
+                em.getTransaction().begin();
+                em.remove(variable);
+                em.getTransaction().commit();
+                variable = null;
+            }
+            
+            Number idValue = getClassIdValue(o);
+          
+            if(idValue != null){
 
-          //  em.joinTransaction();
-
-            em.persist(o);
-
-            variable = new JPAPersistedVariable();
-
+                  em.merge(o);
+            }else{
+                em.persist(o);
+            }
+            
+            boolean newVariable = false;
+            if(variable == null){
+                variable = new JPAPersistedVariable();
+                newVariable  = true;
+            }
             variable.setPersister(this.getClass().getName());
             variable.setName(name);
 
             ((JPAPersistedVariable) variable).setRealVariable(o);
-            Field[] fields = o.getClass().getDeclaredFields();
-            Number idValue = null;
-            for(int i=0; i< fields.length; i++){
-                Id id = fields[i].getAnnotation(Id.class);
-                if(id != null){
-                    idValue = (Long) o.getClass().getMethod("get"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1), new Class<?>[]{}).invoke(o, new Object[]{});
-                    break;
-                }
-            }
-
+            //Need to get it again because now is changed
+            idValue = getClassIdValue(o);
+     
             ((JPAPersistedVariable) variable).setVarid(idValue.longValue());
             ((JPAPersistedVariable) variable).setVartype(o.getClass().getCanonicalName());
-
-        //    em.persist(variable);
-
+            if(newVariable){
+            
+                em.persist(variable);
+               
+            }
         } catch (Throwable t1) {
             t1.printStackTrace();
             
@@ -87,6 +97,7 @@
                         t1);
             
         }
+        
         return variable;
     }
 
@@ -105,4 +116,17 @@
     public List<VariableInstanceInfo> getExternalPersistedVariables(Long processInstanceId) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
+
+    private Number getClassIdValue(Object o) throws NoSuchMethodException, SecurityException, IllegalAccessException, InvocationTargetException, IllegalArgumentException {
+        Field[] fields = o.getClass().getDeclaredFields();
+        Number idValue = null;
+        for (int i = 0; i < fields.length; i++) {
+            Id id = fields[i].getAnnotation(Id.class);
+            if (id != null) {
+                idValue = (Long) o.getClass().getMethod("get"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1), new Class<?>[]{}).invoke(o, new Object[]{});
+                break;
+            }
+        }
+        return idValue;
+    }
 }

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -47,35 +47,33 @@
     }
 
     public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
-        
-        
-        //EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
-       // EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+        EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
         VariableInstanceInfo variable = null;
         try {
-            
-           // em.joinTransaction();
-
-
-
-            variable = new SerializablePersistedVariable();
+            variable = em.find(VariableInstanceInfo.class, name);
+            if(variable !=  null && !(variable instanceof SerializablePersistedVariable) ){
+              em.getTransaction().begin();
+                em.remove(variable);
+              em.getTransaction().commit();
+                variable = null;
+            }
+            boolean newVariable = false;
+            if(variable == null){
+                variable = new SerializablePersistedVariable();
+                newVariable = true;
+            }
             variable.setName(name);
             variable.setPersister(this.getClass().getName());
             ((SerializablePersistedVariable)variable).setContent(getBytes(o));
-
-            //em.persist(variable);
-
-
-
+            if(newVariable){
+            
+                em.persist(variable);
+              
+            }
         } catch (Throwable t1) {
             t1.printStackTrace();
-            
-            
-                throw new RuntimeException("Could not execute command",
-                        t1);
-            
         }
-
+        
         return variable;
 
 

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -29,11 +29,11 @@
 
 @Entity
 public class JPAPersistedVariable extends VariableInstanceInfo {
-     @Transient
+    @Transient
      private Object realVariable;
      private String vartype;
      private Long varid;
-
+     
     public JPAPersistedVariable() {
     }
 

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -21,6 +21,7 @@
 
 
 
+import javax.persistence.CascadeType;
 import javax.persistence.DiscriminatorColumn;
 import javax.persistence.DiscriminatorType;
 import javax.persistence.DiscriminatorValue;
@@ -44,27 +45,42 @@
 @DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.STRING,length=50)
 @DiscriminatorValue("GEN")
 public class VariableInstanceInfo implements Serializable {
-    @Id @GeneratedValue(strategy=GenerationType.AUTO)
-    private Long id;
+    @Id 
     private String name;
-    @ManyToOne()
-    private ProcessInstanceInfo processInstanceInfo;
+    //@ManyToOne()
+    //private ProcessInstanceInfo processInstanceInfo;
+  
 
 
-
     private String persister;
 
     public VariableInstanceInfo() {
     }
 
-    
-   
-    public Long getId() {
-        return id;
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final VariableInstanceInfo other = (VariableInstanceInfo) obj;
+        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
+            return false;
+        }
+        if ((this.persister == null) ? (other.persister != null) : !this.persister.equals(other.persister)) {
+            return false;
+        }
+        return true;
     }
 
-    public void setId(Long id) {
-        this.id = id;
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 47 * hash + (this.name != null ? this.name.hashCode() : 0);
+        hash = 47 * hash + (this.persister != null ? this.persister.hashCode() : 0);
+        return hash;
     }
 
     /**
@@ -95,46 +111,14 @@
     public void setPersister(String persister) {
         this.persister = persister;
     }
-    public ProcessInstanceInfo getProcessInstanceInfo() {
-        return processInstanceInfo;
-    }
+//    public ProcessInstanceInfo getProcessInstanceInfo() {
+//        return processInstanceInfo;
+//    }
+//
+//    public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
+//        this.processInstanceInfo = processInstanceInfo;
+//    }
 
-    public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
-        this.processInstanceInfo = processInstanceInfo;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final VariableInstanceInfo other = (VariableInstanceInfo) obj;
-        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
-            return false;
-        }
-        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
-            return false;
-        }
-        if (this.processInstanceInfo != other.processInstanceInfo && (this.processInstanceInfo == null || !this.processInstanceInfo.equals(other.processInstanceInfo))) {
-            return false;
-        }
-        if ((this.persister == null) ? (other.persister != null) : !this.persister.equals(other.persister)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
-        hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 97 * hash + (this.processInstanceInfo != null ? this.processInstanceInfo.hashCode() : 0);
-        hash = 97 * hash + (this.persister != null ? this.persister.hashCode() : 0);
-        return hash;
-    }
+   
     
 }

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml	2009-09-01 01:30:45 UTC (rev 29126)
@@ -20,7 +20,7 @@
       <property name="hibernate.max_fetch_depth" value="3"/>
       <property name="hibernate.hbm2ddl.auto" value="update"/>
       <property name="hibernate.show_sql" value="true"/>
-      <property name="hibernate.connection.autocommit" value="false"/>
+      <!--property name="hibernate.connection.autocommit" value="false"/-->
       <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
     </properties>
   </persistence-unit>

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -18,7 +18,6 @@
 package org.drools.persistence.session;
 
 import java.io.Serializable;
-import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
@@ -67,4 +66,35 @@
     public void setTest(String test) {
         this.test = test;
     }
+    public String toString(){
+        return "VARIABLE: "+this.getId() +" - "+this.getTest();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyEntity other = (MyEntity) obj;
+        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
+            return false;
+        }
+        if ((this.test == null) ? (other.test != null) : !this.test.equals(other.test)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 41 * hash + (this.test != null ? this.test.hashCode() : 0);
+        return hash;
+    }
+
+    
 }

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -45,4 +45,30 @@
         this.text = text;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyVariableSerializable other = (MyVariableSerializable) obj;
+        if ((this.text == null) ? (other.text != null) : !this.text.equals(other.text)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 37 * hash + (this.text != null ? this.text.hashCode() : 0);
+        return hash;
+    }
+
+    public String toString(){
+        return "Serializable Variable: "+this.getText();
+    }
+
 }

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -17,19 +17,16 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.SessionConfiguration;
-import org.drools.audit.WorkingMemoryConsoleLogger;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.ProcessBuilder;
 import org.drools.definition.KnowledgePackage;
 import org.drools.definitions.impl.KnowledgePackageImp;
-import org.drools.event.RuleFlowEventListener;
 import org.drools.process.command.CompleteWorkItemCommand;
 import org.drools.process.command.GetProcessInstanceCommand;
 import org.drools.process.command.StartProcessCommand;
 import org.drools.process.core.Work;
 import org.drools.process.core.impl.WorkImpl;
 import org.drools.process.core.timer.Timer;
-import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
 import org.drools.rule.Package;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.ruleflow.instance.RuleFlowProcessInstance;
@@ -53,8 +50,12 @@
 import bitronix.tm.resource.jdbc.PoolingDataSource;
 import java.util.HashMap;
 import java.util.Map;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
 
 public class SingleSessionCommandServiceTest extends TestCase {
 
@@ -84,6 +85,20 @@
 //        ds1.getDriverProperties().put( "serverName",
 //                                       "localhost:5432/droolsPersistence" );
 
+
+        ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
+        ds1.setMaxPoolSize( 3 );
+        ds1.setAllowLocalTransactions( true );
+        ds1.getDriverProperties().put( "user",
+                                       "salaboy" );
+        ds1.getDriverProperties().put( "password",
+                                       "salaboy" );
+        ds1.getDriverProperties().put("databaseName", "droolsPersistence");
+        ds1.getDriverProperties().put("serverName", "localhost");
+
+
+
+
         ds1.init();
 
         emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
@@ -778,16 +793,39 @@
         list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
         return list;
     }
+    public Collection<KnowledgePackage> getTestVariableProcess(){
+         KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        try {
+
+            builder.add( new ClassPathResource( "testVariables.rf" ) ,
+                         ResourceType.DRF);
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+        KnowledgeBuilderErrors errors = builder.getErrors();
+        if (errors.size() > 0) {
+            for (KnowledgeBuilderError error : errors) {
+                System.err.println(error);
+            }
+            throw new IllegalArgumentException("Could not parse knowledge.");
+        }
+
+        return builder.getKnowledgePackages();
+    }
+
     public void testPersistenceVariables() {
-          Environment env = KnowledgeBaseFactory.newEnvironment();
+        Environment env = KnowledgeBaseFactory.newEnvironment();
         env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
                  emf );
         env.set( EnvironmentName.TRANSACTION_MANAGER,
                  TransactionManagerServices.getTransactionManager() );
 
+       
+
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
-        kbase.addKnowledgePackages( kpkgs );
+              
+        kbase.addKnowledgePackages( getTestVariableProcess() );
 
         Properties properties = new Properties();
         properties.setProperty( "drools.commandService",
@@ -804,10 +842,10 @@
                                                                                config,
                                                                                env );
         StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId("org.drools.test.TestProcess");
+        startProcessCommand.setProcessId("testVariables");
         Map<String,Object> parameters = new HashMap<String,Object>();
 
-        parameters.put("var1", new MyEntity("This is a test Entity"));
+       parameters.put("var1", new MyEntity("This is a test Entity"));
         parameters.put("var2", new MyVariableSerializable("This is a test SerializableObject"));
 
         startProcessCommand.setParameters(parameters);
@@ -820,25 +858,38 @@
         processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
         assertNotNull(processInstance);
 
-        VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
-                ((RuleFlowProcessInstance)processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
-        Map<String, Object> variables = variableScopeInstance.getVariables();
+       
+        MyEntity var1 = (MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var1");
+        MyVariableSerializable var2 = (MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var2");
 
-        MyEntity var1 = (MyEntity)variables.get("var1");
-        MyVariableSerializable var2 = (MyVariableSerializable)variables.get("var2");
-
         assertNotNull(var1);
         assertEquals("This is a test Entity", var1.getTest());
         assertNotNull(var2);
         assertEquals("This is a test SerializableObject", var2.getText());
 
-        assertEquals("WorkItem1",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
-        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+
+        assertEquals("Log1",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+        VariableCheckerTestWorkItemHandler handler = VariableCheckerTestWorkItemHandler.getInstance();
         WorkItem workItem = handler.getWorkItem();
+
+
         assertNotNull( workItem );
+        var1 = (MyEntity)workItem.getParameter("var1");
+        var2 = (MyVariableSerializable)workItem.getParameter("var2");
+        assertNotNull(var1);
+        assertNotNull(var2);
+        assertEquals("This is a test Entity",var1.getTest());
+        assertEquals("This is a test SerializableObject",var2.getText());
 
+
         CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        Map<String,Object> modifiedVariables = new HashMap<String,Object>();
+        var1.setTest("MODIFIED");
+        var2.setText("MODIFIED");
+        modifiedVariables.put("var1", var1);
+        modifiedVariables.put("var2", var2);
+        completeWorkItemCommand.setResults(modifiedVariables);
         service.execute( completeWorkItemCommand );
 
         service = new SingleSessionCommandService(kbase, config,env);
@@ -847,16 +898,64 @@
         processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
         assertNotNull(processInstance);
 
-        assertEquals("WorkItem2",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+        assertEquals("MODIFIED",((MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var1")).getTest());
+        assertEquals("MODIFIED",((MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var2")).getText());
 
-        variableScopeInstance = (VariableScopeInstance)
-                ((RuleFlowProcessInstance)processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
-        variableScopeInstance.setVariable("var1", new MyEntity("This is a test Entity MODIFIED"));
-        variableScopeInstance.setVariable("var2", new MyVariableSerializable("This is a test SerializableObject"));
 
+        assertEquals("Log2",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
 
+        handler = VariableCheckerTestWorkItemHandler.getInstance();
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+
+        var1 = (MyEntity)workItem.getParameter("var1");
+        var2 = (MyVariableSerializable)workItem.getParameter("var2");
+        assertNotNull(var1);
+        assertNotNull(var2);
+        assertEquals("MODIFIED",var1.getTest());
+        assertEquals("MODIFIED",var2.getText());
+
+
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        modifiedVariables = new HashMap<String,Object>();
+        var1.setTest("MODIFIED TWICE");
+        var2.setText("MODIFIED TWICE");
+        modifiedVariables.put("var1", var2);
+        modifiedVariables.put("var2", var1);
+        completeWorkItemCommand.setResults(modifiedVariables);
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+
+        service.execute( completeWorkItemCommand );
+
+
         service = new SingleSessionCommandService(kbase, config,env);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+        processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
 
+        assertNotNull(processInstance);
 
+        assertEquals("MODIFIED TWICE",((MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var2")).getTest());
+        assertEquals("MODIFIED TWICE",((MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var1")).getText());
+
+        service = new SingleSessionCommandService(kbase, config,env);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+        processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+        assertNotNull(processInstance);
+
+        
+
+        MyVariableSerializable newvar1 = (MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var1");
+        MyEntity newvar2 = (MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var2");
+
+        assertNotNull(var2);
+        assertEquals("MODIFIED TWICE", newvar2.getTest());
+        assertNotNull(var1);
+        assertEquals("MODIFIED TWICE", newvar1.getText());
+
+        assertEquals("Log3",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+
+
     }
 }

Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -0,0 +1,33 @@
+package org.drools.persistence.session;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class VariableCheckerTestWorkItemHandler implements WorkItemHandler {
+
+	private static VariableCheckerTestWorkItemHandler INSTANCE = new VariableCheckerTestWorkItemHandler();
+	
+	private WorkItem workItem;
+	
+	private VariableCheckerTestWorkItemHandler() {
+	}
+	
+	public static VariableCheckerTestWorkItemHandler getInstance() {
+		return INSTANCE;
+	}
+	
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		this.workItem = workItem;
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+	}
+	
+	public WorkItem getWorkItem() {
+		WorkItem result = workItem;
+		workItem = null;
+		return result;
+	}
+
+}

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2009-09-01 01:30:45 UTC (rev 29126)
@@ -42,6 +42,17 @@
                                        "sasa" );
         ds1.getDriverProperties().put( "URL",
                                        "jdbc:h2:mem:mydb" );
+
+//        ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
+//        ds1.setMaxPoolSize( 3 );
+//        ds1.setAllowLocalTransactions( true );
+//        ds1.getDriverProperties().put( "user",
+//                                       "salaboy" );
+//        ds1.getDriverProperties().put( "password",
+//                                       "salaboy" );
+//        ds1.getDriverProperties().put( "serverName",
+//                                       "localhost:5432/droolsPersistence" );
+
         ds1.init();
 
     }

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf	2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf	2009-09-01 01:30:45 UTC (rev 29126)
@@ -3,9 +3,10 @@
 // The allowed properties are name, parameters, displayName, icon and customEditor
 // The returned result should thus be of type List<Map<String, Object>>
 import org.drools.persistence.session.TestWorkItemHandler;
+import org.drools.persistence.session.VariableCheckerTestWorkItemHandler;
 
 [
-
+  "Log" : VariableCheckerTestWorkItemHandler.getInstance(),
   "MyWork" : TestWorkItemHandler.getInstance(),
   "Human Task" : TestWorkItemHandler.getInstance()
       

Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf	2009-09-01 01:30:45 UTC (rev 29126)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="flow" id="testVariables" package-name="org.drools.examples" >
+
+  <header>
+    <variables>
+      <variable name="var1" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+      </variable>
+      <variable name="var2" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="147" y="32" width="80" height="40" />
+ 
+    <workItem id="2" name="Log1" x="147" y="191" width="80" height="40" >
+      <work name="Log" >
+       
+      </work>
+      <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <actionNode id="3" name="Action1" x="146" y="117" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <actionNode id="4" name="Action2" x="147" y="268" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <workItem id="5" name="Log2" x="146" y="345" width="80" height="40" >
+      <work name="Log" >
+      
+      </work>
+     <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <actionNode id="6" name="Action3" x="144" y="422" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <workItem id="7" name="Log3" x="146" y="345" width="80" height="40" >
+      <work name="Log" >
+        
+      </work>
+      <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <end id="8" name="End" x="145" y="494" width="80" height="40" />
+  </nodes>
+
+  <connections>
+    <connection from="3" to="2" />
+    <connection from="1" to="3" />
+    <connection from="2" to="4" />
+    <connection from="4" to="5" />
+    <connection from="5" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="8" />
+  </connections>
+
+</process>
\ No newline at end of file



More information about the jboss-svn-commits mailing list