[JBoss JIRA] Created: (JBPM-1912) org.jbpm.taskmgmt.exe.TaskMgmtInstance.getTaskInstances() should return a clone or an unmodifiable view, otherwise documentation should explain it does not
by Mauro Molinari (JIRA)
org.jbpm.taskmgmt.exe.TaskMgmtInstance.getTaskInstances() should return a clone or an unmodifiable view, otherwise documentation should explain it does not
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Key: JBPM-1912
URL: https://jira.jboss.org/jira/browse/JBPM-1912
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: API
Affects Versions: jBPM 3.3.0 GA
Reporter: Mauro Molinari
The method org.jbpm.taskmgmt.exe.TaskMgmtInstance.getTaskInstances() returns directly the set internally used by the TaskMgmtInstance instance to track task instances, without cloning it. This can cause client code to corrupt that set (adding or removing elements in it) and corruption is "propagated" to all the task instances that share the same TaskMgmtInstance instance.
I think that method should return a clone or an unmodifiable view of that set, otherwise the Javadoc should state clearly that it does not, warning the client programmer of the inherent risks.
A similar rule may apply to org.jbpm.taskmgmt.exe.TaskMgmtInstance.getTaskInstancesWithVariableUpdates() too.
--
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
17 years, 4 months
[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
17 years, 4 months
[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
17 years, 4 months
[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
17 years, 4 months
[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
17 years, 4 months
[JBoss JIRA] Created: (JBPM-1908) Provide a standalone package alongside the installer or make the installer cover more use-cases
by Mauro Molinari (JIRA)
Provide a standalone package alongside the installer or make the installer cover more use-cases
-----------------------------------------------------------------------------------------------
Key: JBPM-1908
URL: https://jira.jboss.org/jira/browse/JBPM-1908
Project: JBoss jBPM
Issue Type: Release
Security Level: Public (Everyone can see)
Components: Installer
Affects Versions: jBPM 3.3.0 GA
Reporter: Mauro Molinari
The current 3.3.0GA installer does not cover all the uses cases for jBPM download needs.
For instance, if I need to download just jBPM standalone (maybe together the GPD), without needing any deployment phase, now I can't, because the installer forces you to specify a JBoss Server and a DBMS for server-side deployment. The trick is to specify an empty folder for any of the JBoss Server version previously chosen.
My suggestion is to either:
1) provide a plain ZIP with jBPM JARs, so that anyone can download it to get just jBPM JARs and do his own "manual" deployment
2) improve the installer so that it allows the user so skip the deployment phase and just uncompress its contents
IMHO, the best solution would however be to provide both a plain ZIP and an improved installer.
By the way, I don't need any automatic deployment because I'm using jBPM embedded into another web application that uses a plain application server with Spring Framework.
--
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
17 years, 4 months