JBoss JBPM SVN: r6710 - jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 09:45:49 -0400 (Thu, 30 Sep 2010)
New Revision: 6710
Modified:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java
Log:
Added the ability to exclusively process for a given process instance. This uses the JMS Group ID to ensure 1 MDB consumer at a time.
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java 2010-09-30 13:44:55 UTC (rev 6709)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java 2010-09-30 13:45:49 UTC (rev 6710)
@@ -106,6 +106,14 @@
//higher priority for timers.
message.setJMSPriority(9);
}
+
+ if(!(job instanceof Timer))
+ {
+ if(job.isExclusive())
+ {
+ message.setStringProperty("JMSXGroupID", "GROUP:"+job.getProcessInstance().getId());
+ }
+ }
}
public void createTimer(Timer timer) {
15 years, 7 months
JBoss JBPM SVN: r6709 - jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 09:44:55 -0400 (Thu, 30 Sep 2010)
New Revision: 6709
Added:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java
Log:
Added the SignalTokenJob, which can be used to signal a token asyhcronously.
Added: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java 2010-09-30 13:44:55 UTC (rev 6709)
@@ -0,0 +1,27 @@
+package org.jbpm.job;
+
+import org.jbpm.JbpmContext;
+import org.jbpm.graph.exe.Token;
+
+public class SignalTokenJob extends Job {
+
+ public SignalTokenJob() {
+
+ }
+
+ public SignalTokenJob(Token token) {
+ super(token);
+ }
+
+ public boolean execute(JbpmContext jbpmContext) throws Exception {
+ Token token = getToken();
+ token.unlock(toString());
+ token.signal();
+ return true;
+ }
+
+ public String toString() {
+ return "SignalTokenJob(" + getId() + ',' + getToken() + ')';
+ }
+
+}
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/job/SignalTokenJob.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
15 years, 7 months
JBoss JBPM SVN: r6708 - jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 09:44:18 -0400 (Thu, 30 Sep 2010)
New Revision: 6708
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java
Log:
Added asynchronous start to the subprocess state. This should allow the first process to completely save before the subprocess fires. This keeps the subprocess from having to cascade updates to the parent process.
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java 2010-09-30 13:42:54 UTC (rev 6707)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/node/ProcessState.java 2010-09-30 13:44:18 UTC (rev 6708)
@@ -29,7 +29,7 @@
import org.apache.commons.logging.LogFactory;
import org.dom4j.Element;
import org.dom4j.tree.DefaultElement;
-
+import org.jbpm.JbpmContext;
import org.jbpm.JbpmConfiguration.Configs;
import org.jbpm.context.def.VariableAccess;
import org.jbpm.context.exe.ContextInstance;
@@ -41,9 +41,12 @@
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.graph.log.ProcessStateLog;
+import org.jbpm.job.SignalTokenJob;
import org.jbpm.jpdl.JpdlException;
import org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator;
import org.jbpm.jpdl.xml.JpdlXmlReader;
+import org.jbpm.msg.MessageService;
+import org.jbpm.svc.Services;
import org.jbpm.util.Clock;
public class ProcessState extends Node {
@@ -188,7 +191,22 @@
}
// send the signal to start the subprocess
- subProcessInstance.signal();
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+ Services services = jbpmContext.getServices();
+ if(services.getMessageService()!=null)
+ {
+ if(log.isDebugEnabled())
+ {
+ log.debug("Scheduling signal token for subprocess: "+superProcessToken);
+ }
+ MessageService messageService = services.getMessageService();
+ SignalTokenJob job = new SignalTokenJob(subProcessInstance.getRootToken());
+ messageService.send(job);
+ }
+ else
+ {
+ subProcessInstance.signal();
+ }
}
public void leave(ExecutionContext executionContext, Transition transition) {
15 years, 7 months
JBoss JBPM SVN: r6707 - jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 09:42:54 -0400 (Thu, 30 Sep 2010)
New Revision: 6707
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
Log:
Added asynchronous signaling for process instances.
This should be exclusive to the parent process instance because if these fire concurrently, it leads to potential stale object state exceptions.
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2010-09-30 13:39:44 UTC (rev 6706)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ProcessInstance.java 2010-09-30 13:42:54 UTC (rev 6707)
@@ -30,6 +30,8 @@
import java.util.List;
import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.context.exe.ContextInstance;
@@ -41,6 +43,8 @@
import org.jbpm.graph.log.ProcessInstanceCreateLog;
import org.jbpm.graph.log.ProcessInstanceEndLog;
import org.jbpm.job.CleanUpProcessJob;
+import org.jbpm.job.SignalSuperProcessJob;
+import org.jbpm.job.SignalTokenJob;
import org.jbpm.logging.exe.LoggingInstance;
import org.jbpm.logging.log.ProcessLog;
import org.jbpm.module.def.ModuleDefinition;
@@ -57,7 +61,8 @@
* execution of a process definition, just use the {@link #ProcessInstance(ProcessDefinition)}.
*/
public class ProcessInstance implements Identifiable, Serializable {
-
+
+ private static final Log log = LogFactory.getLog(ProcessInstance.class);
private static final long serialVersionUID = 1L;
long id;
@@ -340,18 +345,32 @@
// add the process instance end log
rootToken.addLog(new ProcessInstanceEndLog());
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
// check if this process was started as a subprocess of a super process
if (superProcessToken != null && !superProcessToken.hasEnded()) {
- addCascadeProcessInstance(superProcessToken.getProcessInstance());
-
- ExecutionContext superExecutionContext = new ExecutionContext(superProcessToken);
- superExecutionContext.setSubProcessInstance(this);
- superProcessToken.signal(superExecutionContext);
+ Services services = jbpmContext.getServices();
+ if(services.getMessageService()!=null)
+ {
+ if(log.isDebugEnabled())
+ {
+ log.debug("Scheduling signal token for parent process: "+superProcessToken);
+ }
+ MessageService messageService = services.getMessageService();
+ SignalTokenJob job = new SignalTokenJob(superProcessToken);
+ job.setExclusive(true);
+ messageService.send(job);
+ }
+ else
+ {
+ addCascadeProcessInstance(superProcessToken.getProcessInstance());
+ ExecutionContext superExecutionContext = new ExecutionContext(superProcessToken);
+ superExecutionContext.setSubProcessInstance(this);
+ superProcessToken.signal(superExecutionContext);
+ }
}
// make sure jobs for this process instance are canceled
// after the process end updates are posted to the database
- JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
if (jbpmContext != null) {
Services services = jbpmContext.getServices();
PersistenceService persistenceService = services.getPersistenceService();
15 years, 7 months
JBoss JBPM SVN: r6706 - jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 09:39:44 -0400 (Thu, 30 Sep 2010)
New Revision: 6706
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ExecutionContext.java
Log:
The execution process should initialize the subprocess, if it exists, based on the token provided in the constructor.
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ExecutionContext.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ExecutionContext.java 2010-09-30 11:48:29 UTC (rev 6705)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/ExecutionContext.java 2010-09-30 13:39:44 UTC (rev 6706)
@@ -58,6 +58,7 @@
public ExecutionContext(Token token) {
this.token = token;
+ this.subProcessInstance = token.getSubProcessInstance();
}
public ExecutionContext(ExecutionContext other) {
15 years, 7 months
JBoss JBPM SVN: r6705 - jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 07:48:29 -0400 (Thu, 30 Sep 2010)
New Revision: 6705
Modified:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java
Log:
Enterprise is supposed to be used only by SOA-P, which provides commons-lang.
This is to use ReflectionToStringBuilder to reflect commands coming into the CommandListenerBean. This is needed because we need to be able to associate a command with a message, in case the command fails and the message is sent to the DLQ.
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java 2010-09-30 11:45:50 UTC (rev 6704)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java 2010-09-30 11:48:29 UTC (rev 6705)
@@ -38,6 +38,7 @@
import javax.jms.ObjectMessage;
import javax.jms.Session;
+import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.command.Command;
@@ -111,22 +112,22 @@
Object result;
try {
if (log.isDebugEnabled()) {
- log.debug("executing " + command);
+ log.debug("executing " + ReflectionToStringBuilder.toString(command));
}
result = commandService.execute(command);
if (log.isTraceEnabled()) {
- log.trace(command + " completed successfully, committing");
+ log.trace(ReflectionToStringBuilder.toString(command) + " completed successfully, committing");
}
}
catch (RuntimeException e) {
// if this is a locking exception, keep it quiet
if (DbPersistenceService.isLockingException(e)) {
StaleObjectLogConfigurer.getStaleObjectExceptionsLog().error(message
- + " failed to execute " + command, e);
+ + " failed to execute " + ReflectionToStringBuilder.toString(command), e);
}
else {
- log.error(message + " failed to execute " + command, e);
+ log.error(message + " failed to execute " + ReflectionToStringBuilder.toString(command), e);
}
// MDBs are not supposed to throw exceptions
messageDrivenContext.setRollbackOnly();
@@ -161,7 +162,7 @@
return (Command) object;
}
else {
- log.warn("not a command: " + object);
+ log.warn("not a command: " + ReflectionToStringBuilder.toString(object));
}
}
else {
15 years, 7 months
JBoss JBPM SVN: r6704 - jbpm3/branches/jbpm-3.2-soa/enterprise-jee5.
by do-not-reply@jboss.org
Author: bradsdavis
Date: 2010-09-30 07:45:50 -0400 (Thu, 30 Sep 2010)
New Revision: 6704
Modified:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml
Log:
Enterprise is supposed to be used only by SOA-P, which has the Commons Lang.
This is to use ReflectionToStringBuilder to reflect commands coming into the CommandListenerBean. This is needed because we need to be able to associate a command with a message, incase the command fails and the message is sent to the DLQ.
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml 2010-09-30 04:32:10 UTC (rev 6703)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/pom.xml 2010-09-30 11:45:50 UTC (rev 6704)
@@ -74,5 +74,12 @@
<version>1.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ <type>jar</type>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</project>
15 years, 7 months
JBoss JBPM SVN: r6703 - in jbpm3/branches/jbpm-3.2-soa/core/src: test/resources/org/jbpm/jbpm2489 and 1 other directory.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-09-30 00:32:10 -0400 (Thu, 30 Sep 2010)
New Revision: 6703
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/Token.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2489/processdefinition.xml
Log:
set join's async attribute to "exclusive" in JBPM-2489 process to prevent the test from timing out;
eliminate recursion in Token.getFullName
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/Token.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/Token.java 2010-09-29 21:53:02 UTC (rev 6702)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/graph/exe/Token.java 2010-09-30 04:32:10 UTC (rev 6703)
@@ -349,7 +349,7 @@
if (isRoot()) {
processInstance.end();
}
- else if (!parent.hasActiveChildren()) {
+ else if (parent != null && !parent.hasActiveChildren()) {
parent.end();
}
}
@@ -406,15 +406,15 @@
// various information extraction methods ///////////////////////////////////
public boolean hasEnded() {
- return (end != null);
+ return end != null;
}
public boolean isRoot() {
- return (parent == null);
+ return processInstance != null && equals(processInstance.getRootToken());
}
public boolean hasParent() {
- return (parent != null);
+ return parent != null;
}
public boolean hasChild(String name) {
@@ -426,11 +426,15 @@
}
public String getFullName() {
- if (parent == null)
- return "/";
- if (parent.getParent() == null)
- return "/" + name;
- return parent.getFullName() + "/" + name;
+ if (isRoot()) return "/";
+
+ StringBuffer nameBuilder = new StringBuffer();
+ for (Token token = this; token.hasParent(); token = token.getParent()) {
+ String tokenName = token.getName();
+ if (tokenName != null) nameBuilder.insert(0, tokenName);
+ nameBuilder.insert(0, '/');
+ }
+ return nameBuilder.toString();
}
public List getChildrenAtNode(Node aNode) {
@@ -462,39 +466,27 @@
}
public Token findToken(String relativeTokenPath) {
- if (relativeTokenPath == null)
- return null;
+ if (relativeTokenPath == null) return null;
+
String path = relativeTokenPath.trim();
- if (("".equals(path)) || (".".equals(path))) {
- return this;
- }
- if ("..".equals(path)) {
- return parent;
- }
+ if (path.length() == 0 || ".".equals(path)) return this;
+ if ("..".equals(path)) return parent;
+
if (path.startsWith("/")) {
- Token root = processInstance.getRootToken();
- return root.findToken(path.substring(1));
+ return processInstance.getRootToken().findToken(path.substring(1));
}
- if (path.startsWith("./")) {
- return findToken(path.substring(2));
- }
+ if (path.startsWith("./")) return findToken(path.substring(2));
if (path.startsWith("../")) {
- if (parent != null) {
- return parent.findToken(path.substring(3));
- }
- return null;
+ return parent != null ? parent.findToken(path.substring(3)) : null;
}
+
+ if (children == null) return null;
+
int slashIndex = path.indexOf('/');
- if (slashIndex == -1) {
- return (Token) (children != null ? children.get(path) : null);
- }
- Token token = null;
- String name = path.substring(0, slashIndex);
- token = (Token) children.get(name);
- if (token != null) {
- return token.findToken(path.substring(slashIndex + 1));
- }
- return null;
+ if (slashIndex == -1) return (Token) children.get(path);
+
+ Token token = (Token) children.get(path.substring(0, slashIndex));
+ return token != null ? token.findToken(path.substring(slashIndex + 1)) : null;
}
public Map getActiveChildren() {
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2489/processdefinition.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2489/processdefinition.xml 2010-09-29 21:53:02 UTC (rev 6702)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2489/processdefinition.xml 2010-09-30 04:32:10 UTC (rev 6703)
@@ -74,7 +74,7 @@
<transition to="join1"/>
</node>
- <join name="join1">
+ <join name="join1" async="exclusive">
<transition to="Shipment Notice"/>
</join>
15 years, 7 months
JBoss JBPM SVN: r6702 - in jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm: jms and 1 other directory.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-09-29 17:53:02 -0400 (Wed, 29 Sep 2010)
New Revision: 6702
Removed:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsUtil.java
Modified:
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/ExecuteJobCommand.java
jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java
Log:
JBPM-2945 remove undeclared dependency on commons-lang (not worth including in distribution just for two logs)
simplify jms connection closing based on api note
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java 2010-09-29 21:14:17 UTC (rev 6701)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/ejb/CommandListenerBean.java 2010-09-29 21:53:02 UTC (rev 6702)
@@ -38,11 +38,9 @@
import javax.jms.ObjectMessage;
import javax.jms.Session;
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.command.Command;
-import org.jbpm.jms.JmsUtil;
import org.jbpm.persistence.db.DbPersistenceService;
import org.jbpm.persistence.db.StaleObjectLogConfigurer;
@@ -92,10 +90,10 @@
@Resource
private MessageDrivenContext messageDrivenContext;
-
+
@EJB(name = "ejb/LocalCommandService")
private LocalCommandService commandService;
-
+
@Resource(name = "jms/JbpmConnectionFactory", shareable = true)
private ConnectionFactory jmsConnectionFactory;
@@ -105,27 +103,30 @@
try {
// extract command from message
Command command = extractCommand(message);
+ // a null return value means the message did not carry a valid command
+ // warnings were logged already; just swallow the message and return
if (command == null) return;
// execute command via local command executor bean
Object result;
try {
- if(log.isDebugEnabled()) {
- log.debug("Command: "+ReflectionToStringBuilder.toString(command)+" sent with Message["+message.toString()+"]");
- }
- result = commandService.execute(command);
-
- if(log.isTraceEnabled()) {
- log.trace("Command: "+ReflectionToStringBuilder.toString(command)+" sent with Message["+message.toString()+"] Completed Successfully. Committing.");
- }
+ if (log.isDebugEnabled()) {
+ log.debug("executing " + command);
+ }
+ result = commandService.execute(command);
+
+ if (log.isTraceEnabled()) {
+ log.trace(command + " completed successfully, committing");
+ }
}
catch (RuntimeException e) {
// if this is a locking exception, keep it quiet
if (DbPersistenceService.isLockingException(e)) {
- StaleObjectLogConfigurer.getStaleObjectExceptionsLog().error(message.toString()+"failed to execute " + command, e);
+ StaleObjectLogConfigurer.getStaleObjectExceptionsLog().error(message
+ + " failed to execute " + command, e);
}
else {
- log.error(message.toString()+" failed to execute " + command, e);
+ log.error(message + " failed to execute " + command, e);
}
// MDBs are not supposed to throw exceptions
messageDrivenContext.setRollbackOnly();
@@ -134,8 +135,7 @@
// send a response back if a "reply to" destination is set
Destination replyTo;
- if (jmsConnectionFactory != null
- && (replyTo = message.getJMSReplyTo()) != null
+ if (jmsConnectionFactory != null && (replyTo = message.getJMSReplyTo()) != null
&& (result instanceof Serializable || result == null)) {
sendResult((Serializable) result, replyTo, message.getJMSMessageID());
}
@@ -173,27 +173,29 @@
private void sendResult(Serializable result, Destination destination, String correlationId)
throws JMSException {
if (log.isDebugEnabled()) log.debug("sending " + result + " to " + destination);
-
- Connection jmsConnection = null;
- Session jmsSession = null;
- MessageProducer producer = null;
+
+ Connection jmsConnection = jmsConnectionFactory.createConnection();
try {
/*
* if the connection supports xa, the session will be transacted, else the session will
* auto acknowledge; in either case no explicit transaction control must be performed -
* see ejb 2.1 - 17.3.5
*/
- jmsConnection = jmsConnectionFactory.createConnection();
- jmsSession = jmsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Session jmsSession = jmsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Message resultMessage = jmsSession.createObjectMessage(result);
resultMessage.setJMSCorrelationID(correlationId);
- producer = jmsSession.createProducer(destination);
+ MessageProducer producer = jmsSession.createProducer(destination);
producer.send(resultMessage);
}
finally {
- JmsUtil.closeSilently(producer);
- JmsUtil.closeSilently(jmsSession);
- JmsUtil.closeSilently(jmsConnection);
+ // there is no need to close the sessions and producers of a closed connection
+ // http://download.oracle.com/javaee/1.4/api/javax/jms/Connection.html#close()
+ try {
+ jmsConnection.close();
+ }
+ catch (JMSException e) {
+ log.warn("failed to close jms connection", e);
+ }
}
}
}
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/ExecuteJobCommand.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/ExecuteJobCommand.java 2010-09-29 21:14:17 UTC (rev 6701)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/ExecuteJobCommand.java 2010-09-29 21:53:02 UTC (rev 6702)
@@ -90,8 +90,14 @@
else {
// job is a repetitive timer
Timer timer = jbpmContext.getJobSession().loadTimer(job.getId());
- JmsConnectorService schedulerService = (JmsConnectorService) jbpmContext.getServices().getSchedulerService();
+ JmsConnectorService schedulerService = (JmsConnectorService) jbpmContext.getServices()
+ .getSchedulerService();
schedulerService.sendWithoutSaving(timer);
}
}
+
+ @Override
+ public String toString() {
+ return "ExecuteJobCommand(" + jobId + ")";
+ }
}
Modified: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java 2010-09-29 21:14:17 UTC (rev 6701)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsConnectorService.java 2010-09-29 21:53:02 UTC (rev 6702)
@@ -43,15 +43,14 @@
import org.jbpm.scheduler.SchedulerService;
public class JmsConnectorService implements MessageService, SchedulerService {
+
+ private final JobSession jobSession;
+ private final JmsConnectorServiceFactory factory;
private static final DateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(JmsConnectorService.class);
-
- private final JobSession jobSession;
-
- private final JmsConnectorServiceFactory factory;
public JmsConnectorService(JmsConnectorServiceFactory factory) throws JMSException {
JbpmContext jbpmContext = factory.getJbpmConfiguration().getCurrentJbpmContext();
@@ -63,28 +62,34 @@
public void send(Job job) {
jobSession.saveJob(job);
- sendWithoutSaving(job);
+ try {
+ sendWithoutSaving(job);
+ }
+ catch (JMSException e) {
+ throw new JbpmException("failed to send job message", e);
+ }
}
- void sendWithoutSaving(Job job) {
- Connection connection = null;
- MessageProducer messageProducer = null;
- Session session = null;
+ void sendWithoutSaving(Job job) throws JMSException {
+ Connection connection = factory.getConnectionFactory().createConnection();
try {
- connection = factory.getConnectionFactory().createConnection();
- session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
- messageProducer = session.createProducer(factory.getDestination());
+ Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
+
Message message = session.createMessage();
populateMessage(message, job);
+
+ MessageProducer messageProducer = session.createProducer(factory.getDestination());
messageProducer.send(message);
}
- catch (JMSException e) {
- throw new JbpmException("could not send jms message", e);
- }
finally {
- JmsUtil.closeSilently(messageProducer);
- JmsUtil.closeSilently(session);
- JmsUtil.closeSilently(connection);
+ // there is no need to close the sessions and producers of a closed connection
+ // http://download.oracle.com/javaee/1.4/api/javax/jms/Connection.html#close()
+ try {
+ connection.close();
+ }
+ catch (JMSException e) {
+ log.warn("failed to close jms connection", e);
+ }
}
}
Deleted: jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsUtil.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsUtil.java 2010-09-29 21:14:17 UTC (rev 6701)
+++ jbpm3/branches/jbpm-3.2-soa/enterprise-jee5/src/main/java/org/jbpm/jms/JmsUtil.java 2010-09-29 21:53:02 UTC (rev 6702)
@@ -1,69 +0,0 @@
-package org.jbpm.jms;
-
-import javax.jms.Connection;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Utility for handling common JMS tasks.
- *
- * @author Brad Davis
- *
- */
-public class JmsUtil {
-
- private static final Log log = LogFactory.getLog(JmsUtil.class);
- private JmsUtil(){
- //seal
- }
-
- /**
- * Call within the finally block to cleanup message producers.
- * @param producer
- */
- public static void closeSilently(MessageProducer producer)
- {
- if(producer!=null) {
- try {
- producer.close();
- } catch (JMSException e) {
- log.warn("issue closing message producer.",e);
- }
- }
- }
-
- /**
- * Call within the finally block to cleanup JMS sessions.
- * @param session
- */
- public static void closeSilently(Session session)
- {
- if(session!=null) {
- try {
- session.close();
- } catch(JMSException e) {
- log.warn("issue closing session.",e);
- }
- }
- }
-
- /**
- * Call within the finally block to cleanup JMS connections.
- * @param connection
- */
- public static void closeSilently(Connection connection)
- {
- if(connection!=null) {
- try {
- connection.close();
- } catch (JMSException e) {
- log.warn("issue closing connection.",e);
- }
- }
-
- }
-}
15 years, 7 months
JBoss JBPM SVN: r6701 - in jbpm3/branches/jbpm-3.2-soa/core/src: main/java/org/jbpm/logging/db and 4 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-09-29 17:14:17 -0400 (Wed, 29 Sep 2010)
New Revision: 6701
Added:
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/CustomLoggingServiceTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/MemoryLoggingService.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/NoLoggingServiceTest.java
jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/
jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/custom-log.cfg.xml
jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/no-log.cfg.xml
Modified:
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/exe/VariableContainer.java
jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/logging/db/DbLoggingService.java
Log:
JBPM-2947 provide test cases for (a) custom logging service and (b) no logging service
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/exe/VariableContainer.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/exe/VariableContainer.java 2010-09-29 18:45:19 UTC (rev 6700)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/context/exe/VariableContainer.java 2010-09-29 21:14:17 UTC (rev 6701)
@@ -196,16 +196,15 @@
if (variableInstances != null) {
VariableInstance variableInstance = (VariableInstance) variableInstances.remove(name);
if (variableInstance != null) {
+ // unlink variable
variableInstance.removeReferences();
- // is engine running in memory only or with logging enabled?
+ // log variable deletion
+ getToken().addLog(new VariableDeleteLog(variableInstance));
+
+ // if a context is present and its logging service is not connected to the database
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
- if (jbpmContext == null || (jbpmContext.getServices().getLoggingService() !=null )) {
- // record variable deletion
- // do not actually delete variable instance because log refers to it
- getToken().addLog(new VariableDeleteLog(variableInstance));
- }
-
- if (jbpmContext != null && ((jbpmContext.getServices().getLoggingService() != null) && !(jbpmContext.getServices().getLoggingService() instanceof DbLoggingService))){
+ if (jbpmContext != null
+ && !(jbpmContext.getServices().getLoggingService() instanceof DbLoggingService)) {
// delete variable instance here before all references to it are lost
Session session = jbpmContext.getSession();
if (session != null) session.delete(variableInstance);
Modified: jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/logging/db/DbLoggingService.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/logging/db/DbLoggingService.java 2010-09-29 18:45:19 UTC (rev 6700)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/main/java/org/jbpm/logging/db/DbLoggingService.java 2010-09-29 21:14:17 UTC (rev 6701)
@@ -30,23 +30,23 @@
public class DbLoggingService implements LoggingService {
private static final long serialVersionUID = 1L;
-
- Session session = null;
-
+
+ private final Session session;
+
public DbLoggingService() {
- JbpmContext currentJbpmContext = JbpmContext.getCurrentJbpmContext();
- if (currentJbpmContext==null) {
- throw new JbpmException("instantiation of the DbLoggingService requires a current JbpmContext");
+ JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+ if (jbpmContext == null) {
+ throw new JbpmException("no active jbpm context");
}
- session = currentJbpmContext.getSession();
+ session = jbpmContext.getSession();
}
public void log(ProcessLog processLog) {
- if (session!=null) {
+ if (session != null) {
// Improvement suggestions by Max :
- // db-level: use some hilo based id strategy to avoid repetitive insert. (dependent on db-lock)
- // sessionwise: use statelesssession or at least different session
- // can we borrow connection safely. Nag Steve. (open ontop of another session)
+ // db-level: use hilo based id strategy to avoid repetitive insert (dependent on db-lock)
+ // session: use stateless session or at least different session
+ // can we borrow connection safely. (open on top of another session)
session.save(processLog);
}
}
Added: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/CustomLoggingServiceTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/CustomLoggingServiceTest.java (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/CustomLoggingServiceTest.java 2010-09-29 21:14:17 UTC (rev 6701)
@@ -0,0 +1,88 @@
+/*
+ * 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.jbpm2947;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.hibernate.criterion.Projections;
+
+import org.jbpm.context.def.ContextDefinition;
+import org.jbpm.context.exe.VariableInstance;
+import org.jbpm.context.log.VariableDeleteLog;
+import org.jbpm.db.AbstractDbTestCase;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.logging.log.ProcessLog;
+
+/**
+ * Custom logging causes orphaned variables.
+ *
+ * @see <a href="https://jira.jboss.org/browse/JBPM-2947">JBPM-2947</a>
+ * @author Alejandro Guizar
+ */
+public class CustomLoggingServiceTest extends AbstractDbTestCase {
+
+ protected String getJbpmTestConfig() {
+ return "org/jbpm/jbpm2947/custom-log.cfg.xml";
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ jbpmConfiguration.close();
+ }
+
+ public void testDeleteVariable() {
+ ProcessDefinition processDefinition = new ProcessDefinition("jbpm2947");
+ processDefinition.addDefinition(new ContextDefinition());
+ deployProcessDefinition(processDefinition);
+
+ ProcessInstance processInstance = jbpmContext.newProcessInstance("jbpm2947");
+ processInstance.getContextInstance().setVariable("var", "what's up, doc?");
+
+ processInstance = saveAndReload(processInstance);
+ processInstance.getContextInstance().deleteVariable("var");
+ jbpmContext.save(processInstance);
+
+ // verify the variable instance was deleted
+ Number varCount = (Number) session.createCriteria(VariableInstance.class)
+ .setProjection(Projections.rowCount())
+ .uniqueResult();
+ assertEquals(0, varCount.intValue());
+
+ // check the variable delete log was passed to the logging service
+ MemoryLoggingService loggingService = (MemoryLoggingService) jbpmContext.getServices()
+ .getLoggingService();
+ VariableDeleteLog processLog = (VariableDeleteLog) findLog(loggingService.getProcessLogs(), VariableDeleteLog.class);
+ assertEquals("var", processLog.getVariableInstance().getName());
+ }
+
+ private static ProcessLog findLog(List processLogs, Class logType) {
+ for (Iterator i = processLogs.iterator(); i.hasNext();) {
+ ProcessLog processLog = (ProcessLog) i.next();
+ if (logType.isInstance(processLog)) {
+ return processLog;
+ }
+ }
+ return null;
+ }
+}
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/CustomLoggingServiceTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/MemoryLoggingService.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/MemoryLoggingService.java (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/MemoryLoggingService.java 2010-09-29 21:14:17 UTC (rev 6701)
@@ -0,0 +1,64 @@
+/*
+ * 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.jbpm2947;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.logging.LoggingService;
+import org.jbpm.logging.log.ProcessLog;
+import org.jbpm.svc.Service;
+import org.jbpm.svc.ServiceFactory;
+
+/**
+ * @author Alejandro Guizar
+ */
+public class MemoryLoggingService implements LoggingService {
+
+ private final List processLogs = new ArrayList();
+ private static final long serialVersionUID = 1L;
+
+ public List getProcessLogs() {
+ return processLogs;
+ }
+
+ public void log(ProcessLog processLog) {
+ processLogs.add(processLog);
+ }
+
+ public void close() {
+ // nothing to do here
+ }
+
+ public static class Factory implements ServiceFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public Service openService() {
+ return new MemoryLoggingService();
+ }
+
+ public void close() {
+ // nothing to do here
+ }
+ }
+}
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/MemoryLoggingService.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/NoLoggingServiceTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/NoLoggingServiceTest.java (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/NoLoggingServiceTest.java 2010-09-29 21:14:17 UTC (rev 6701)
@@ -0,0 +1,70 @@
+/*
+ * 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.jbpm2947;
+
+import org.hibernate.criterion.Projections;
+
+import org.jbpm.context.def.ContextDefinition;
+import org.jbpm.context.exe.VariableInstance;
+import org.jbpm.db.AbstractDbTestCase;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+
+/**
+ * Custom logging causes orphaned variables.
+ *
+ * @see <a href="https://jira.jboss.org/browse/JBPM-2947">JBPM-2947</a>
+ * @author Alejandro Guizar
+ */
+public class NoLoggingServiceTest extends AbstractDbTestCase {
+
+ protected String getJbpmTestConfig() {
+ return "org/jbpm/jbpm2947/no-log.cfg.xml";
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ jbpmConfiguration.close();
+ }
+
+ public void testDeleteVariable() {
+ assertNull("expected logging service to be absent",
+ jbpmContext.getServices().getLoggingService());
+
+ ProcessDefinition processDefinition = new ProcessDefinition("jbpm2947");
+ processDefinition.addDefinition(new ContextDefinition());
+ deployProcessDefinition(processDefinition);
+
+ ProcessInstance processInstance = jbpmContext.newProcessInstance("jbpm2947");
+ processInstance.getContextInstance().setVariable("var", "what's up, doc?");
+
+ processInstance = saveAndReload(processInstance);
+ processInstance.getContextInstance().deleteVariable("var");
+ jbpmContext.save(processInstance);
+
+ // verify the variable instance was deleted
+ Number varCount = (Number) session.createCriteria(VariableInstance.class)
+ .setProjection(Projections.rowCount())
+ .uniqueResult();
+ assertEquals(0, varCount.intValue());
+ }
+}
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/test/java/org/jbpm/jbpm2947/NoLoggingServiceTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/custom-log.cfg.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/custom-log.cfg.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/custom-log.cfg.xml 2010-09-29 21:14:17 UTC (rev 6701)
@@ -0,0 +1,10 @@
+<jbpm-configuration>
+ <jbpm-context>
+ <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
+ <service name="logging" factory="org.jbpm.jbpm2947.MemoryLoggingService$Factory" />
+ <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
+ <service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" />
+ <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
+ <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
+ </jbpm-context>
+</jbpm-configuration>
\ No newline at end of file
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/custom-log.cfg.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/no-log.cfg.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/no-log.cfg.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/no-log.cfg.xml 2010-09-29 21:14:17 UTC (rev 6701)
@@ -0,0 +1,9 @@
+<jbpm-configuration>
+ <jbpm-context>
+ <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
+ <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
+ <service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" />
+ <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
+ <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
+ </jbpm-context>
+</jbpm-configuration>
\ No newline at end of file
Property changes on: jbpm3/branches/jbpm-3.2-soa/core/src/test/resources/org/jbpm/jbpm2947/no-log.cfg.xml
___________________________________________________________________
Name: svn:eol-style
+ native
15 years, 7 months