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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 7 11:57:18 EDT 2009


Author: salaboy21
Date: 2009-05-07 11:57:17 -0400 (Thu, 07 May 2009)
New Revision: 26421

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/JPAProcessInstanceManager.java
   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/variabletypes/VariableInstanceInfo.java
   labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml
   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/SingleSessionCommandServiceTest.java
Log:
move the logic to persist variables from JPAProcessInstanceManager to ProcessInstanceInfo, Entity mappings change, table structure change, not working properly, because variables are inserted and not updated when they exists

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml	2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml	2009-05-07 15:57:17 UTC (rev 26421)
@@ -118,7 +118,13 @@
 		    <artifactId>btm</artifactId>
 		    <version>1.3.2</version>    	
 		    <scope>test</scope>
-    	</dependency>    	
+    	</dependency>
+    	
+    	<!--dependency>
+            <groupId>postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>8.3-603.jdbc3</version>
+        </dependency-->
 
       </dependencies>              
                   

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2009-05-07 15:57:17 UTC (rev 26421)
@@ -35,66 +35,15 @@
     }
 
     public void addProcessInstance(ProcessInstance processInstance) {
-        ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance );
+        ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance, this.workingMemory.getEnvironment() );
         EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
         em.persist( processInstanceInfo );
         ((ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
-        persistVariables(processInstanceInfo);
+     
         processInstanceInfo.updateLastReadDate();
         internalAddProcessInstance(processInstance);
     }
-     private void persistVariables(ProcessInstanceInfo processInstanceInfo) {
-       // VariableScopeInstance variableScopeInstance =
-       //             (VariableScopeInstance)
-       //                 ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
-       //                     .getContextInstance( VariableScope.VARIABLE_SCOPE );
-        VariableScopeInstance variableScopeInstance =  (VariableScopeInstance) 
-                                                            ((RuleFlowProcessInstance)
-                                                                processInstanceInfo
-                                                                    .getProcessInstance(this.workingMemory))
-                                                                        .getContextInstance( VariableScope.VARIABLE_SCOPE );
-        Map<String, Object> processVariables = variableScopeInstance.getVariables();
-        List<String> keys = new ArrayList<String>(processVariables.keySet());
-        Collections.sort(keys, new Comparator<String>() {
 
-            public int compare(String o1, String o2) {
-                return o1.compareTo(o2);
-            }
-        });
-        VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
-        processInstanceInfo.clearVariables();
-        for (String key : keys) {
-            VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key),this.workingMemory.getEnvironment());
-            if(variable != null){
-                variable.setProcessInstanceInfo(processInstanceInfo);
-                processInstanceInfo.addVariables(variable);
-            }
-        }
-        //If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
-        //we just serialize the variables inside the blob
-        if(processInstanceInfo.getVariables().size() == 0){
-            processInstanceInfo.setSerializeVariables(true);
-        }
-    }
-     private ProcessInstance restoreVariables(long id, ProcessInstance processInstance) {
-
-        VariableScopeInstance variableScopeInstance = (VariableScopeInstance)processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
-        EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
-        List<VariableInstanceInfo> variablesInfo = (List<VariableInstanceInfo>)em.createNamedQuery("VariableInstancesInfoByProcessId")
-                    .setParameter("processId", id)
-                    .getResultList();
-        for(VariableInstanceInfo variableInfo : variablesInfo){
-            VariablePersistenceStrategy persistenceStrategy =
-                        VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
-            variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo,this.workingMemory.getEnvironment()));
-        }
-        variableScopeInstance.setProcessInstance(processInstance);
-       
-
-        return processInstance;
-    }
-
-
     public void internalAddProcessInstance(ProcessInstance processInstance) {
     	if (this.processInstances == null) {
         	this.processInstances = new HashMap<Long, ProcessInstance>();
@@ -119,15 +68,12 @@
         }
         processInstanceInfo.updateLastReadDate();
         processInstance = (ProcessInstance)
-        	processInstanceInfo.getProcessInstance(workingMemory);
+        	processInstanceInfo.getProcessInstance(workingMemory,this.workingMemory.getEnvironment());
         Process process = ((InternalRuleBase) workingMemory.getRuleBase()).getProcess( processInstance.getProcessId() );
         if ( process == null ) {
             throw new IllegalArgumentException( "Could not find process " + processInstance.getProcessId() );
         }
         processInstance.setProcess( process );
-       if(!processInstanceInfo.isSerializeVariables()){
-                processInstance = restoreVariables(id,processInstance);
-            }
         if ( processInstance.getWorkingMemory() == null ) {
             processInstance.setWorkingMemory( (InternalWorkingMemory) workingMemory );
             

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-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2009-05-07 15:57:17 UTC (rev 26421)
@@ -8,18 +8,24 @@
 import java.io.ObjectOutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.PreUpdate;
 import javax.persistence.Transient;
@@ -32,7 +38,11 @@
 import org.drools.marshalling.impl.MarshallerWriteContext;
 import org.drools.marshalling.impl.ProcessInstanceMarshaller;
 import org.drools.marshalling.impl.ProcessMarshallerRegistry;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.Environment;
 import org.drools.runtime.process.ProcessInstance;
 import org.hibernate.annotations.CollectionOfElements;
 
@@ -61,10 +71,10 @@
     private Set<String> eventTypes = new HashSet<String>();
     private @Transient
     ProcessInstance processInstance;
-
+     @Transient private Environment env;
     private boolean serializeVariables=false;
-
-    @OneToMany(cascade=CascadeType.ALL, mappedBy="processInstanceInfo")
+    @OneToMany(cascade=CascadeType.ALL,  fetch=FetchType.EAGER)
+    //@OneToMany(cascade=CascadeType.ALL, mappedBy="processInstanceInfo", fetch=FetchType.EAGER)
     private List<VariableInstanceInfo> variables = new ArrayList<VariableInstanceInfo>();
 
     ProcessInstanceInfo() {
@@ -76,6 +86,13 @@
         startDate = new Date();
     }
 
+     public ProcessInstanceInfo(ProcessInstance processInstance, Environment env) {
+        this.processInstance = processInstance;
+        this.processId = processInstance.getProcessId();
+        startDate = new Date();
+        this.env = env;
+    }
+
     public long getId() {
         return processInstanceId;
     }
@@ -104,7 +121,8 @@
         return state;
     }
 
-    public ProcessInstance getProcessInstance(WorkingMemory workingMemory) {
+    public ProcessInstance getProcessInstance(WorkingMemory workingMemory, Environment env) {
+        this.env = env;
         if (processInstance == null) {
             try {
                 ByteArrayInputStream bais = new ByteArrayInputStream(
@@ -114,6 +132,8 @@
                 context.wm = (InternalWorkingMemory) workingMemory;
                 ProcessInstanceMarshaller marshaller = getMarshallerFromContext(context);
                 processInstance = marshaller.readProcessInstance(context,false);
+                restoreVariables();
+
                 context.close();
             } catch (IOException e) {
                 e.printStackTrace();
@@ -124,7 +144,20 @@
         }
         return processInstance;
     }
+     private void restoreVariables() {
 
+        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance)
+                                                                this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
+
+        for(VariableInstanceInfo variableInfo : this.getVariables()){
+            VariablePersistenceStrategy persistenceStrategy =
+                        VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
+            variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo,this.env));
+        }
+        //variableScopeInstance.setProcessInstance(this.processInstance);
+        
+    }
+
     private ProcessInstanceMarshaller getMarshallerFromContext(
             MarshallerReaderContext context) throws IOException {
         ObjectInputStream stream = context.stream;
@@ -153,7 +186,7 @@
             ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
             marshaller.writeProcessInstance(
                     context, processInstance,false);
-
+            persistVariables();
             context.close();
         } catch (IOException e) {
             throw new IllegalArgumentException(
@@ -171,7 +204,47 @@
             }
         }
     }
