[jboss-svn-commits] JBL Code SVN: r29126 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa: src/main/java/org/drools/persistence/processinstance and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Aug 31 21:30:46 EDT 2009
Author: salaboy21
Date: 2009-08-31 21:30:45 -0400 (Mon, 31 Aug 2009)
New Revision: 29126
Added:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf
Modified:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
Log:
Variable persistence updated
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-09-01 01:30:45 UTC (rev 29126)
@@ -32,6 +32,7 @@
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
+ <version>5.0.1.SNAPSHOT</version>
</dependency>
<dependency>
@@ -80,7 +81,7 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
- <version>1.0.77</version>
+ <version>1.1.117</version>
</dependency>
<dependency>
@@ -120,11 +121,11 @@
<scope>test</scope>
</dependency>
- <!--dependency>
+ <dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.3-603.jdbc3</version>
- </dependency-->
+ </dependency>
</dependencies>
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -21,13 +21,17 @@
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
+import javax.persistence.PostPersist;
+import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
@@ -45,6 +49,7 @@
import org.drools.process.instance.impl.ProcessInstanceImpl;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.process.ProcessInstance;
import org.hibernate.annotations.CollectionOfElements;
@@ -79,7 +84,9 @@
private Environment env;
private boolean serializeVariables = false;
- @OneToMany(mappedBy="processInstanceInfo", cascade = CascadeType.ALL )
+ // @OneToMany(mappedBy="processInstanceInfo", targetEntity=VariableInstanceInfo.class )
+ @OneToMany(cascade=CascadeType.ALL)
+ @JoinColumn(name = "processId")
@MapKey(name="name")
private Map<String,VariableInstanceInfo> variables;
@@ -183,9 +190,8 @@
// saves the processInstance type first
stream.writeUTF(processInstanceType);
}
-
+ @PrePersist
@PreUpdate
- @PrePersist
public void update() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
boolean variablesChanged = false;
@@ -217,13 +223,10 @@
System.out.println("Saving " + variable + " " + variables.get(variable));
}
}
-
+
private boolean persistVariables() {
boolean changed = false;
- // VariableScopeInstance variableScopeInstance =
- // (VariableScopeInstance)
- // ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
- // .getContextInstance( VariableScope.VARIABLE_SCOPE );
+
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance) this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
Map<String, Object> processVariables = variableScopeInstance.getVariables();
List<String> keys = new ArrayList<String>(processVariables.keySet());
@@ -234,17 +237,17 @@
}
});
VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
- // this.clearVariables();
-
+
for (String key : keys) {
- Object value = processVariables.get(key);
- if (value != null) {
- VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, value, this.env);
- if (variable != null) {
- variable.setProcessInstanceInfo(this);
- changed = addVariable(variable.getName(),variable);
- }
- }
+
+ VariableInstanceInfo variable =
+ persistenceStrategy.persistVariable(key, processVariables.get(key), this.env);
+ if (variable != null) {
+ getVariables().put(variable.getName(), variable);
+ // variable.setProcessInstanceInfo(this);
+ // variable.setProcessId(this.processInstanceId);
+ }
+
}
//If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
//we just serialize the variables inside the blob
@@ -268,14 +271,32 @@
this.variables = variables;
}
- public boolean addVariable(String name, VariableInstanceInfo variable) {
- Object oldValue = variables.put(name, variable);
- return !variable.equals(oldValue);
+
+ public void addVariable(String name, VariableInstanceInfo variable) {
+ ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).persist(variable);
+ getVariables().put(variable.getName(), variable);
+
+
+
+
}
+ public void removeVariable(String name){
+ VariableInstanceInfo variable = this.variables.remove(name);
+
+ if(variable != null){
+// if(variable.getProcessInstanceInfo() != null){
+// variable.getProcessInstanceInfo().getVariables().remove(variable.getName());
+// }
+ VariableInstanceInfo variableManaged = ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).find(VariableInstanceInfo.class, variable.getName());
+ if(variableManaged != null){
+ ((EntityManager)this.env.get(EnvironmentName.ENTITY_MANAGER)).remove(variable);
+ }
+ }
+ }
-// public void clearVariables() {
-// this.getVariables().clear();
-// }
+ public void clearVariables() {
+ this.getVariables().clear();
+ }
/**
* @return the serializeVariables
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -112,21 +112,27 @@
//this method should return an Array of types if multiple variable persistece is enabled
private String getVariablePersistenceType(Object o) {
-
+ if(o == null){
+ return null;
+ }
Annotation[] annotations = o.getClass().getDeclaredAnnotations();
- //First annotations, because annotations have more precedence (??)
- for (Annotation annotation : annotations) {
- String persisterFQN = getTypes().getProperty(annotation.annotationType().getName());
- if (persisterFQN != null && !persisterFQN.equals("")) {
- return persisterFQN;
+ if(annotations != null){
+ //First annotations, because annotations have more precedence (??)
+ for (Annotation annotation : annotations) {
+ String persisterFQN = getTypes().getProperty(annotation.annotationType().getName());
+ if (persisterFQN != null && !persisterFQN.equals("")) {
+ return persisterFQN;
+ }
}
}
//Then interfaces
Class[] interfaces = o.getClass().getInterfaces();
- for (Class clazz : interfaces) {
- String persisterFQN = getTypes().getProperty(clazz.getName());
- if (persisterFQN != null && !persisterFQN.equals("")) {
- return persisterFQN;
+ if(interfaces != null){
+ for (Class clazz : interfaces) {
+ String persisterFQN = getTypes().getProperty(clazz.getName());
+ if (persisterFQN != null && !persisterFQN.equals("")) {
+ return persisterFQN;
+ }
}
}
return null;
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -49,37 +49,47 @@
public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
- //EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+
EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
VariableInstanceInfo variable = null;
try {
+ variable = em.find(VariableInstanceInfo.class, name);
+ if(variable != null && !(variable instanceof JPAPersistedVariable) ){
+ em.getTransaction().begin();
+ em.remove(variable);
+ em.getTransaction().commit();
+ variable = null;
+ }
+
+ Number idValue = getClassIdValue(o);
+
+ if(idValue != null){
- // em.joinTransaction();
-
- em.persist(o);
-
- variable = new JPAPersistedVariable();
-
+ em.merge(o);
+ }else{
+ em.persist(o);
+ }
+
+ boolean newVariable = false;
+ if(variable == null){
+ variable = new JPAPersistedVariable();
+ newVariable = true;
+ }
variable.setPersister(this.getClass().getName());
variable.setName(name);
((JPAPersistedVariable) variable).setRealVariable(o);
- Field[] fields = o.getClass().getDeclaredFields();
- Number idValue = null;
- for(int i=0; i< fields.length; i++){
- Id id = fields[i].getAnnotation(Id.class);
- if(id != null){
- idValue = (Long) o.getClass().getMethod("get"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1), new Class<?>[]{}).invoke(o, new Object[]{});
- break;
- }
- }
-
+ //Need to get it again because now is changed
+ idValue = getClassIdValue(o);
+
((JPAPersistedVariable) variable).setVarid(idValue.longValue());
((JPAPersistedVariable) variable).setVartype(o.getClass().getCanonicalName());
-
- // em.persist(variable);
-
+ if(newVariable){
+
+ em.persist(variable);
+
+ }
} catch (Throwable t1) {
t1.printStackTrace();
@@ -87,6 +97,7 @@
t1);
}
+
return variable;
}
@@ -105,4 +116,17 @@
public List<VariableInstanceInfo> getExternalPersistedVariables(Long processInstanceId) {
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ private Number getClassIdValue(Object o) throws NoSuchMethodException, SecurityException, IllegalAccessException, InvocationTargetException, IllegalArgumentException {
+ Field[] fields = o.getClass().getDeclaredFields();
+ Number idValue = null;
+ for (int i = 0; i < fields.length; i++) {
+ Id id = fields[i].getAnnotation(Id.class);
+ if (id != null) {
+ idValue = (Long) o.getClass().getMethod("get"+Character.toUpperCase(fields[i].getName().charAt(0))+fields[i].getName().substring(1), new Class<?>[]{}).invoke(o, new Object[]{});
+ break;
+ }
+ }
+ return idValue;
+ }
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/SerializableVariablePersister.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -47,35 +47,33 @@
}
public VariableInstanceInfo persistExternalVariable(String name, Object o, Environment env) {
-
-
- //EntityManagerFactory emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
- // EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+ EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
VariableInstanceInfo variable = null;
try {
-
- // em.joinTransaction();
-
-
-
- variable = new SerializablePersistedVariable();
+ variable = em.find(VariableInstanceInfo.class, name);
+ if(variable != null && !(variable instanceof SerializablePersistedVariable) ){
+ em.getTransaction().begin();
+ em.remove(variable);
+ em.getTransaction().commit();
+ variable = null;
+ }
+ boolean newVariable = false;
+ if(variable == null){
+ variable = new SerializablePersistedVariable();
+ newVariable = true;
+ }
variable.setName(name);
variable.setPersister(this.getClass().getName());
((SerializablePersistedVariable)variable).setContent(getBytes(o));
-
- //em.persist(variable);
-
-
-
+ if(newVariable){
+
+ em.persist(variable);
+
+ }
} catch (Throwable t1) {
t1.printStackTrace();
-
-
- throw new RuntimeException("Could not execute command",
- t1);
-
}
-
+
return variable;
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/JPAPersistedVariable.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -29,11 +29,11 @@
@Entity
public class JPAPersistedVariable extends VariableInstanceInfo {
- @Transient
+ @Transient
private Object realVariable;
private String vartype;
private Long varid;
-
+
public JPAPersistedVariable() {
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -21,6 +21,7 @@
+import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
@@ -44,27 +45,42 @@
@DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.STRING,length=50)
@DiscriminatorValue("GEN")
public class VariableInstanceInfo implements Serializable {
- @Id @GeneratedValue(strategy=GenerationType.AUTO)
- private Long id;
+ @Id
private String name;
- @ManyToOne()
- private ProcessInstanceInfo processInstanceInfo;
+ //@ManyToOne()
+ //private ProcessInstanceInfo processInstanceInfo;
+
-
private String persister;
public VariableInstanceInfo() {
}
-
-
- public Long getId() {
- return id;
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final VariableInstanceInfo other = (VariableInstanceInfo) obj;
+ if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
+ return false;
+ }
+ if ((this.persister == null) ? (other.persister != null) : !this.persister.equals(other.persister)) {
+ return false;
+ }
+ return true;
}
- public void setId(Long id) {
- this.id = id;
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 47 * hash + (this.name != null ? this.name.hashCode() : 0);
+ hash = 47 * hash + (this.persister != null ? this.persister.hashCode() : 0);
+ return hash;
}
/**
@@ -95,46 +111,14 @@
public void setPersister(String persister) {
this.persister = persister;
}
- public ProcessInstanceInfo getProcessInstanceInfo() {
- return processInstanceInfo;
- }
+// public ProcessInstanceInfo getProcessInstanceInfo() {
+// return processInstanceInfo;
+// }
+//
+// public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
+// this.processInstanceInfo = processInstanceInfo;
+// }
- public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
- this.processInstanceInfo = processInstanceInfo;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final VariableInstanceInfo other = (VariableInstanceInfo) obj;
- if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
- return false;
- }
- if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
- return false;
- }
- if (this.processInstanceInfo != other.processInstanceInfo && (this.processInstanceInfo == null || !this.processInstanceInfo.equals(other.processInstanceInfo))) {
- return false;
- }
- if ((this.persister == null) ? (other.persister != null) : !this.persister.equals(other.persister)) {
- return false;
- }
- return true;
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
- hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
- hash = 97 * hash + (this.processInstanceInfo != null ? this.processInstanceInfo.hashCode() : 0);
- hash = 97 * hash + (this.persister != null ? this.persister.hashCode() : 0);
- return hash;
- }
+
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml 2009-09-01 01:30:45 UTC (rev 29126)
@@ -20,7 +20,7 @@
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
- <property name="hibernate.connection.autocommit" value="false"/>
+ <!--property name="hibernate.connection.autocommit" value="false"/-->
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
</properties>
</persistence-unit>
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -18,7 +18,6 @@
package org.drools.persistence.session;
import java.io.Serializable;
-import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -67,4 +66,35 @@
public void setTest(String test) {
this.test = test;
}
+ public String toString(){
+ return "VARIABLE: "+this.getId() +" - "+this.getTest();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final MyEntity other = (MyEntity) obj;
+ if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
+ return false;
+ }
+ if ((this.test == null) ? (other.test != null) : !this.test.equals(other.test)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 5;
+ hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
+ hash = 41 * hash + (this.test != null ? this.test.hashCode() : 0);
+ return hash;
+ }
+
+
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -45,4 +45,30 @@
this.text = text;
}
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final MyVariableSerializable other = (MyVariableSerializable) obj;
+ if ((this.text == null) ? (other.text != null) : !this.text.equals(other.text)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 37 * hash + (this.text != null ? this.text.hashCode() : 0);
+ return hash;
+ }
+
+ public String toString(){
+ return "Serializable Variable: "+this.getText();
+ }
+
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -17,19 +17,16 @@
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.SessionConfiguration;
-import org.drools.audit.WorkingMemoryConsoleLogger;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.ProcessBuilder;
import org.drools.definition.KnowledgePackage;
import org.drools.definitions.impl.KnowledgePackageImp;
-import org.drools.event.RuleFlowEventListener;
import org.drools.process.command.CompleteWorkItemCommand;
import org.drools.process.command.GetProcessInstanceCommand;
import org.drools.process.command.StartProcessCommand;
import org.drools.process.core.Work;
import org.drools.process.core.impl.WorkImpl;
import org.drools.process.core.timer.Timer;
-import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.drools.rule.Package;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
@@ -53,8 +50,12 @@
import bitronix.tm.resource.jdbc.PoolingDataSource;
import java.util.HashMap;
import java.util.Map;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
public class SingleSessionCommandServiceTest extends TestCase {
@@ -84,6 +85,20 @@
// ds1.getDriverProperties().put( "serverName",
// "localhost:5432/droolsPersistence" );
+
+ ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "salaboy" );
+ ds1.getDriverProperties().put( "password",
+ "salaboy" );
+ ds1.getDriverProperties().put("databaseName", "droolsPersistence");
+ ds1.getDriverProperties().put("serverName", "localhost");
+
+
+
+
ds1.init();
emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
@@ -778,16 +793,39 @@
list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
return list;
}
+ public Collection<KnowledgePackage> getTestVariableProcess(){
+ KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ try {
+
+ builder.add( new ClassPathResource( "testVariables.rf" ) ,
+ ResourceType.DRF);
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ KnowledgeBuilderErrors errors = builder.getErrors();
+ if (errors.size() > 0) {
+ for (KnowledgeBuilderError error : errors) {
+ System.err.println(error);
+ }
+ throw new IllegalArgumentException("Could not parse knowledge.");
+ }
+
+ return builder.getKnowledgePackages();
+ }
+
public void testPersistenceVariables() {
- Environment env = KnowledgeBaseFactory.newEnvironment();
+ Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
env.set( EnvironmentName.TRANSACTION_MANAGER,
TransactionManagerServices.getTransactionManager() );
+
+
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
- kbase.addKnowledgePackages( kpkgs );
+
+ kbase.addKnowledgePackages( getTestVariableProcess() );
Properties properties = new Properties();
properties.setProperty( "drools.commandService",
@@ -804,10 +842,10 @@
config,
env );
StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
+ startProcessCommand.setProcessId("testVariables");
Map<String,Object> parameters = new HashMap<String,Object>();
- parameters.put("var1", new MyEntity("This is a test Entity"));
+ parameters.put("var1", new MyEntity("This is a test Entity"));
parameters.put("var2", new MyVariableSerializable("This is a test SerializableObject"));
startProcessCommand.setParameters(parameters);
@@ -820,25 +858,38 @@
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- ((RuleFlowProcessInstance)processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
- Map<String, Object> variables = variableScopeInstance.getVariables();
+
+ MyEntity var1 = (MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var1");
+ MyVariableSerializable var2 = (MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var2");
- MyEntity var1 = (MyEntity)variables.get("var1");
- MyVariableSerializable var2 = (MyVariableSerializable)variables.get("var2");
-
assertNotNull(var1);
assertEquals("This is a test Entity", var1.getTest());
assertNotNull(var2);
assertEquals("This is a test SerializableObject", var2.getText());
- assertEquals("WorkItem1",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
- TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+
+ assertEquals("Log1",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+ VariableCheckerTestWorkItemHandler handler = VariableCheckerTestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
+
+
assertNotNull( workItem );
+ var1 = (MyEntity)workItem.getParameter("var1");
+ var2 = (MyVariableSerializable)workItem.getParameter("var2");
+ assertNotNull(var1);
+ assertNotNull(var2);
+ assertEquals("This is a test Entity",var1.getTest());
+ assertEquals("This is a test SerializableObject",var2.getText());
+
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ Map<String,Object> modifiedVariables = new HashMap<String,Object>();
+ var1.setTest("MODIFIED");
+ var2.setText("MODIFIED");
+ modifiedVariables.put("var1", var1);
+ modifiedVariables.put("var2", var2);
+ completeWorkItemCommand.setResults(modifiedVariables);
service.execute( completeWorkItemCommand );
service = new SingleSessionCommandService(kbase, config,env);
@@ -847,16 +898,64 @@
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- assertEquals("WorkItem2",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+ assertEquals("MODIFIED",((MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var1")).getTest());
+ assertEquals("MODIFIED",((MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var2")).getText());
- variableScopeInstance = (VariableScopeInstance)
- ((RuleFlowProcessInstance)processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
- variableScopeInstance.setVariable("var1", new MyEntity("This is a test Entity MODIFIED"));
- variableScopeInstance.setVariable("var2", new MyVariableSerializable("This is a test SerializableObject"));
+ assertEquals("Log2",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+ handler = VariableCheckerTestWorkItemHandler.getInstance();
+ workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+
+ var1 = (MyEntity)workItem.getParameter("var1");
+ var2 = (MyVariableSerializable)workItem.getParameter("var2");
+ assertNotNull(var1);
+ assertNotNull(var2);
+ assertEquals("MODIFIED",var1.getTest());
+ assertEquals("MODIFIED",var2.getText());
+
+
+ completeWorkItemCommand = new CompleteWorkItemCommand();
+ modifiedVariables = new HashMap<String,Object>();
+ var1.setTest("MODIFIED TWICE");
+ var2.setText("MODIFIED TWICE");
+ modifiedVariables.put("var1", var2);
+ modifiedVariables.put("var2", var1);
+ completeWorkItemCommand.setResults(modifiedVariables);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+
+ service.execute( completeWorkItemCommand );
+
+
service = new SingleSessionCommandService(kbase, config,env);
+ getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ assertNotNull(processInstance);
+ assertEquals("MODIFIED TWICE",((MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var2")).getTest());
+ assertEquals("MODIFIED TWICE",((MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var1")).getText());
+
+ service = new SingleSessionCommandService(kbase, config,env);
+ getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ assertNotNull(processInstance);
+
+
+
+ MyVariableSerializable newvar1 = (MyVariableSerializable)((RuleFlowProcessInstance)processInstance).getVariable("var1");
+ MyEntity newvar2 = (MyEntity)((RuleFlowProcessInstance)processInstance).getVariable("var2");
+
+ assertNotNull(var2);
+ assertEquals("MODIFIED TWICE", newvar2.getTest());
+ assertNotNull(var1);
+ assertEquals("MODIFIED TWICE", newvar1.getText());
+
+ assertEquals("Log3",((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeName());
+
+
}
}
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -0,0 +1,33 @@
+package org.drools.persistence.session;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class VariableCheckerTestWorkItemHandler implements WorkItemHandler {
+
+ private static VariableCheckerTestWorkItemHandler INSTANCE = new VariableCheckerTestWorkItemHandler();
+
+ private WorkItem workItem;
+
+ private VariableCheckerTestWorkItemHandler() {
+ }
+
+ public static VariableCheckerTestWorkItemHandler getInstance() {
+ return INSTANCE;
+ }
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ this.workItem = workItem;
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+
+ public WorkItem getWorkItem() {
+ WorkItem result = workItem;
+ workItem = null;
+ return result;
+ }
+
+}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2009-09-01 01:30:45 UTC (rev 29126)
@@ -42,6 +42,17 @@
"sasa" );
ds1.getDriverProperties().put( "URL",
"jdbc:h2:mem:mydb" );
+
+// ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
+// ds1.setMaxPoolSize( 3 );
+// ds1.setAllowLocalTransactions( true );
+// ds1.getDriverProperties().put( "user",
+// "salaboy" );
+// ds1.getDriverProperties().put( "password",
+// "salaboy" );
+// ds1.getDriverProperties().put( "serverName",
+// "localhost:5432/droolsPersistence" );
+
ds1.init();
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf 2009-09-01 00:35:53 UTC (rev 29125)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf 2009-09-01 01:30:45 UTC (rev 29126)
@@ -3,9 +3,10 @@
// The allowed properties are name, parameters, displayName, icon and customEditor
// The returned result should thus be of type List<Map<String, Object>>
import org.drools.persistence.session.TestWorkItemHandler;
+import org.drools.persistence.session.VariableCheckerTestWorkItemHandler;
[
-
+ "Log" : VariableCheckerTestWorkItemHandler.getInstance(),
"MyWork" : TestWorkItemHandler.getInstance(),
"Human Task" : TestWorkItemHandler.getInstance()
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/testVariables.rf 2009-09-01 01:30:45 UTC (rev 29126)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-5.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+ type="RuleFlow" name="flow" id="testVariables" package-name="org.drools.examples" >
+
+ <header>
+ <variables>
+ <variable name="var1" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+ </variable>
+ <variable name="var2" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+ </variable>
+ </variables>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" x="147" y="32" width="80" height="40" />
+
+ <workItem id="2" name="Log1" x="147" y="191" width="80" height="40" >
+ <work name="Log" >
+
+ </work>
+ <mapping type="in" from="var1" to="var1" />
+ <mapping type="in" from="var2" to="var2" />
+ <mapping type="out" from="var1" to="var1" />
+ <mapping type="out" from="var2" to="var2" />
+ </workItem>
+ <actionNode id="3" name="Action1" x="146" y="117" width="80" height="40" >
+ <action type="expression" dialect="mvel" >
+ System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+ System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+ </action>
+ </actionNode>
+ <actionNode id="4" name="Action2" x="147" y="268" width="80" height="40" >
+ <action type="expression" dialect="mvel" >
+ System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+ System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+ </action>
+ </actionNode>
+ <workItem id="5" name="Log2" x="146" y="345" width="80" height="40" >
+ <work name="Log" >
+
+ </work>
+ <mapping type="in" from="var1" to="var1" />
+ <mapping type="in" from="var2" to="var2" />
+ <mapping type="out" from="var1" to="var1" />
+ <mapping type="out" from="var2" to="var2" />
+ </workItem>
+ <actionNode id="6" name="Action3" x="144" y="422" width="80" height="40" >
+ <action type="expression" dialect="mvel" >
+ System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+ System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+ </action>
+ </actionNode>
+ <workItem id="7" name="Log3" x="146" y="345" width="80" height="40" >
+ <work name="Log" >
+
+ </work>
+ <mapping type="in" from="var1" to="var1" />
+ <mapping type="in" from="var2" to="var2" />
+ <mapping type="out" from="var1" to="var1" />
+ <mapping type="out" from="var2" to="var2" />
+ </workItem>
+ <end id="8" name="End" x="145" y="494" width="80" height="40" />
+ </nodes>
+
+ <connections>
+ <connection from="3" to="2" />
+ <connection from="1" to="3" />
+ <connection from="2" to="4" />
+ <connection from="4" to="5" />
+ <connection from="5" to="6" />
+ <connection from="6" to="7" />
+ <connection from="7" to="8" />
+ </connections>
+
+</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list