[jbpm-commits] JBoss JBPM SVN: r2473 - in projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri: model/builder and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Oct 3 07:18:34 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-10-03 07:18:34 -0400 (Fri, 03 Oct 2008)
New Revision: 2473
Modified:
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java
Log:
Cleanup node lifecycle
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -33,6 +33,8 @@
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.ProcessEngine;
import org.jbpm.api.model.AbstractElement;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
/**
* The parrent of all Elements
@@ -80,4 +82,44 @@
{
return ProcessEngine.getProcessEngine(engineName);
}
+
+ protected void create(ProcessDefinition procDef)
+ {
+ // nothing to do
+ }
+
+ protected void register(ProcessDefinition procDef)
+ {
+ // nothing to do
+ }
+
+ protected void unregister(ProcessDefinition procDef)
+ {
+ // nothing to do
+ }
+
+ protected void destroy(ProcessDefinition procDef)
+ {
+ // nothing to do
+ }
+
+ protected void create(Process proc)
+ {
+ // nothing to do
+ }
+
+ protected void register(Process proc)
+ {
+ // nothing to do
+ }
+
+ protected void unregister(Process proc)
+ {
+ // nothing to do
+ }
+
+ protected void destroy(Process proc)
+ {
+ // nothing to do
+ }
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -35,6 +35,7 @@
import org.jbpm.api.model.Event;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
+import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.model.Signal;
import org.jbpm.api.model.builder.ObjectNameFactory;
@@ -181,9 +182,9 @@
}
@Override
- protected void initialize(ProcessStructure procStruct)
+ protected void create(ProcessDefinition procDef)
{
- super.initialize(procStruct);
+ super.create(procDef);
if (detailType == EventDetailType.Signal && signalRef == null)
throw new InvalidProcessException("Event with detail type 'Signal' must have a signalRef");
@@ -197,8 +198,8 @@
if (messageRef != null)
{
- ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
- procStructImpl.initializeMessageRef(messageRef);
+ ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
+ procDefImpl.initializeMessageRef(messageRef);
}
}
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -137,25 +137,15 @@
@Override
public ProcessDefinition getProcessDefinition()
{
- return procDef;
+ return (proc != null ? proc.getProcessDefinition() : procDef);
}
- void setProcessDefinition(ProcessDefinition procDef)
- {
- this.procDef = procDef;
- }
-
@Override
public Process getProcess()
{
return proc;
}
- void setProcess(Process process)
- {
- this.proc = process;
- }
-
public int getNodeIndex()
{
return nodeIndex;
@@ -358,8 +348,24 @@
return handler;
}
- protected void initialize(ProcessStructure procStruct)
+ @Override
+ protected void create(ProcessDefinition procDef)
{
+ super.create(procDef);
+ this.procDef = procDef;
+ checkAndInitializeStructure(procStruct);
+ }
+
+ @Override
+ protected void create(Process proc)
+ {
+ super.create(proc);
+ this.proc = proc;
+ checkAndInitializeStructure(procStruct);
+ }
+
+ private void checkAndInitializeStructure(ProcessStructure procStruct)
+ {
// Check required name
if (name == null)
throw new InvalidProcessException("Name is required for: " + this);
@@ -411,11 +417,6 @@
if (outFlow == null && (this instanceof EndEvent == false))
throw new InvalidProcessException("Dead end node: " + this);
}
-
- protected void instantiate(Process proc)
- {
- // noting to do
- }
private void initFlow(SequenceFlowImpl flow)
{
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -23,19 +23,23 @@
//$Id$
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
import javax.management.ObjectName;
import javax.persistence.Entity;
+import javax.persistence.Lob;
import javax.persistence.Transient;
import org.jbpm.api.Constants;
import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Node;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.model.Property;
import org.jbpm.api.model.builder.ObjectNameFactory;
-import org.jbpm.api.service.ProcessDefinitionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,33 +57,52 @@
// provide logging
final static Logger log = LoggerFactory.getLogger(ProcessDefinitionImpl.class);
- public ProcessDefinitionImpl(ProcessEngine engine, ProcessStructure procStruct)
+ @Lob
+ private byte[] rawProcStruct;
+
+ public ProcessDefinitionImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
{
super(engine, procStruct);
- for (Node node : procStruct.getNodes())
+
+ // Save the raw process structure
+ try
{
- NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.setProcessDefinition(this);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(procStruct);
+ rawProcStruct = baos.toByteArray();
}
+ catch (IOException ex)
+ {
+ throw new IllegalStateException("Cannot serialize process structure", ex);
+ }
+
+ // Call the create life cycle
+ procStruct.create(this);
}
-
+
// Persistence ctor
protected ProcessDefinitionImpl()
{
}
-
+
@Override
public Process newInstance()
{
- // Register the process definition if needed
- ProcessDefinitionService procDefService = getProcessEngine().getService(ProcessDefinitionService.class);
- if (procDefService.getProcessDefinitionByName(getName()) == null)
- procDefService.registerProcessDefinition(this);
-
- ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
- ProcessStructure newProcStruct = procStructImpl.newInstance();
- ProcessImpl procImpl = new ProcessImpl(getProcessEngine(), this, newProcStruct);
-
+ // Create a copy of the process structure from raw data
+ ProcessStructureImpl procStructCopy;
+ try
+ {
+ ByteArrayInputStream bais = new ByteArrayInputStream(rawProcStruct);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ procStructCopy = (ProcessStructureImpl)ois.readObject();
+ }
+ catch (Exception ex)
+ {
+ throw new IllegalStateException("Cannot deserialize process", ex);
+ }
+
+ ProcessImpl procImpl = new ProcessImpl(getProcessEngine(), this, procStructCopy);
return procImpl;
}
@@ -105,6 +128,25 @@
throw new IllegalStateException("Cannot add remove a property to a process definition");
}
+ public void initializeMessageRef(MessageImpl msgRef)
+ {
+ String msgName = msgRef.getName();
+ MessageImpl procMsg = (MessageImpl)getMessage(msgName);
+ if (procMsg == null)
+ throw new IllegalStateException("Cannot obtain process message: " + msgName);
+
+ if (msgRef.getFromRef() == null && procMsg.getFromRef() != null)
+ msgRef.setFromRef(procMsg.getFromRef());
+ if (msgRef.getToRef() == null && procMsg.getToRef() != null)
+ msgRef.setToRef(procMsg.getToRef());
+
+ for (String propName : procMsg.getPropertyNames())
+ {
+ Property prop = procMsg.getProperty(propName);
+ msgRef.addProperty(prop);
+ }
+ }
+
public String toString()
{
return "ProcessDefinition[" + getName() + "]";
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -24,18 +24,18 @@
//$Id$
import javax.management.ObjectName;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
import org.jbpm.api.Constants;
import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Node;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.model.builder.ObjectNameFactory;
import org.jbpm.api.runtime.Attachments;
import org.jbpm.api.service.ExecutionService;
@@ -59,24 +59,17 @@
@Enumerated(EnumType.STRING)
private ProcessStatus status = ProcessStatus.None;
- @ManyToOne(targetEntity = ProcessDefinitionImpl.class)
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ProcessDefinitionImpl.class)
private ProcessDefinition procDef;
@Transient
private transient RuntimeException runtimeException;
- public ProcessImpl(ProcessEngine engine, ProcessDefinition procDef, ProcessStructure procStruct)
+ public ProcessImpl(ProcessEngine engine, ProcessDefinitionImpl procDef, ProcessStructureImpl procStruct)
{
super(engine, procStruct);
-
this.procDef = procDef;
-
- for (Node node : procStruct.getNodes())
- {
- NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.setProcessDefinition(procDef);
- nodeImpl.setProcess(this);
- }
+ procStruct.create(this);
}
// Persistence ctor
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -23,11 +23,6 @@
//$Id$
-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.Collections;
import java.util.HashSet;
@@ -39,7 +34,6 @@
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.Lob;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
@@ -51,8 +45,9 @@
import org.jbpm.api.model.EndEvent;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
-import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.model.Property;
import org.jbpm.api.model.StartEvent;
import org.jbpm.api.model.builder.ObjectNameFactory;
@@ -88,15 +83,12 @@
@Transient
private List<Assignment> assignments = new ArrayList<Assignment>();
-
- @Lob
- private byte[] rawProc;
-
+
public ProcessStructureImpl(ProcessEngine engine, String name)
{
super(engine);
this.name = name;
-
+
if (name == null)
throw new InvalidProcessException("Process name cannot be null");
}
@@ -105,22 +97,6 @@
protected ProcessStructureImpl()
{
}
-
- public ProcessStructureImpl newInstance()
- {
- ProcessStructureImpl procCopy;
- try
- {
- ByteArrayInputStream bais = new ByteArrayInputStream(rawProc);
- ObjectInputStream ois = new ObjectInputStream(bais);
- procCopy = (ProcessStructureImpl)ois.readObject();
- }
- catch (Exception ex)
- {
- throw new IllegalStateException("Cannot deserialize process", ex);
- }
- return procCopy;
- }
@Override
@Transient
@@ -269,8 +245,11 @@
this.assignments.add(assignment);
}
- public void initialize(ProcessStructure procStruct)
+ @Override
+ public void create(ProcessDefinition procDef)
{
+ super.create(procDef);
+
// Check required name
if (name == null)
throw new InvalidProcessException("Name is required for: " + this);
@@ -281,58 +260,25 @@
if (getNodes(EndEvent.class).size() == 0)
throw new InvalidProcessException("Process does not have end events");
- // Initialize the nodes
for (Node node : getNodes())
{
NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.initialize(procStruct);
+ nodeImpl.create(procDef);
}
-
- // Save the initalized raw data
- if (rawProc == null)
- {
- try
- {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(baos);
- oos.writeObject(this);
- rawProc = baos.toByteArray();
- }
- catch (IOException ex)
- {
- throw new IllegalStateException("Cannot serialize process structure", ex);
- }
- }
}
- public void instantiate(Process proc)
+ @Override
+ protected void create(Process proc)
{
- for (Node node : nodes)
+ super.create(proc);
+
+ for (Node node : getNodes())
{
NodeImpl nodeImpl = (NodeImpl)node;
- nodeImpl.instantiate(proc);
+ nodeImpl.create(proc);
}
}
- public void initializeMessageRef(MessageImpl msgRef)
- {
- String msgName = msgRef.getName();
- MessageImpl procMsg = (MessageImpl)getMessage(msgName);
- if (procMsg == null)
- throw new IllegalStateException("Cannot obtain process message: " + msgName);
-
- if (msgRef.getFromRef() == null && procMsg.getFromRef() != null)
- msgRef.setFromRef(procMsg.getFromRef());
- if (msgRef.getToRef() == null && procMsg.getToRef() != null)
- msgRef.setToRef(procMsg.getToRef());
-
- for (String propName : procMsg.getPropertyNames())
- {
- Property prop = procMsg.getProperty(propName);
- msgRef.addProperty(prop);
- }
- }
-
public String toString()
{
return "ProcessStructure[" + getName() + "]";
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -34,6 +34,7 @@
import org.jbpm.api.client.MessageListener;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
+import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.runtime.ExecutionContext;
import org.jbpm.api.runtime.ExecutionHandler;
@@ -198,14 +199,14 @@
}
@Override
- protected void initialize(ProcessStructure procStruct)
+ protected void create(ProcessDefinition procDef)
{
- super.initialize(procStruct);
+ super.create(procDef);
if (messageRef == null)
throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
- ProcessStructureImpl procDefImpl = (ProcessStructureImpl)procStruct;
+ ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
procDefImpl.initializeMessageRef(messageRef);
}
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -29,6 +29,7 @@
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
+import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.ProcessStructure;
import org.jbpm.api.runtime.ExecutionHandler;
import org.jbpm.api.runtime.Token;
@@ -101,14 +102,14 @@
}
@Override
- protected void initialize(ProcessStructure procStruct)
+ protected void create(ProcessDefinition procDef)
{
- super.initialize(procStruct);
+ super.create(procDef);
if (messageRef == null)
throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
- ProcessStructureImpl procDefImpl = (ProcessStructureImpl)procStruct;
+ ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
procDefImpl.initializeMessageRef(messageRef);
if (messageRef.getToRef() == null)
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -147,9 +147,9 @@
}
@Override
- protected void instantiate(Process proc)
+ protected void create(Process proc)
{
- super.instantiate(proc);
+ super.create(proc);
final ProcessEngine engine = getProcessEngine();
final SignalService sigService = engine.getService(SignalService.class);
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -91,10 +91,7 @@
public ProcessDefinition getProcessDefinition()
{
ProcessStructureImpl procStruct = getProcessStructure();
- procStruct.initialize(procStruct);
-
- ProcessDefinitionImpl procImpl = new ProcessDefinitionImpl(engine, procStruct);
- return procImpl;
+ return new ProcessDefinitionImpl(engine, procStruct);
}
public ProcessBuilder addSequenceFlow(String targetName)
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java 2008-10-03 10:51:32 UTC (rev 2472)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/PersistenceServiceImpl.java 2008-10-03 11:18:34 UTC (rev 2473)
@@ -85,7 +85,7 @@
Transaction tx = session.beginTransaction();
try
{
- session.save(procDef);
+ session.saveOrUpdate(procDef);
tx.commit();
}
finally
@@ -146,7 +146,7 @@
Transaction tx = session.beginTransaction();
try
{
- session.save(proc);
+ session.saveOrUpdate(proc);
tx.commit();
}
finally
More information about the jbpm-commits
mailing list