-    
+     private void persistVariables() {
+       // 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());
+        Collections.sort(keys, new Comparator<String>() {
+
+            public int compare(String o1, String o2) {
+                return o1.compareTo(o2);
+            }
+        });
+        VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
+        this.clearVariables();
+        for (String key : keys) {
+            Iterator<VariableInstanceInfo> it = this.getVariables().iterator();
+            while(it.hasNext()){
+                if(it.next().getName().equals(key)){
+                    //must update not persist again
+
+                }
+            }
+
+            VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key),this.env);
+            if(variable != null){
+               // variable.setProcessInstanceInfo(this);
+                this.addVariables(variable);
+            }
+        }
+        //If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
+        //we just serialize the variables inside the blob
+        if(this.getVariables().size() == 0){
+            this.setSerializeVariables(true);
+        }
+    }
     /**
      * @return the variables
      */

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-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java	2009-05-07 15:57:17 UTC (rev 26421)
@@ -37,8 +37,16 @@
 
     @SuppressWarnings("unchecked")
     public VariableInstanceInfo persistVariable(String name, Object o, Environment env) {
+        VariablePersister persister = getVariablePersister(o);
+         VariableInstanceInfo variable = null;
+        if(persister != null){
+           variable = persister.persistExternalVariable(name, o, env);
+        }
 
-        VariablePersister persister = null;
+        return variable;
+    }
+    private VariablePersister getVariablePersister(Object o){
+         VariablePersister persister = null;
         //Here i should foreach an Array of types for multiple variable persistence
         String persisterFQN = getVariablePersistenceType(o);
         if (persisterFQN != null && !persisterFQN.equals("")) {
@@ -48,7 +56,7 @@
                 Constructor constructor;
                 constructor = persisterClass.getConstructor(null);
                 persister = (VariablePersister) constructor.newInstance(null);
-
+                return persister;
             } catch (ClassNotFoundException ex) {
                 Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
             } catch (NoSuchMethodException ex) {
@@ -64,10 +72,6 @@
             } catch (InvocationTargetException ex) {
                 Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
             }
-
-
-            return persister.persistExternalVariable(name, o, env);
-
         }
         return null;
     }

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-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java	2009-05-07 15:57:17 UTC (rev 26421)
@@ -48,9 +48,9 @@
     @Id @GeneratedValue(strategy=GenerationType.AUTO)
     private Long id;
     private String name;
