[jboss-svn-commits] JBL Code SVN: r26421 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa: src/main/java/org/drools/persistence/processinstance and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu May 7 11:57:18 EDT 2009
Author: salaboy21
Date: 2009-05-07 11:57:17 -0400 (Thu, 07 May 2009)
New Revision: 26421
Modified:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
move the logic to persist variables from JPAProcessInstanceManager to ProcessInstanceInfo, Entity mappings change, table structure change, not working properly, because variables are inserted and not updated when they exists
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/pom.xml 2009-05-07 15:57:17 UTC (rev 26421)
@@ -118,7 +118,13 @@
<artifactId>btm</artifactId>
<version>1.3.2</version>
<scope>test</scope>
- </dependency>
+ </dependency>
+
+ <!--dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>8.3-603.jdbc3</version>
+ </dependency-->
</dependencies>
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java 2009-05-07 15:57:17 UTC (rev 26421)
@@ -35,66 +35,15 @@
}
public void addProcessInstance(ProcessInstance processInstance) {
- ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance );
+ ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance, this.workingMemory.getEnvironment() );
EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
em.persist( processInstanceInfo );
((ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
- persistVariables(processInstanceInfo);
+
processInstanceInfo.updateLastReadDate();
internalAddProcessInstance(processInstance);
}
- private void persistVariables(ProcessInstanceInfo processInstanceInfo) {
- // VariableScopeInstance variableScopeInstance =
- // (VariableScopeInstance)
- // ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
- // .getContextInstance( VariableScope.VARIABLE_SCOPE );
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- ((RuleFlowProcessInstance)
- processInstanceInfo
- .getProcessInstance(this.workingMemory))
- .getContextInstance( VariableScope.VARIABLE_SCOPE );
- Map<String, Object> processVariables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>(processVariables.keySet());
- Collections.sort(keys, new Comparator<String>() {
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- });
- VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
- processInstanceInfo.clearVariables();
- for (String key : keys) {
- VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key),this.workingMemory.getEnvironment());
- if(variable != null){
- variable.setProcessInstanceInfo(processInstanceInfo);
- processInstanceInfo.addVariables(variable);
- }
- }
- //If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
- //we just serialize the variables inside the blob
- if(processInstanceInfo.getVariables().size() == 0){
- processInstanceInfo.setSerializeVariables(true);
- }
- }
- private ProcessInstance restoreVariables(long id, ProcessInstance processInstance) {
-
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
- EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
- List<VariableInstanceInfo> variablesInfo = (List<VariableInstanceInfo>)em.createNamedQuery("VariableInstancesInfoByProcessId")
- .setParameter("processId", id)
- .getResultList();
- for(VariableInstanceInfo variableInfo : variablesInfo){
- VariablePersistenceStrategy persistenceStrategy =
- VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
- variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo,this.workingMemory.getEnvironment()));
- }
- variableScopeInstance.setProcessInstance(processInstance);
-
-
- return processInstance;
- }
-
-
public void internalAddProcessInstance(ProcessInstance processInstance) {
if (this.processInstances == null) {
this.processInstances = new HashMap<Long, ProcessInstance>();
@@ -119,15 +68,12 @@
}
processInstanceInfo.updateLastReadDate();
processInstance = (ProcessInstance)
- processInstanceInfo.getProcessInstance(workingMemory);
+ processInstanceInfo.getProcessInstance(workingMemory,this.workingMemory.getEnvironment());
Process process = ((InternalRuleBase) workingMemory.getRuleBase()).getProcess( processInstance.getProcessId() );
if ( process == null ) {
throw new IllegalArgumentException( "Could not find process " + processInstance.getProcessId() );
}
processInstance.setProcess( process );
- if(!processInstanceInfo.isSerializeVariables()){
- processInstance = restoreVariables(id,processInstance);
- }
if ( processInstance.getWorkingMemory() == null ) {
processInstance.setWorkingMemory( (InternalWorkingMemory) workingMemory );
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-05-07 15:57:17 UTC (rev 26421)
@@ -8,18 +8,24 @@
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
@@ -32,7 +38,11 @@
import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.marshalling.impl.ProcessInstanceMarshaller;
import org.drools.marshalling.impl.ProcessMarshallerRegistry;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.Environment;
import org.drools.runtime.process.ProcessInstance;
import org.hibernate.annotations.CollectionOfElements;
@@ -61,10 +71,10 @@
private Set<String> eventTypes = new HashSet<String>();
private @Transient
ProcessInstance processInstance;
-
+ @Transient private Environment env;
private boolean serializeVariables=false;
-
- @OneToMany(cascade=CascadeType.ALL, mappedBy="processInstanceInfo")
+ @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+ //@OneToMany(cascade=CascadeType.ALL, mappedBy="processInstanceInfo", fetch=FetchType.EAGER)
private List<VariableInstanceInfo> variables = new ArrayList<VariableInstanceInfo>();
ProcessInstanceInfo() {
@@ -76,6 +86,13 @@
startDate = new Date();
}
+ public ProcessInstanceInfo(ProcessInstance processInstance, Environment env) {
+ this.processInstance = processInstance;
+ this.processId = processInstance.getProcessId();
+ startDate = new Date();
+ this.env = env;
+ }
+
public long getId() {
return processInstanceId;
}
@@ -104,7 +121,8 @@
return state;
}
- public ProcessInstance getProcessInstance(WorkingMemory workingMemory) {
+ public ProcessInstance getProcessInstance(WorkingMemory workingMemory, Environment env) {
+ this.env = env;
if (processInstance == null) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(
@@ -114,6 +132,8 @@
context.wm = (InternalWorkingMemory) workingMemory;
ProcessInstanceMarshaller marshaller = getMarshallerFromContext(context);
processInstance = marshaller.readProcessInstance(context,false);
+ restoreVariables();
+
context.close();
} catch (IOException e) {
e.printStackTrace();
@@ -124,7 +144,20 @@
}
return processInstance;
}
+ private void restoreVariables() {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance)
+ this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
+
+ for(VariableInstanceInfo variableInfo : this.getVariables()){
+ VariablePersistenceStrategy persistenceStrategy =
+ VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
+ variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo,this.env));
+ }
+ //variableScopeInstance.setProcessInstance(this.processInstance);
+
+ }
+
private ProcessInstanceMarshaller getMarshallerFromContext(
MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
@@ -153,7 +186,7 @@
ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
marshaller.writeProcessInstance(
context, processInstance,false);
-
+ persistVariables();
context.close();
} catch (IOException e) {
throw new IllegalArgumentException(
@@ -171,7 +204,47 @@
}
}
}
-
+ private void persistVariables() {
+ // VariableScopeInstance variableScopeInstance =
+ // (VariableScopeInstance)
+ // ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
+ // .getContextInstance( VariableScope.VARIABLE_SCOPE );
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ ((RuleFlowProcessInstance)
+ this
+ .processInstance)
+ .getContextInstance( VariableScope.VARIABLE_SCOPE );
+ Map<String, Object> processVariables = variableScopeInstance.getVariables();
+ List<String> keys = new ArrayList<String>(processVariables.keySet());
+ Collections.sort(keys, new Comparator<String>() {
+
+ public int compare(String o1, String o2) {
+ return o1.compareTo(o2);
+ }
+ });
+ VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
+ this.clearVariables();
+ for (String key : keys) {
+ Iterator<VariableInstanceInfo> it = this.getVariables().iterator();
+ while(it.hasNext()){
+ if(it.next().getName().equals(key)){
+ //must update not persist again
+
+ }
+ }
+
+ VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key),this.env);
+ if(variable != null){
+ // variable.setProcessInstanceInfo(this);
+ this.addVariables(variable);
+ }
+ }
+ //If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
+ //we just serialize the variables inside the blob
+ if(this.getVariables().size() == 0){
+ this.setSerializeVariables(true);
+ }
+ }
/**
* @return the variables
*/
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2009-05-07 15:57:17 UTC (rev 26421)
@@ -37,8 +37,16 @@
@SuppressWarnings("unchecked")
public VariableInstanceInfo persistVariable(String name, Object o, Environment env) {
+ VariablePersister persister = getVariablePersister(o);
+ VariableInstanceInfo variable = null;
+ if(persister != null){
+ variable = persister.persistExternalVariable(name, o, env);
+ }
- VariablePersister persister = null;
+ return variable;
+ }
+ private VariablePersister getVariablePersister(Object o){
+ VariablePersister persister = null;
//Here i should foreach an Array of types for multiple variable persistence
String persisterFQN = getVariablePersistenceType(o);
if (persisterFQN != null && !persisterFQN.equals("")) {
@@ -48,7 +56,7 @@
Constructor constructor;
constructor = persisterClass.getConstructor(null);
persister = (VariablePersister) constructor.newInstance(null);
-
+ return persister;
} catch (ClassNotFoundException ex) {
Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchMethodException ex) {
@@ -64,10 +72,6 @@
} catch (InvocationTargetException ex) {
Logger.getLogger(VariablePersistenceStrategy.class.getName()).log(Level.SEVERE, null, ex);
}
-
-
- return persister.persistExternalVariable(name, o, env);
-
}
return null;
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/variabletypes/VariableInstanceInfo.java 2009-05-07 15:57:17 UTC (rev 26421)
@@ -48,9 +48,9 @@
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
- @ManyToOne()
- @JoinColumn(name="processInstanceInfoId")
- private ProcessInstanceInfo processInstanceInfo;
+// @ManyToOne()
+// @JoinColumn(name="processInstanceInfoId")
+// private ProcessInstanceInfo processInstanceInfo;
private String persister;
public Long getId() {
@@ -78,18 +78,18 @@
/**
* @return the processInstanceInfo
*/
- public ProcessInstanceInfo getProcessInstanceInfo() {
- return processInstanceInfo;
- }
+// public ProcessInstanceInfo getProcessInstanceInfo() {
+// return processInstanceInfo;
+// }
+//
+// /**
+// * @param processInstanceInfo the processInstanceInfo to set
+// */
+// public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
+// this.processInstanceInfo = processInstanceInfo;
+// }
/**
- * @param processInstanceInfo the processInstanceInfo to set
- */
- public void setProcessInstanceInfo(ProcessInstanceInfo processInstanceInfo) {
- this.processInstanceInfo = processInstanceInfo;
- }
-
- /**
* @return the persister
*/
public String getPersister() {
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/orm.xml 2009-05-07 15:57:17 UTC (rev 26421)
@@ -13,7 +13,7 @@
:type in elements(processInstanceInfo.eventTypes)
</query>
</named-query>
- <named-query name="VariableInstancesInfoByProcessId">
+ <!--named-query name="VariableInstancesInfoByProcessId">
<query>
select
v
@@ -22,5 +22,5 @@
where
v.processInstanceInfo.id = :processId
</query>
- </named-query>
+ </named-query-->
</entity-mappings>
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml 2009-05-07 15:57:17 UTC (rev 26421)
@@ -16,6 +16,7 @@
<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <!--property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/-->
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-05-07 15:50:27 UTC (rev 26420)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-05-07 15:57:17 UTC (rev 26421)
@@ -73,6 +73,17 @@
"sasa" );
ds1.getDriverProperties().put( "URL",
"jdbc:h2:mem:mydb" );
+
+// ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
+// ds1.setMaxPoolSize( 3 );
+// ds1.setAllowLocalTransactions( true );
+// ds1.getDriverProperties().put( "user",
+// "salaboy" );
+// ds1.getDriverProperties().put( "password",
+// "salaboy" );
+// ds1.getDriverProperties().put( "serverName",
+// "localhost:5432/droolsPersistence" );
+
ds1.init();
emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
More information about the jboss-svn-commits
mailing list