[jboss-svn-commits] JBL Code SVN: r26401 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa: src/main/java/org/drools/persistence/processinstance and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 6 13:21:56 EDT 2009
Author: salaboy21
Date: 2009-05-06 13:21:56 -0400 (Wed, 06 May 2009)
New Revision: 26401
Added:
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/VariablePersistenceStrategyFactory.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/
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/persisters/VariablePersister.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/
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/SerializablePersistedVariable.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/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/resources/META-INF/PersistenceStrategies.conf
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/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
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/drools.session.conf
Log:
Persister and variable types added, test working
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-05-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-05-06 17:21:56 UTC (rev 26401)
@@ -11,7 +11,18 @@
<artifactId>drools-persistence-jpa</artifactId>
<packaging>jar</packaging>
<name>Drools :: Persistence :: JPA</name>
-
+ <!--build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <argLine>-Xdebug -Djava.compiler=none -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build-->
<dependencies>
<dependency>
<groupId>org.drools</groupId>
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-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -1,8 +1,12 @@
package org.drools.persistence.processinstance;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
@@ -11,9 +15,12 @@
import org.drools.common.InternalRuleBase;
import org.drools.common.InternalWorkingMemory;
import org.drools.process.core.Process;
+import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.ProcessInstanceManager;
+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.EnvironmentName;
public class JPAProcessInstanceManager
@@ -32,10 +39,62 @@
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>();
@@ -66,8 +125,12 @@
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 );
+
((ProcessInstanceImpl) processInstance).reconnect();
}
return processInstance;
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-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -1,21 +1,26 @@
package org.drools.persistence.processinstance;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
+import javax.persistence.OneToMany;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
import javax.persistence.Version;
@@ -57,6 +62,11 @@
private @Transient
ProcessInstance processInstance;
+ private boolean serializeVariables=false;
+
+ @OneToMany(cascade=CascadeType.ALL, mappedBy="processInstanceInfo")
+ private List<VariableInstanceInfo> variables = new ArrayList<VariableInstanceInfo>();
+
ProcessInstanceInfo() {
}
@@ -103,7 +113,7 @@
bais, (InternalRuleBase) workingMemory.getRuleBase(), null, null);
context.wm = (InternalWorkingMemory) workingMemory;
ProcessInstanceMarshaller marshaller = getMarshallerFromContext(context);
- processInstance = marshaller.readProcessInstance(context);
+ processInstance = marshaller.readProcessInstance(context,false);
context.close();
} catch (IOException e) {
e.printStackTrace();
@@ -142,7 +152,8 @@
saveProcessInstanceType(context, processInstance, processType);
ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
marshaller.writeProcessInstance(
- context, processInstance);
+ context, processInstance,false);
+
context.close();
} catch (IOException e) {
throw new IllegalArgumentException(
@@ -160,4 +171,38 @@
}
}
}
+
+ /**
+ * @return the variables
+ */
+ public List<VariableInstanceInfo> getVariables() {
+ return variables;
+ }
+
+ /**
+ * @param variables the variables to set
+ */
+ public void setVariables(List<VariableInstanceInfo> variables) {
+ this.variables = variables;
+ }
+ public void addVariables(VariableInstanceInfo variable){
+ this.getVariables().add(variable);
+ }
+ public void clearVariables(){
+ this.getVariables().clear();
+ }
+
+ /**
+ * @return the serializeVariables
+ */
+ public boolean isSerializeVariables() {
+ return serializeVariables;
+ }
+
+ /**
+ * @param serializeVariables the serializeVariables to set
+ */
+ public void setSerializeVariables(boolean serializeVariables) {
+ this.serializeVariables = serializeVariables;
+ }
}
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,137 @@
+/*
+ * 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 org.drools.persistence.processinstance.persisters.VariablePersister;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.runtime.Environment;
+import org.drools.util.ChainedProperties;
+
+/**
+ *
+ * @author salaboy
+ */
+public class VariablePersistenceStrategy {
+
+ private Properties types;
+
+ @SuppressWarnings("unchecked")
+ public VariableInstanceInfo persistVariable(String name, Object o, Environment env) {
+
+ VariablePersister persister = null;
+ //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 {
+ persisterClass = Class.forName(persisterFQN);
+ Constructor constructor;
+ constructor = persisterClass.getConstructor(null);
+ persister = (VariablePersister) constructor.newInstance(null);
+
+ } catch (ClassNotFoundException 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 (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);
+ }
+
+
+ return persister.persistExternalVariable(name, o, env);
+
+ }
+ return null;
+ }
+
+ public Object getVariable(VariableInstanceInfo variableInfo, Environment env) {
+ try {
+ String variablePersister = variableInfo.getPersister();
+ VariablePersister persister = null;
+ Class clazz = Class.forName(variablePersister);
+ Constructor constructor = clazz.getDeclaredConstructor(null);
+ persister = (VariablePersister) constructor.newInstance(null);
+ return persister.getExternalPersistedVariable(variableInfo, env);
+ } 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;
+ }
+
+
+ //this method should return an Array of types if multiple variable persistece is enabled
+ private String getVariablePersistenceType(Object o) {
+
+ 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;
+ }
+ }
+ //Then interfaces
+ Class[] interfaces = o.getClass().getInterfaces();
+ for (Class clazz : interfaces) {
+ String persisterFQN = getTypes().getProperty(clazz.getName());
+ if (persisterFQN != null && !persisterFQN.equals("")) {
+ return persisterFQN;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return the types
+ */
+ public Properties getTypes() {
+ return types;
+ }
+
+ /**
+ * @param types the types to set
+ */
+ public void setTypes(Properties types) {
+ this.types = types;
+ }
+}
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategyFactory.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,76 @@
+/*
+ * 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.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.util.ChainedProperties;
+
+
+/**
+ *
+ * @author salaboy
+ */
+
+public class VariablePersistenceStrategyFactory{
+ private static VariablePersistenceStrategy vPRS;
+
+ public VariablePersistenceStrategyFactory(){
+
+ }
+ public static VariablePersistenceStrategy getVariablePersistenceStrategyFactory(String propsFile){
+ Properties props = new Properties();
+ try {
+ InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/"+propsFile);
+ if (is != null){
+ props.load(is);
+ }
+ } catch (IOException ex) {
+ Logger.getLogger(VariablePersistenceStrategyFactory.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ if(vPRS == null) {
+ vPRS = new VariablePersistenceStrategy();
+ }
+ vPRS.setTypes(props);
+ return vPRS;
+
+ //types.put("javax.persistence.Entity", "org.drools.persistence.processinstance.JPAVariablePersister");
+ //types.put("java.io.Serializable", "org.drools.persistence.processinstance.SerializableVariablePersister");
+
+
+ }
+ public static VariablePersistenceStrategy getVariablePersistenceStrategyFactory(){
+
+ if(vPRS == null) {
+ vPRS = new VariablePersistenceStrategy();
+ }
+ return vPRS;
+
+ //types.put("javax.persistence.Entity", "org.drools.persistence.processinstance.JPAVariablePersister");
+ //types.put("java.io.Serializable", "org.drools.persistence.processinstance.SerializableVariablePersister");
+
+
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,154 @@
+/*
+ * 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.persisters;
+
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.persistence.processinstance.*;
+import org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Id;
+import javax.persistence.Persistence;
+import javax.transaction.Status;
+import javax.transaction.UserTransaction;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.util.StringUtils;
+
+/**
+ *
+ * @author salaboy
+ */
+public class JPAVariablePersister implements VariablePersister {
+
+ public JPAVariablePersister() {
+ }
+
+ public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
+ boolean localTransaction = false;
+ UserTransaction ut = null;
+ EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+ EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ VariableInstanceInfo variable = null;
+ try {
+ ut = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
+
+ if (ut.getStatus() == Status.STATUS_NO_TRANSACTION) {
+ // If there is no transaction then start one, we will commit within the same Command
+ ut.begin();
+ localTransaction = true;
+ }
+
+ EntityManager localEm = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ if (localEm == null || !localEm.isOpen()) {
+ localEm = emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
+ env.set(EnvironmentName.ENTITY_MANAGER, localEm);
+ }
+
+ if (em == null) {
+ // there must have been a rollback to lazily re-initialise the state
+ em = emf.createEntityManager();
+
+ }
+
+ em.joinTransaction();
+
+ em.persist(o);
+
+ variable = new JPAPersistedVariable();
+
+ 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;
+ }
+ }
+
+ ((JPAPersistedVariable) variable).setVarid(idValue.longValue());
+ ((JPAPersistedVariable) variable).setVartype(o.getClass().getCanonicalName());
+
+ em.persist(variable);
+
+
+ if (localTransaction) {
+ // it's a locally created transaction so commit
+ ut.commit();
+
+ // cleanup local entity manager
+ if (localEm.isOpen()) {
+ localEm.close();
+ }
+ env.set(EnvironmentName.ENTITY_MANAGER, null);
+
+ // clean up cached process and work item instances
+
+ }
+
+
+
+ } catch (Throwable t1) {
+ t1.printStackTrace();
+ if (localTransaction) {
+ try {
+ if (ut != null) {
+ ut.rollback();
+ }
+ throw new RuntimeException("Could not execute command",
+ t1);
+ } catch (Throwable t2) {
+ throw new RuntimeException("Could not rollback transaction",
+ t2);
+ }
+ } else {
+ throw new RuntimeException("Could not execute command",
+ t1);
+ }
+ }
+ return variable;
+ }
+
+ public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo, Environment env) {
+ EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+ EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ try {
+ 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);
+ }
+ return null;
+ }
+
+ public List<VariableInstanceInfo> getExternalPersistedVariables(Long processInstanceId) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,174 @@
+/*
+ * 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.persisters;
+
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.persistence.processinstance.*;
+import org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.naming.InitialContext;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.Status;
+import javax.transaction.UserTransaction;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SerializableVariablePersister implements VariablePersister {
+
+ public SerializableVariablePersister() {
+ }
+
+ public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
+ boolean localTransaction = false;
+ UserTransaction ut = null;
+ EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+ EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ SerializablePersistedVariable variable = null;
+ try {
+ ut = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
+
+ if (ut.getStatus() == Status.STATUS_NO_TRANSACTION) {
+ // If there is no transaction then start one, we will commit within the same Command
+ ut.begin();
+ localTransaction = true;
+ }
+
+ EntityManager localEm = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ if (localEm == null || !localEm.isOpen()) {
+ localEm = emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
+ env.set(EnvironmentName.ENTITY_MANAGER, localEm);
+ }
+
+ if (em == null) {
+ // there must have been a rollback to lazily re-initialise the state
+ em = emf.createEntityManager();
+
+ }
+
+ em.joinTransaction();
+
+
+
+ variable = new SerializablePersistedVariable();
+ variable.setName(name);
+ variable.setPersister(this.getClass().getName());
+ variable.setContent(getBytes(o));
+
+ em.persist(variable);
+
+ if (localTransaction) {
+ // it's a locally created transaction so commit
+ ut.commit();
+
+ // cleanup local entity manager
+ if (localEm.isOpen()) {
+ localEm.close();
+ }
+ env.set(EnvironmentName.ENTITY_MANAGER, null);
+
+ // clean up cached process and work item instances
+
+ }
+
+
+
+ } catch (Throwable t1) {
+ t1.printStackTrace();
+ if (localTransaction) {
+ try {
+ if (ut != null) {
+ ut.rollback();
+ }
+ throw new RuntimeException("Could not execute command",
+ t1);
+ } catch (Throwable t2) {
+ throw new RuntimeException("Could not rollback transaction",
+ t2);
+ }
+ } else {
+ throw new RuntimeException("Could not execute command",
+ t1);
+ }
+ }
+
+ return variable;
+
+
+ }
+
+ public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo, Environment env) {
+ ObjectInputStream ois = null;
+ byte[] binaryArray = null;
+ try {
+ binaryArray = ((SerializablePersistedVariable) variableInstanceInfo).getContent();
+ ByteArrayInputStream strmBytes = new ByteArrayInputStream(binaryArray);
+ ois = new ObjectInputStream(strmBytes);
+ return ois.readObject();
+
+ } catch (IOException ex) {
+ Logger.getLogger(SerializableVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (ClassNotFoundException ex) {
+ Logger.getLogger(JPAVariablePersister.class.getName()).log(Level.SEVERE, null, ex);
+ } finally {
+ try {
+ ois.close();
+ } catch (IOException ex) {
+ Logger.getLogger(SerializableVariablePersister.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;
+ }
+}
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/VariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/VariablePersister.java (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/VariablePersister.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,38 @@
+/*
+ * 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.persisters;
+
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.runtime.Environment;
+
+/**
+ *
+ * @author salaboy
+ */
+
+public interface VariablePersister {
+
+ public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env);
+
+ public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo, Environment env);
+
+
+
+
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,80 @@
+/*
+ * 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.variabletypes;
+
+import org.drools.persistence.processinstance.*;
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+
+
+/**
+ *
+ * @author salaboy
+ */
+
+ at Entity
+public class JPAPersistedVariable extends VariableInstanceInfo {
+ @Transient
+ private Object realVariable;
+ private String vartype;
+ private Long varid;
+
+ /**
+ * @return the vartype
+ */
+ public String getVartype() {
+ return vartype;
+ }
+
+ /**
+ * @param vartype the vartype to set
+ */
+ public void setVartype(String vartype) {
+ this.vartype = vartype;
+ }
+
+ /**
+ * @return the varid
+ */
+ public Long getVarid() {
+ return varid;
+ }
+
+ /**
+ * @param varid the varid to set
+ */
+ public void setVarid(Long varid) {
+ this.varid = varid;
+ }
+
+ /**
+ * @return the realVariable
+ */
+ public Object getRealVariable() {
+ return realVariable;
+ }
+
+ /**
+ * @param realVariable the realVariable to set
+ */
+ public void setRealVariable(Object realVariable) {
+ this.realVariable = realVariable;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/SerializablePersistedVariable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/SerializablePersistedVariable.java (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/SerializablePersistedVariable.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,47 @@
+/*
+ * 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.variabletypes;
+
+import 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_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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,105 @@
+/*
+ * 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.variabletypes;
+
+import org.drools.persistence.processinstance.*;
+import java.io.Serializable;
+
+
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+ at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.STRING,length=50)
+ at DiscriminatorValue("GEN")
+public class VariableInstanceInfo implements Serializable {
+ @Id @GeneratedValue(strategy=GenerationType.AUTO)
+ private Long id;
+ private String name;
+ @ManyToOne()
+ @JoinColumn(name="processInstanceInfoId")
+ private ProcessInstanceInfo processInstanceInfo;
+ private String persister;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the processInstanceInfo
+ */
+ public ProcessInstanceInfo getProcessInstanceInfo() {
+ return processInstanceInfo;
+ }
+
+ /**
+ * @param processInstanceInfo the processInstanceInfo to set
+ */
+ public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
+ 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_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-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml 2009-05-06 17:21:56 UTC (rev 26401)
@@ -13,4 +13,14 @@
:type in elements(processInstanceInfo.eventTypes)
</query>
</named-query>
+ <named-query name="VariableInstancesInfoByProcessId">
+ <query>
+select
+ v
+from
+ VariableInstanceInfo v
+where
+ v.processInstanceInfo.id = :processId
+ </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-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml 2009-05-06 17:21:56 UTC (rev 26401)
@@ -1,34 +1,26 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<persistence
- version="1.0"
- xsi:schemaLocation=
- "http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
- http://java.sun.com/xml/ns/persistence/orm
- http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
- xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/persistence">
-
- <!--persistence-unit name="ProcessService">
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+ <!--persistence-unit name="ProcessService">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit-->
-
- <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <jta-data-source>jdbc/testDS1</jta-data-source>
- <class>org.drools.persistence.session.SessionInfo</class>
-
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
- <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.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
- </properties>
- </persistence-unit>
-
-</persistence>
\ No newline at end of file
+ <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>jdbc/testDS1</jta-data-source>
+ <class>org.drools.persistence.session.SessionInfo</class>
+ <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+ <class>org.drools.persistence.session.MyEntity</class>
+ <class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+ <class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <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.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
+ </properties>
+ </persistence-unit>
+</persistence>
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,70 @@
+/*
+ * 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.session;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class MyEntity implements Serializable {
+ @Id @GeneratedValue(strategy=GenerationType.AUTO)
+ private Long id;
+ private String test;
+
+ MyEntity(){}
+
+ MyEntity(String string) {
+ this.test= string;
+ }
+
+ /**
+ * @return the id
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param id the id to set
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the test
+ */
+ public String getTest() {
+ return test;
+ }
+
+ /**
+ * @param test the test to set
+ */
+ public void setTest(String test) {
+ this.test = test;
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,48 @@
+/*
+ * 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.session;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author salaboy
+ */
+class MyVariableSerializable implements Serializable{
+
+ private String text = "";
+
+ public MyVariableSerializable(String string) {
+ this.text = string;
+ }
+
+ /**
+ * @return the text
+ */
+ public String getText() {
+ return text;
+ }
+
+ /**
+ * @param text the text to set
+ */
+ public void setText(String text) {
+ this.text = text;
+ }
+
+}
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-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-05-06 17:21:56 UTC (rev 26401)
@@ -51,6 +51,10 @@
import bitronix.tm.TransactionManagerServices;
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;
public class SingleSessionCommandServiceTest extends TestCase {
@@ -763,5 +767,61 @@
list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
return list;
}
+ public void testPersistenceVariables() {
+ 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 );
+
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
+
+ SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+ config,
+ env );
+ StartProcessCommand startProcessCommand = new StartProcessCommand();
+ startProcessCommand.setProcessId("org.drools.test.TestProcess");
+ Map<String,Object> parameters = new HashMap<String,Object>();
+
+ parameters.put("var1", new MyEntity("This is a test Entity"));
+ parameters.put("var2", new MyVariableSerializable("This is a test SerializableObject"));
+
+ startProcessCommand.setParameters(parameters);
+ ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
+ System.out.println("Started process instance " + processInstance.getId());
+
+ service = new SingleSessionCommandService(kbase, config,env);
+ GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ 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)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());
+
+
+
+ }
}
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/PersistenceStrategies.conf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/PersistenceStrategies.conf (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/PersistenceStrategies.conf 2009-05-06 17:21:56 UTC (rev 26401)
@@ -0,0 +1,2 @@
+javax.persistence.Entity = org.drools.persistence.processinstance.persisters.JPAVariablePersister
+java.io.Serializable = org.drools.persistence.processinstance.persisters.SerializableVariablePersister
\ No newline at end of file
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/drools.session.conf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/drools.session.conf 2009-05-06 17:16:05 UTC (rev 26400)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/drools.session.conf 2009-05-06 17:21:56 UTC (rev 26401)
@@ -2,4 +2,5 @@
#drools.commandService = org.drools.persistence.session.SingleSessionCommandService
#drools.processInstanceManagerFactory = org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory
#drools.workItemManagerFactory = org.drools.persistence.processinstance.JPAWorkItemManagerFactory
-#drools.processSignalManagerFactory = org.drools.persistence.processinstance.JPASignalManagerFactory
\ No newline at end of file
+#drools.processSignalManagerFactory = org.drools.persistence.processinstance.JPASignalManagerFactory
+drools.persistence.strategies = PersistenceStrategies.conf
\ No newline at end of file
More information about the jboss-svn-commits
mailing list