-    @ManyToOne()
-    @JoinColumn(name="processInstanceInfoId")
-    private ProcessInstanceInfo processInstanceInfo;
+//    @ManyToOne()
+//    @JoinColumn(name="processInstanceInfoId")
+//    private ProcessInstanceInfo processInstanceInfo;
     private String persister;
    
     public Long getId() {
@@ -78,18 +78,18 @@
     /**
      * @return the processInstanceInfo
      */
-    public ProcessInstanceInfo getProcessInstanceInfo() {
-        return processInstanceInfo;
-    }
+//    public ProcessInstanceInfo getProcessInstanceInfo() {
+//        return processInstanceInfo;
+//    }
+//
+//    /**
+//     * @param processInstanceInfo the processInstanceInfo to set
+//     */
+//    public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
+//        this.processInstanceInfo = processInstanceInfo;
+//    }
 
     /**
-     * @param processInstanceInfo the processInstanceInfo to set
-     */
-    public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
-        this.processInstanceInfo = processInstanceInfo;
-    }
-
-    /**
      * @return the persister
      */
     public String getPersister() {

Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml	2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml	2009-05-07 15:57:17 UTC (rev 26421)
@@ -13,7 +13,7 @@
     :type in elements(processInstanceInfo.eventTypes)
           </query>
       </named-query>
-       <named-query name="VariableInstancesInfoByProcessId">
+       <!--named-query name="VariableInstancesInfoByProcessId">
           <query>
 select
     v
@@ -22,5 +22,5 @@
 where
     v.processInstanceInfo.id = :processId
           </query>
-      </named-query>
+      </named-query-->
 </entity-mappings>

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-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml	2009-05-07 15:57:17 UTC (rev 26421)
@@ -16,6 +16,7 @@
     <class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
     <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+      <!--property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/-->
       <property name="hibernate.max_fetch_depth" value="3"/>
       <property name="hibernate.hbm2ddl.auto" value="update"/>
       <property name="hibernate.show_sql" value="true"/>

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-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2009-05-07 15:57:17 UTC (rev 26421)
@@ -73,6 +73,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();
 
         emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );




More information about the jboss-svn-commits mailing list