-
1. Re: Problem with more than 1 user
kukeltje Jun 1, 2007 7:02 AM (in response to roccolocko)- Logging in with same user?
- Errors on the second server? Or just empty tasklists or errors when starting a process or .....
Please be more specific -
2. Re: Problem with more than 1 user
roccolocko Jun 1, 2007 12:21 PM (in response to roccolocko)I solve the problem (kind of).
The thing is that for some reason, in my application I have to close the context (jbpmContext.close()), differring from what they do in the jbpm.webapp example, maybe you can give me a hint in why is that.
Answering the question you post to get more details, it happens with the same user, or with different users.
And it doesn't give me any error, it just hangs.
Here is the modification I did to make it work
This is the original startProcess{ long processDefinitionId = JsfHelper.getId("processDefinitionId"); ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId); ProcessInstance processInstance = new ProcessInstance(processDefinition); TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance(); jbpmContext.save(processInstance); // Fill the task backing bean with useful information this.task.initialize(taskInstance); return "task" }
This is the startProcess modified{ JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext(); if(jbpmContext == null){ jbpmContext = JbpmConfiguration.getInstance().createJbpmContext(); } long processDefinitionId = JsfHelper.getId("processDefinitionId"); ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId); ProcessInstance processInstance = new ProcessInstance(processDefinition); TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance(); jbpmContext.save(processInstance); // Fill the task backing bean with useful information this.task.initialize(taskInstance); jbpmContext.close(); return taskInstance.getName();//This is for something on my navigation }
-
3. Re: Problem with more than 1 user
kukeltje Jun 1, 2007 12:31 PM (in response to roccolocko)Coud be that the webapp does some closing in a jsf phase. It cannot work without closing it. So.....
-
4. Re: Problem with more than 1 user
roccolocko Jun 1, 2007 1:03 PM (in response to roccolocko)Im not very familiarize with the use of filters in the web.xml, but probably it has something to do with this:
<filter-name>JbpmContextFilter</filter-name>
<filter-class>org.jbpm.web.JbpmContextFilter</filter-class>
<filter-mapping>
<filter-name>JbpmContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
In the class that the mention there (org.jbpm.web.JbpmContextFilter), in the doFilter method, at the end they use the jbpmContext.close();, which I believe is executing everytime a jsp is run, because of the mapping /*
the complete class is the following:package org.jbpm.web; import java.io.IOException; import java.io.Serializable; import java.security.Principal; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.jbpm.JbpmConfiguration; import org.jbpm.JbpmContext; public class JbpmContextFilter implements Filter, Serializable { private static final long serialVersionUID = 1L; String jbpmConfigurationResource = null; String jbpmContextName = null; boolean isAuthenticationEnabled = true; public void init(FilterConfig filterConfig) throws ServletException { // get the jbpm configuration resource this.jbpmConfigurationResource = filterConfig.getInitParameter("jbpm.configuration.resource"); // get the jbpm context to be used from the jbpm configuration this.jbpmContextName = filterConfig.getInitParameter("jbpm.context.name"); if (jbpmContextName==null) { jbpmContextName = JbpmContext.DEFAULT_JBPM_CONTEXT_NAME; } // see if authentication is turned off String isAuthenticationEnabledText = filterConfig.getInitParameter("authentication"); if ( (isAuthenticationEnabledText!=null) && ("disabled".equalsIgnoreCase(isAuthenticationEnabledText)) ) { isAuthenticationEnabled = false; } } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String actorId = null; // see if we can get the authenticated swimlaneActorId if (servletRequest instanceof HttpServletRequest) { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; Principal userPrincipal = httpServletRequest.getUserPrincipal(); if (userPrincipal != null) { actorId = userPrincipal.getName(); } } JbpmContext jbpmContext = getJbpmConfiguration().createJbpmContext(jbpmContextName); try { if (isAuthenticationEnabled) { jbpmContext.setActorId(actorId); } filterChain.doFilter(servletRequest, servletResponse); } finally { jbpmContext.close(); } } protected JbpmConfiguration getJbpmConfiguration() { return JbpmConfiguration.getInstance(jbpmConfigurationResource); } public void destroy() { } }
Could I be right? -