[jboss-svn-commits] JBL Code SVN: r25037 - labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Feb 1 13:51:11 EST 2009


Author: salaboy21
Date: 2009-02-01 13:51:10 -0500 (Sun, 01 Feb 2009)
New Revision: 25037

Added:
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializablePersistedVariable.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializableVariablePersister.java
Modified:
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAVariablePersister.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariableInstanceInfo.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersister.java
Log:
EJB3 Entity (JPA Entity) persistence ready, need some improvements, half of the work done for Serializable Variables, needs some refactoring and the support for multiple variable persistence.

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -55,10 +55,9 @@
         List<VariableInstanceInfo> variablesInfo = (List<VariableInstanceInfo>)manager.createNamedQuery("VariableInstancesInfoByProcessId")
                     .setParameter("processId", processInstance.getId())
                     .getResultList();
-        for(VariableInstanceInfo variable : variablesInfo){
-            variable.getClass().getName();
-            //@TODO: set variable in the variableScopeInstance
-            //variableScopeInstance.setVariable(name, this);
+        for(VariableInstanceInfo variableInfo : variablesInfo){
+            VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
+            variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo));
         }
         processInstance.addContextInstance(VariableScope.VARIABLE_SCOPE, variableScopeInstance);
 
@@ -82,6 +81,7 @@
         processInstanceInfo.clearVariables();
         for (String key : keys) {
             VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key));
+            //@TODO: i'm persisting the variable with JPA and I should persist it with something that the strategy says
             manager.persist(((JPAPersistedVariable)variable).getRealVariable());
             updateVariableInstanceInfo(variable);
             variable.setProcessInstanceInfo(processInstanceInfo);
@@ -112,9 +112,10 @@
         processInstance.setProcess(process);
         if (processInstance.getWorkingMemory() == null) {
             processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
+            processInstance = resolveInputVariables(processInstance);
             ((ProcessInstanceImpl) processInstance).reconnect();
         }
