[jBPM] - How to avoid StaleObjectExceptions on asynchronous process
by Francisco Osorio
Francisco Osorio [https://community.jboss.org/people/fosoriog] created the discussion
"How to avoid StaleObjectExceptions on asynchronous process"
To view the discussion, visit: https://community.jboss.org/message/756581#756581
--------------------------------------------------------------
I have a process that uses an asyncrhonous work item handler to execute several branches in parallel. I'm using JPAWorkingMemoryDbLogger to persist the log to the database.The issue is that the commit for the completeWorkItem invocation fails with StaleObjectException on those threads.
It seems the completeWorkItem invocations are attempting to update the org.drools.persistence.info.SessionInfo entity, and it fails because a optimistick lock exception. (That entity was modified first when the session.startProcessInstance commited to the database).
Here is the exception:
2012-08-28 15:13:20,962 [Thread-6] DEBUG (SQLStatementLogger.java:111) - update SessionInfo set lastModificationDate=?, rulesByteArray=?, startDate=?, OPTLOCK=? where id=? and OPTLOCK=?
org.hibernate.StaleStateException: Unexpected row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkNonBatched(Expectations.java:102)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:67)
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1774)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2425)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2325)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2625)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at com.mypackage.workflow.impl.jbpm.runtime.workitemhandlers.WebServiceWorkItemHandler$1.run(WebServiceWorkItemHandler.java:178)
at java.lang.Thread.run(Thread.java:662)
2012-08-28 16:16:21,779 [Thread-4] ERROR (AbstractFlushingEventListener.java:324) - Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.drools.persistence.info.SessionInfo#281]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1782)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2425)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2325)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2625)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at com.mypackage.workflow.impl.jbpm.runtime.workitemhandlers.WebServiceWorkItemHandler$1.run(WebServiceWorkItemHandler.java:178)
at java.lang.Thread.run(Thread.java:662)
I've seen this kind of issue reported in other discussions in the forum, but at the moment I don't think an answer has been given. It seems to be an issue in the jbpm persistence engine, but I might be mistaken and I might be doing something wrong.
So, how could I avoid these exceptions?
Thanks
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/756581#756581]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
13 years, 7 months
[Beginner's Corner] - @Named not working ??
by Liberino Covelli
Liberino Covelli [https://community.jboss.org/people/rino.covelli] created the discussion
"@Named not working ??"
To view the discussion, visit: https://community.jboss.org/message/756545#756545
--------------------------------------------------------------
Dear Friend , I'm trying to save my first object but not working
This is my Bean
package manageUser;
import javax.ejb.EJB;
import javax.enterprise.inject.Alternative;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import exampleInterface.ManagedPrivato;
import exampleQualifiers.Informal;
@SessionScoped
@Named
public class UserBean {
private String name;
private String surname;
@Inject @Alternative
ManagedPrivato managedPrivato;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void saveUser(){
managedPrivato.savePrivato(name,surname);
System.out.println("I am saving a user "+name+" "+surname);
//return "sayHello";
}
}
This is my JSF page
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<h:outputStylesheet library="css" name="default.css"/>
<title>Guess Number Facelets Application</title>
</h:head>
<h:body>
<h:form id="registrazione">
<h2>
Registrazione Privato prova db
</h2>
<p>
<h:inputText id="name" title="Insert a Name" value="#{userBean.name}"></h:inputText><br/><br/>
<h:inputText id="surname" title="Insert a Surname" value="#{userBean.surname}"></h:inputText><br/><br/>
<h:commandButton id="submit" action="#{userBean.saveUser}" value="Submit" />
</p>
</h:form>
</h:body>
</html>
but on standard output i printed : I am saving a user null null
I can not bind the JSF page with the properties of User Bean
where am I wrong?
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/756545#756545]
Start a new discussion in Beginner's Corner at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
13 years, 7 months