[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