-        processInstance = resolveInputVariables(processInstance);
+        
         return processInstance;
     }
 

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAVariablePersister.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAVariablePersister.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -35,6 +35,8 @@
  * @author salaboy
  */
 public class JPAVariablePersister implements VariablePersister {
+
+    //@TODO: i must obtain this from the session?? because if not i'm in another tx
     private EntityManagerFactory emf;
     private EntityManager em;
 
@@ -46,26 +48,18 @@
 
     public VariableInstanceInfo persistExternalVariable(String name, Object o) {
         VariableInstanceInfo variable = new JPAPersistedVariable();
+        variable.setPersister(this.getClass().getName());
         variable.setName(name);
         ((JPAPersistedVariable)variable).setRealVariable(o);
-
-
-     
-        
         return variable;
     }
 
   
 
-    public VariableInstanceInfo getExternalPersistedVariable(String name, Long processInstanceId) {
+    public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo) {
         try {
-
-            VariableInstanceInfo variableInfo = (VariableInstanceInfo)  em.createNamedQuery("getVariablesByName")
-                    .setParameter("name", name)
-                    .setParameter("processInstanceId", processInstanceId).getSingleResult();
-            
-            String varType = ((JPAPersistedVariable) variableInfo).getVartype();
-            return (VariableInstanceInfo) em.find(Class.forName(varType), variableInfo.getId());
+            String varType = ((JPAPersistedVariable) variableInstanceInfo).getVartype();
+            return em.find(Class.forName(varType),((JPAPersistedVariable) variableInstanceInfo).getVarid());
         } catch (ClassNotFoundException ex) {
             Logger.getLogger(JPAVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
         }

Added: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializablePersistedVariable.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializablePersistedVariable.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializablePersistedVariable.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -0,0 +1,46 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+
+package org.drools.persistence.processinstance;
+
+import javax.persistence.Entity;
+import javax.persistence.Lob;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class SerializablePersistedVariable extends VariableInstanceInfo{
+    @Lob
+    private byte[] content;
+
+    /**
+     * @return the content
+     */
+    public byte[] getContent() {
+        return content;
+    }
+
+    /**
+     * @param content the content to set
+     */
+    public void setContent(byte[] content) {
+        this.content = content;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializableVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializableVariablePersister.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/SerializableVariablePersister.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -0,0 +1,83 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+
+package org.drools.persistence.processinstance;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SerializableVariablePersister implements VariablePersister{
+    private EntityManagerFactory emf;
+    private EntityManager em;
+
+    public SerializableVariablePersister(){
+        emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+        em = emf.createEntityManager();
+
+    }
+
+    public VariableInstanceInfo persistExternalVariable(String name, Object o) {
+        SerializablePersistedVariable variable = new SerializablePersistedVariable();
+        variable.setName(name);
+        variable.setContent(getBytes(o));
+        return variable;
+    }
+
+    public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo) {
+//        try {
+//
+//            byte[] binaryArray = em.find(Class.forName(varType),((SerializablePersistedVariable) variableInstanceInfo).getVarid());
+//        } catch (ClassNotFoundException ex) {
+//            Logger.getLogger(JPAVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+        return null;
+    }
+
+    private byte[] getBytes(Object o){
+        ObjectOutputStream oos = null;
+        try {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            oos = new ObjectOutputStream(bos);
+            oos.writeObject(o);
+            oos.flush();
+            oos.close();
+            bos.close();
+            byte[] data = bos.toByteArray();
+            return data;
+        } catch (IOException ex) {
+            Logger.getLogger(SerializableVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            try {
+                oos.close();
+            } catch (IOException ex) {
+                Logger.getLogger(SerializableVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+        return null;
+    }
+
+}

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariableInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariableInstanceInfo.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariableInstanceInfo.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -50,6 +50,7 @@
     @ManyToOne()
     @JoinColumn(name="processInstanceInfoId")
     private ProcessInstanceInfo processInstanceInfo;
+    private String persister;
 
     public Long getId() {
         return id;
@@ -87,6 +88,20 @@
         this.processInstanceInfo = processInstanceInfo;
     }
 
+    /**
+     * @return the persister
+     */
+    public String getPersister() {
+        return persister;
+    }
+
+    /**
+     * @param persister the persister to set
+     */
+    public void setPersister(String persister) {
+        this.persister = persister;
+    }
+
    
   
 

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -41,7 +41,8 @@
     public VariableInstanceInfo persistVariable(String name, Object o){
        VariableInstanceInfo variable = null;
        VariablePersister persister = null;
-       String persisterFQN =  getVariablePersistenceAnnotations(o);
+       //Here i should foreach an Array of types for multiple variable persistence
+       String persisterFQN =  getVariablePersistenceType(o);
        if(persisterFQN != null && !persisterFQN.equals("")){
         Class persisterClass = null;
             try {
@@ -73,27 +74,51 @@
       return variable;
     }
 
-    public VariableInstanceInfo getVariable(String name, Long processInstanceId){
-        VariablePersister persister = null;
-        return persister.getExternalPersistedVariable(name, processInstanceId);
+    public Object getVariable(VariableInstanceInfo variableInfo){
+        try {
+            VariablePersister persister = null;
+            Class clazz = Class.forName(variableInfo.getPersister());
+            Constructor constructor = clazz.getDeclaredConstructor(null);
+            persister =  (VariablePersister) constructor.newInstance(null);
+            return persister.getExternalPersistedVariable(variableInfo);
+        } catch (InstantiationException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalArgumentException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (InvocationTargetException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (NoSuchMethodException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (SecurityException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (ClassNotFoundException ex) {
+            Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return null;
     }
-    public List<VariableInstanceInfo> getVariables(Long processInstanceId){
-         VariablePersister persister = null;
-         return persister.getExternalPersistedVariables(processInstanceId);
-    }
+    
 
+    //this method should return an Array of types if multiple variable persistece is enabled
+    private String getVariablePersistenceType(Object o) {
 
-    private String getVariablePersistenceAnnotations(Object o) {
-
         Annotation[] annotations = o.getClass().getDeclaredAnnotations();
+        //First annotations, because annotations have more precedence (??)
         for(Annotation annotation : annotations){
             String persisterFQN = getTypes().get(annotation.annotationType().getName());
             if(persisterFQN != null && !persisterFQN.equals("")){
                 return persisterFQN;
             }
         }
-                   
-       
+        //Then interfaces
+        Class[] interfaces = o.getClass().getInterfaces();
+        for(Class clazz : interfaces){
+            String persisterFQN = getTypes().get(clazz.getName());
+            if(persisterFQN != null && !persisterFQN.equals("")){
+                return persisterFQN;
+            }
+        }
         return null;
     }
 

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -26,7 +26,8 @@
  *
  * @author salaboy
  */
-public class VariablePersistenceStrategyFactory {
+
+public class VariablePersistenceStrategyFactory{
     public VariablePersistenceStrategyFactory(){
 
     }
@@ -35,6 +36,7 @@
         Map<String, String> types = new HashMap<String, String>();
 
         types.put("javax.persistence.Entity", "org.drools.persistence.processinstance.JPAVariablePersister");
+        types.put("java.io.Serializable", "org.drools.persistence.processinstance.SerializableVariablePersister");
         vPRS.setTypes(types);
         return vPRS;
     }

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersister.java	2009-02-01 16:36:44 UTC (rev 25036)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/VariablePersister.java	2009-02-01 18:51:10 UTC (rev 25037)
@@ -17,8 +17,6 @@
 
 package org.drools.persistence.processinstance;
 
-import java.util.List;
-
 /**
  *
  * @author salaboy
@@ -27,9 +25,9 @@
 public interface VariablePersister {
     public VariableInstanceInfo persistExternalVariable(String name, Object o);
 
-    public VariableInstanceInfo getExternalPersistedVariable(String name, Long processInstanceId);
+    public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo);
 
-    public List<VariableInstanceInfo> getExternalPersistedVariables(Long processInstanceId);
+   
 
     
 




More information about the jboss-svn-commits mailing list