[JBoss JIRA] Created: (JBPM-1778) Empty map variables on process creation is set as null
by Paco Avila (JIRA)
Empty map variables on process creation is set as null
------------------------------------------------------
Key: JBPM-1778
URL: https://jira.jboss.org/jira/browse/JBPM-1778
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: jBPM 3.2.3
Environment: JBoss 4.2.2.GA, Database HSQL, Ubuntu Linux
Reporter: Paco Avila
If I create a ProcessInstances with an empty variables Map, it is set to null. But if I put any value, I works fine. This below code show this behavior. Uncomment the "vars.put("uno", "dos");" line to see it return a the right map when it is not empty.
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
HashMap<String, String> vars = new HashMap<String, String>();
//vars.put("uno", "dos");
ProcessDefinition pd = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <start-state>" +
" <transition to='s' />" +
" </start-state>" +
" <state name='s'>" +
" <transition to='end' />" +
" </state>" +
" <end-state name='end' />" +
"</process-definition>"
);
ProcessInstance pi = pd.createProcessInstance(vars);
TaskMgmtInstance tmi = pi.getTaskMgmtInstance();
tmi.createStartTaskInstance();
System.out.println("Created ProcessInstance Variables: "+pi.getContextInstance().getVariables());
} catch (Exception e) {
e.printStackTrace();
} finally {
jbpmContext.close();
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years
[JBoss JIRA] Created: (JBPM-1716) NPE in Transition.fireSuperStateEnterEvents() when destination is null
by Karl Palsson (JIRA)
NPE in Transition.fireSuperStateEnterEvents() when destination is null
----------------------------------------------------------------------
Key: JBPM-1716
URL: https://jira.jboss.org/jira/browse/JBPM-1716
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Core Engine
Affects Versions: jBPM 3.2.3
Reporter: Karl Palsson
The current method body is shown below. Destination is null in my case (I should check my process definition, it came about from a bad database move) However, instead of getting the JbpmException shown, I get the NPE from the "destination.isSuperStateNode()" loop above.
I'm not entirely sure what that loop is for, which is why I've not included a patch here. I'm unsure whether it should be moved down just past the first null check, or to the very bottom. Sorry :(
Source in question...
Node fireSuperStateEnterEvents(ExecutionContext executionContext) {
// calculate the actual destinationNode node
Node destination = to;
while (destination.isSuperStateNode()) { ###KJP This explodes before it gets to the Null check 3 lines down.
destination = (Node) destination.getNodes().get(0);
}
if (destination==null) {
String transitionName = (name!=null ? "'"+name+"'" : "in node '"+from+"'");
throw new JbpmException("transition "+transitionName+" doesn't have destination. check your processdefinition.xml");
}
// performance optimisation: check if at least there is a candidate superstate to be entered.
if ( destination.getSuperState()!=null ) {
// collect all the superstates being left
List leavingSuperStates = collectAllSuperStates(destination, from);
// reverse the order so that events are fired from outer to inner superstates
Collections.reverse(leavingSuperStates);
// fire a superstate-enter event for all superstates being left
fireSuperStateEvents(leavingSuperStates, Event.EVENTTYPE_SUPERSTATE_ENTER, executionContext);
}
return destination;
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years
[JBoss JIRA] Created: (JBPM-1765) Unclosed InputStream in org.jbpm.util.ClassLoaderUtil.getProperties
by Tim Timson (JIRA)
Unclosed InputStream in org.jbpm.util.ClassLoaderUtil.getProperties
-------------------------------------------------------------------
Key: JBPM-1765
URL: https://jira.jboss.org/jira/browse/JBPM-1765
Project: JBoss jBPM
Issue Type: Quality Risk
Security Level: Public (Everyone can see)
Affects Versions: jBPM 3.2.2
Environment: Glassfish v2
Reporter: Tim Timson
Fix For: jBPM 3.3.0 GA
Our Glassfish server logs a stack trace every time we undeploy our app. It looks like this is because you are not closing an input stream in the "getProperties" method of the org.jbpm.util.ClassLoaderUtil class.
Note that the "Properties.load" method does not close the input stream (unlike the "Properties.loadFromXml" method which does close the input stream). It looks like there is one case where you use Properties.load, and in that case you are not closing the input stream.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years
[JBoss JIRA] Created: (JBPM-1148) jBPM Classloading
by Bjoern Wand (JIRA)
jBPM Classloading
-----------------
Key: JBPM-1148
URL: http://jira.jboss.com/jira/browse/JBPM-1148
Project: JBoss jBPM
Issue Type: Patch
Components: Core Engine
Reporter: Bjoern Wand
Assigned To: Tom Baeyens
jBPM does not use ContextClassloader for classloading. The class ClassLoaderUtil.java has a comment that class loading could be made configurable. This is the patch I provided in the forum and I agreed with Koen Ars th open a JIRA for this.
package org.jbpm.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmException;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.instantiation.ProcessClassLoader;
/**
* provides centralized classloader lookup.
*/
public class ClassLoaderUtil {
private static Log log = LogFactory.getLog(ClassLoaderUtil.class);
public static Class loadClass(String className) {
try {
return getClassLoader().loadClass(className);
} catch (ClassNotFoundException e) {
throw new JbpmException("class not found '" + className + "'", e);
}
}
public static ClassLoader getClassLoader() {
if (JbpmConfiguration.Configs.hasObject("jbpm.classloader")) {
String jbpmClassloader = JbpmConfiguration.Configs.getString("jbpm.classloader");
String jbpmClassloaderClassname = JbpmConfiguration.Configs.getString("jbpm.classloader.classname");
if (jbpmClassloader.equals("jbpm")) {
return ClassLoaderUtil.class.getClassLoader();
} else if (jbpmClassloader.equals("context")) {
return Thread.currentThread().getContextClassLoader();
} else if (jbpmClassloader.equals("custom")) {
try {
if (jbpmClassloaderClassname == null) {
throw new JbpmException(
"'jbpm.classloader' property set to 'custom' but 'jbpm.classloader.classname' is empty!");
}
return (ClassLoader) Thread.currentThread().getContextClassLoader().loadClass(
jbpmClassloaderClassname).newInstance();
} catch (InstantiationException e) {
throw new JbpmException("Error instantiating custom classloader " + jbpmClassloaderClassname, e);
} catch (IllegalAccessException e) {
throw new JbpmException("Error accessing custom classloader " + jbpmClassloaderClassname, e);
} catch (ClassNotFoundException e) {
throw new JbpmException("Custom classloader " + jbpmClassloaderClassname + " not found ", e);
}
} else {
throw new JbpmException("'jbpm.classloader' property set to '" + jbpmClassloader
+ "' but only the values 'jbpm'/'context'/'custom' are supported!");
}
} else {
return ClassLoaderUtil.class.getClassLoader();
}
}
public static InputStream getStream(String resource) {
return getClassLoader().getResourceAsStream(resource);
}
public static Properties getProperties(String resource) {
Properties properties = new Properties();
try {
properties.load(getStream(resource));
} catch (IOException e) {
throw new JbpmException("couldn't load properties file '" + resource + "'", e);
}
return properties;
}
/**
* searches the given resource, first on the root of the classpath and if
* not not found there, in the given directory. public static InputStream
* getStream(String resource, String directory) { InputStream is =
* getClassLoader().getResourceAsStream(resource); if (is==null) { is =
* getClassLoader().getResourceAsStream(directory+"/"+resource); } return
* is; }
*
* public static Properties getProperties(String resource, String directory) {
* Properties properties = new Properties(); try {
* properties.load(getStream(resource, directory)); } catch (IOException e) {
* throw new JbpmException("couldn't load properties file '"+resource+"'",
* e); } return properties; }
*/
public static ClassLoader getProcessClassLoader(ProcessDefinition processDefinition) {
return new ProcessClassLoader(getClassLoader(), processDefinition);
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years
[JBoss JIRA] Created: (JBPM-1307) jBPM tries to use Hibernate transaction even if configured with isTransactionEnabled = false
by Mauro Molinari (JIRA)
jBPM tries to use Hibernate transaction even if configured with isTransactionEnabled = false
--------------------------------------------------------------------------------------------
Key: JBPM-1307
URL: http://jira.jboss.com/jira/browse/JBPM-1307
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Core Engine
Affects Versions: jPDL 3.2.2
Reporter: Mauro Molinari
The method org.jbpm.scheduler.db.DbSchedulerService.deleteTimersByProcessInstance(ProcessInstance) is accessing the Hibernate transaction even if jBPM is configured not to use transactions:
<service name="persistence">
<factory>
<bean
class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
<field name="isTransactionEnabled">
<false />
</field>
<field name="isCurrentSessionEnabled">
<true />
</field>
</bean>
</factory>
</service>
This causes a serious problem when you're using jBPM inside a JTA environment and you want to control JTA transactions by yourself. For instance, we're using Spring to manage transactions a JBoss Transactions as the JTA implementation. We are not using JNDI in any way, but when we try to call processInstance.end(), a call to org.jbpm.scheduler.db.DbSchedulerService.deleteTimersByProcessInstance(ProcessInstance) is performed and Hibernate tries to create a new JTATransaction by querying an empty JNDI InitialContext.
The only workaround we could find is the one outlined here:
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4117325#4117325
that is, subclassing JobSession in order to use Spring TransactionSynchronizationManager.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years