[jbpm-commits] JBoss JBPM SVN: r2456 - in projects/spec/trunk/modules: api/src/main/java/org/jbpm/api/service and 7 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Sep 30 23:42:58 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-09-30 23:42:57 -0400 (Tue, 30 Sep 2008)
New Revision: 2456
Added:
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/service/MessageBuilderServiceImpl.java
Removed:
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
Modified:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
projects/spec/trunk/modules/cts/pom.xml
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.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/model/builder/TaskBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
ReceiveTaskTest - pass
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -38,7 +38,7 @@
/**
* Get the id for this listener
*/
- ObjectName getID();
+ ObjectName getKey();
/**
* Catch a message from the process that this listener is registered with
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -75,11 +75,11 @@
{
synchronized (listeners)
{
- if (hasMessageListener(listener.getID()))
- throw new IllegalStateException("Listener already registered: " + listener.getID());
+ if (hasMessageListener(listener.getKey()))
+ throw new IllegalStateException("Listener already registered: " + listener.getKey());
- log.debug("addMessageListener: " + listener.getID());
- listeners.put(listener.getID(), listener);
+ log.debug("addMessageListener: " + listener.getKey());
+ listeners.put(listener.getKey(), listener);
}
}
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -103,13 +103,19 @@
*/
public boolean unregisterProcess(Process proc)
{
- log.debug("unregisterProcess: " + proc);
-
- // Delete the process through the PersistenceService
- PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
- dbService.deleteProcess(proc);
-
- return registeredProcs.remove(proc.getKey()) != null;
+ boolean removed = false;
+ if (registeredProcs.containsKey(proc.getKey()))
+ {
+ log.debug("unregisterProcess: " + proc);
+
+ // Delete the process through the PersistenceService
+ PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
+ dbService.deleteProcess(proc);
+
+ registeredProcs.remove(proc.getKey());
+ removed = true;
+ }
+ return removed;
}
/**
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -67,8 +67,6 @@
private MessageListener messageListener;
// The messages caught by this test case
private List<Message> messages = new ArrayList<Message>();
- // The last fatal tear down error
- private static String fatalTearDownError;
protected ProcessEngine getProcessEngine()
{
@@ -83,10 +81,6 @@
ProcessEngine engine = getProcessEngine();
- // Stop the test run if there are fatal tear down errors
- if (fatalTearDownError != null)
- System.exit(1);
-
// Setup the SignalListener
clearAllSignalListeners();
SignalService sigService = engine.getService(SignalService.class);
@@ -120,27 +114,27 @@
Set<Process> procs = procManager.getProcesses();
if (procs.size() > 0)
{
- fatalTearDownError = "Registered processes on tear down of " + getName() + ": " + procs;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered processes on tear down of " + getName() + ": " + procs;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
// Check that there are no registered signal listeners left
Set<SignalListener> sigListeners = sigService.getSignalListeners();
if (sigListeners.size() > 0)
{
- fatalTearDownError = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
// Check that there are no registered message listeners left
Set<MessageListener> msgListeners = msgService.getMessageListeners();
if (msgListeners.size() > 0)
{
- fatalTearDownError = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
super.tearDown();
@@ -223,7 +217,7 @@
Set<MessageListener> msgListeners = msgService.getMessageListeners();
for (MessageListener msgListener : msgListeners)
{
- msgService.removeMessageListener(msgListener.getID());
+ msgService.removeMessageListener(msgListener.getKey());
}
}
@@ -261,7 +255,7 @@
{
messageListener = new MessageListener()
{
- public ObjectName getID()
+ public ObjectName getKey()
{
return getTestID();
}
Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/pom.xml 2008-10-01 03:42:57 UTC (rev 2456)
@@ -78,7 +78,6 @@
<exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeInputSetTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeOutputSetTest.java</exclude>
- <exclude>org/jbpm/test/cts/task/ReceiveTaskTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java</exclude>
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -25,6 +25,8 @@
import java.io.IOException;
+import javax.management.ObjectName;
+
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.SignalListener;
import org.jbpm.api.model.Message;
@@ -87,15 +89,22 @@
{
Process proc = getProcess();
ProcessService procService = ProcessService.locateProcessService();
- procService.registerProcess(proc);
+
+ ObjectName procID = procService.registerProcess(proc);
+ try
+ {
+ // Send the message before the process is started
+ MessageService msgManager = MessageService.locateMessageService();
+ msgManager.sendMessage(procID, "TaskA", getMessage());
- // Send the message before the process is started
- MessageService msgManager = MessageService.locateMessageService();
- msgManager.sendMessage(proc.getKey(), "TaskA", getMessage());
+ proc.startProcess();
+ proc.waitForEnd(1000);
+ }
+ finally
+ {
+ procService.unregisterProcess(proc);
+ }
- proc.startProcess();
- proc.waitForEnd();
-
Message endMsg = getMessages().get(0);
assertNotNull("End message expected", endMsg);
assertEquals("bar", endMsg.getProperty("foo").getValue());
@@ -130,7 +139,7 @@
try
{
proc.startProcess();
- proc.waitForEnd();
+ proc.waitForEnd(1000);
}
finally
{
@@ -152,10 +161,9 @@
protected Process getProcess() throws IOException
{
ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
- MessageBuilder msgBuilder = procBuilder.addProcess("ReceiveTaskTest").addProcessMessage("ReceiveTaskMessage");
- msgBuilder.addProperty("foo", null, true);
- msgBuilder = procBuilder.addProcessMessage("EndEventMessage");
- msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
+ procBuilder.addProcess("ReceiveTaskTest");
+ procBuilder.addProcessMessage("ReceiveTaskMessage").addProperty("foo", null, true);
+ procBuilder.addProcessMessage("EndEventMessage").addToRef(getTestID()).addProperty("foo", null, true);
procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
procBuilder.addTask("TaskA", TaskType.Receive).addMessageRef("ReceiveTaskMessage");
EventBuilder eventBuilder = procBuilder.addSequenceFlow("End").addEndEvent("End", EventDetailType.Message);
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -27,8 +27,13 @@
import java.util.Set;
import javax.persistence.Basic;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Participant;
@@ -47,13 +52,20 @@
{
private static final long serialVersionUID = 1L;
+ @Id @GeneratedValue
+ @SuppressWarnings("unused")
+ private int id;
+
@Basic
private String name;
- @Transient
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant fromRef;
- @Transient
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant toRef;
- @Transient
+
+ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
private Set<Property> props = new HashSet<Property>();
public MessageImpl(String name)
@@ -64,7 +76,7 @@
this.name = name;
}
- public MessageImpl(String name, Participant targetID, Participant sourceID)
+ public MessageImpl(String name, ParticipantImpl targetID, ParticipantImpl sourceID)
{
this(name);
this.toRef = targetID;
Added: 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 (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.NotImplementedException;
+import org.jbpm.api.client.MessageListener;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "ReceiveTask")
+public class ReceiveTaskImpl extends TaskImpl implements MessageListener
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(ReceiveTaskImpl.class);
+
+ @Transient
+ protected MessageImpl messageRef;
+
+ @Transient
+ private List<Message> receivedMessages = new ArrayList<Message>();
+
+ @Transient
+ private List<Token> suspendedTokens = new ArrayList<Token>();
+
+ public ReceiveTaskImpl(String name)
+ {
+ super(name, TaskType.Receive);
+ }
+
+ // Persistence ctor
+ protected ReceiveTaskImpl()
+ {
+ }
+
+ @Transient
+ public boolean isInstantiate()
+ {
+ throw new NotImplementedException("JBPM-1648", "ReceiveTask Instantiate");
+ }
+
+ public Message getMessageRef()
+ {
+ return messageRef;
+ }
+
+ public void setMessageRef(MessageImpl message)
+ {
+ this.messageRef = message;
+ }
+
+ public synchronized void catchMessage(Message message)
+ {
+ String msgName = message.getName();
+ if (messageRef.getName().equals(msgName))
+ {
+ log.debug("catchMessage in " + this + " => " + message);
+ for (String propName : messageRef.getPropertyNames())
+ {
+ if (message.getProperty(propName) == null)
+ throw new IllegalArgumentException("Received message does not contain expected property: " + propName);
+ }
+ receivedMessages.add(message);
+
+ if (suspendedTokens.size() == 0)
+ {
+ log.debug("Suspend message: " + message);
+ }
+ else
+ {
+ Token token = suspendedTokens.remove(0);
+ ExecutionContext exContext = token.getExecutionContext();
+ TokenExecutor tokenExecutor = exContext.removeAttachment(TokenExecutor.class);
+ tokenExecutor.activate(token.getTokenID());
+ }
+ }
+ else
+ {
+ log.debug("Ignore unexpected message: " + message);
+ }
+ }
+
+ @Override
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final Node thisNode = this;
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ if (receivedMessages.size() > 0)
+ {
+ // Copy the expected properties from the
+ // received message to the execution context
+ Message msg = receivedMessages.get(0);
+ ExecutionContext exContext = token.getExecutionContext();
+ for (String key : messageRef.getPropertyNames())
+ {
+ Object value = msg.getProperty(key).getValue();
+ exContext.addAttachment(key, value);
+ }
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected FlowHandler getDefaultFlowHandler()
+ {
+ final Node thisNode = this;
+ return new FlowHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ if (receivedMessages.size() > 0)
+ {
+ receivedMessages.remove(0);
+ tokenExecutor.move(token, getOutFlow());
+ }
+ else
+ {
+ tokenExecutor.suspend(token);
+ ExecutionContext exContext = token.getExecutionContext();
+ exContext.addAttachment(TokenExecutor.class, tokenExecutor);
+ suspendedTokens.add(token);
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected void create(Process proc)
+ {
+ super.create(proc);
+
+ if (messageRef == null)
+ throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.initializeMessageRef(messageRef);
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -1,56 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.ri.model;
-
-//$Id$
-
-import org.jbpm.api.model.Message;
-import org.jbpm.api.runtime.BasicNodeHandler;
-import org.jbpm.api.runtime.ExecutionHandler;
-import org.jbpm.api.runtime.Token;
-import org.jbpm.ri.runtime.MessageSender;
-
-/**
- * An ExecutionHandler that sends a Message
- *
- * @author thomas.diesler at jboss.com
- * @since 30-Sep-2008
- */
-public class SendTaskExecutionHandler extends BasicNodeHandler implements ExecutionHandler
-{
- private static final long serialVersionUID = 1L;
-
- public SendTaskExecutionHandler(TaskImpl taskImpl)
- {
- setNode(taskImpl);
- }
-
- @Override
- public void execute(Token token)
- {
- TaskImpl taskImpl = (TaskImpl)getNode();
- Message messageRef = taskImpl.getMessageRef();
- MessageSender messageSender = new MessageSender(taskImpl, messageRef);
- messageSender.sendMessage(token);
- }
-
-}
\ No newline at end of file
Added: 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 (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.ri.runtime.MessageSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "SendTask")
+public class SendTaskImpl extends TaskImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(SendTaskImpl.class);
+
+ @Transient
+ protected MessageImpl messageRef;
+
+ public SendTaskImpl(String name)
+ {
+ super(name, TaskType.Send);
+ }
+
+ // Persistence ctor
+ protected SendTaskImpl()
+ {
+ }
+
+ public Message getMessageRef()
+ {
+ return messageRef;
+ }
+
+ public void setMessageRef(MessageImpl message)
+ {
+ this.messageRef = message;
+ }
+
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final SendTaskImpl thisNode = this;
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ Message messageRef = thisNode.getMessageRef();
+ MessageSender messageSender = new MessageSender(thisNode, messageRef);
+ messageSender.sendMessage(token);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected void create(Process proc)
+ {
+ super.create(proc);
+
+ if (messageRef == null)
+ throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.initializeMessageRef(messageRef);
+
+ if (messageRef.getToRef() == null)
+ throw new IllegalArgumentException("Message target cannot be null for: " + this);
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -32,14 +32,11 @@
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Process;
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.model.Signal;
import org.jbpm.api.model.Task;
import org.jbpm.api.model.builder.ObjectNameFactory;
-import org.jbpm.api.runtime.ExecutionHandler;
import org.jbpm.api.runtime.SignalHandler;
import org.jbpm.api.runtime.Token;
import org.jbpm.api.service.SignalService;
@@ -62,11 +59,8 @@
private static final long serialVersionUID = 1L;
@Enumerated(EnumType.STRING)
- private TaskType taskType = TaskType.None;
+ protected TaskType taskType;
- @Transient
- private MessageImpl messageRef;
-
public TaskImpl(String name, TaskType taskType)
{
super(name);
@@ -121,36 +115,7 @@
outFlows.add(outFlow);
}
- public Message getMessageRef()
- {
- return messageRef;
- }
-
- public void setMessageRef(MessageImpl message)
- {
- this.messageRef = message;
- }
-
@Override
- protected ExecutionHandler getDefaultExecutionHandler()
- {
- ExecutionHandler execHandler;
- if (taskType == TaskType.Send)
- {
- execHandler = new SendTaskExecutionHandler(this);
- }
- else if (taskType == TaskType.Receive)
- {
- execHandler = super.getDefaultExecutionHandler();
- }
- else
- {
- execHandler = super.getDefaultExecutionHandler();
- }
- return execHandler;
- }
-
- @Override
protected SignalHandler getDefaultSignalHandler()
{
final Node thisNode = this;
@@ -185,26 +150,6 @@
};
}
- @Override
- protected void create(Process proc)
- {
- super.create(proc);
-
- if ((taskType == TaskType.Send || taskType == TaskType.Receive) && messageRef == null)
- throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
- if (messageRef != null && taskType != TaskType.Send && taskType != TaskType.Receive)
- throw new InvalidProcessException("A task with a message ref must be of type 'Send' or 'Receive'");
-
- if (messageRef != null)
- {
- ProcessImpl procImpl = (ProcessImpl)proc;
- procImpl.initializeMessageRef(messageRef);
-
- if (messageRef.getToRef() == null)
- throw new IllegalArgumentException("Message target cannot be null for: " + this);
- }
- }
-
public String toString()
{
return "Task[" + getTaskType() + "," + getName() + "]";
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-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -46,6 +46,8 @@
import org.jbpm.ri.model.NodeImpl;
import org.jbpm.ri.model.ProcessImpl;
import org.jbpm.ri.model.PropertyImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
import org.jbpm.ri.model.SequenceFlowImpl;
import org.jbpm.ri.model.StartEventImpl;
import org.jbpm.ri.model.TaskImpl;
@@ -158,11 +160,11 @@
}
else if (type == TaskType.Receive)
{
- node = new TaskImpl(name, TaskType.Receive);
+ node = new ReceiveTaskImpl(name);
}
else if (type == TaskType.Send)
{
- node = new TaskImpl(name, TaskType.Send);
+ node = new SendTaskImpl(name);
}
else if (type == TaskType.User)
{
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -26,6 +26,8 @@
import org.jbpm.api.model.Task;
import org.jbpm.api.model.builder.TaskBuilder;
import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
import org.jbpm.ri.model.TaskImpl;
/**
@@ -44,7 +46,20 @@
public TaskBuilder addMessageRef(String msgName)
{
TaskImpl taskImpl = getTask();
- taskImpl.setMessageRef(new MessageImpl(msgName));
+ if (taskImpl instanceof ReceiveTaskImpl)
+ {
+ ReceiveTaskImpl receiveTaskImpl = (ReceiveTaskImpl)taskImpl;
+ receiveTaskImpl.setMessageRef(new MessageImpl(msgName));
+ }
+ else if (taskImpl instanceof SendTaskImpl)
+ {
+ SendTaskImpl sendTaskImpl = (SendTaskImpl)taskImpl;
+ sendTaskImpl.setMessageRef(new MessageImpl(msgName));
+ }
+ else
+ {
+ throw new IllegalStateException("Cannot set a message ref on task: " + taskImpl);
+ }
return this;
}
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.service;
+
+// $Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.builder.MessageBuilder;
+import org.jbpm.api.model.builder.MessageBuilderService;
+import org.jbpm.ri.model.builder.MessageBuilderImpl;
+
+/**
+ * The MessageBuilder can be used to build a {@link Message} dynamically.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class MessageBuilderServiceImpl extends MessageBuilderService implements MutableService
+{
+ @Override
+ public void setProcessEngine(ProcessEngine engine)
+ {
+ super.setProcessEngine(engine);
+ }
+
+ @Override
+ public MessageBuilder getMessageBuilder()
+ {
+ return new MessageBuilderImpl();
+ }
+}
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-10-01 03:42:57 UTC (rev 2456)
@@ -10,6 +10,7 @@
<set elementClass="org.jbpm.api.service.Service">
<inject bean="jBPMExecutionService" />
<inject bean="jBPMMessageService" />
+ <inject bean="jBPMMessageBuilderService" />
<inject bean="jBPMPersistenceService" />
<inject bean="jBPMProcessBuilderService" />
<inject bean="jBPMProcessService" />
@@ -24,9 +25,13 @@
<set elementClass="java.lang.String">
<value>org.jbpm.ri.model.AbstractElementImpl</value>
<value>org.jbpm.ri.model.EndEventImpl</value>
+ <value>org.jbpm.ri.model.MessageImpl</value>
<value>org.jbpm.ri.model.NodeImpl</value>
+ <value>org.jbpm.ri.model.ParticipantImpl</value>
<value>org.jbpm.ri.model.ProcessImpl</value>
<value>org.jbpm.ri.model.PropertyImpl</value>
+ <value>org.jbpm.ri.model.ReceiveTaskImpl</value>
+ <value>org.jbpm.ri.model.SendTaskImpl</value>
<value>org.jbpm.ri.model.SequenceFlowImpl</value>
<value>org.jbpm.ri.model.StartEventImpl</value>
<value>org.jbpm.ri.model.TaskImpl</value>
@@ -37,6 +42,7 @@
<!-- Other Services -->
<bean name="jBPMExecutionService" class="org.jbpm.ri.service.ExecutionServiceImpl" />
<bean name="jBPMMessageService" class="org.jbpm.ri.service.MessageServiceImpl" />
+ <bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
<bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
<bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" />
<bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />
More information about the jbpm-commits
mailing list