[jboss-dev-forums] [Design of JBoss jBPM] - signalling the processs with newly created token instance

maheshraj_4u do-not-reply at jboss.com
Sun Aug 6 07:20:01 EDT 2006


Hi 
i created an instance of token and trying to signal the process with the newly created token here i associated the newly created token with the process instance. here im not using the root token for signalling. so im trying to save the data in the tables.when i tried to get the root token id it gave  as 408 and the token id of the newly created token as 0. is this procedure correct. can ny body help  me out


here is the code 



import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.jbpm.JbpmConfiguration; 
import org.jbpm.JbpmContext; 
import org.jbpm.graph.exe.ProcessInstance; 
import org.jbpm.graph.exe.Token; 

public class CreateDuplicateToken { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 

JbpmConfiguration jbpmConfiguration = null; 
JbpmContext jbpmContext = null; 

try { 
jbpmConfiguration = JbpmConfiguration.parseInputStream(new FileInputStream("src/config.files/jbpm.cfg.xml")); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
jbpmContext = jbpmConfiguration.createJbpmContext(); 

System.out.println("Create Duplicate Token:"); 
System.out.print("Enter the ProcessInstance ID: "); 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
long processInstanceID = 0 ; 
try { 
processInstanceID = Long.parseLong(br.readLine()); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 


ProcessInstance processInstance = jbpmContext.loadProcessInstanceForUpdate(processInstanceID); 

Token rootToken = processInstance.getRootToken(); 

Token duplicateToken = new Token(); 
duplicateToken.setProcessInstance(procesInstance);
duplicateToken.setNode(rootToken.getNode()); 


System.out.println("Root TokenID: "+rootToken.getId()); 
System.out.println("Duplicate TokenID: "+duplicateToken.getId()); 
System.out.println("ProcessInstance of Duplicate: "+duplicateToken.getProcessInstance().getId()); 


jbpmContext.save(duplicateToken); 
duplicateToken.signal(); 
jbpmContext.save(duplicateToken); 

jbpmContext.close(); 

} 

} 




here is the exception  



org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) 
at org.jbpm.svc.Services.close(Services.java:211) 
at org.jbpm.JbpmContext.close(JbpmContext.java:141) 
at com.westpac.nzlo.tempjbpm.CreateDuplicateToken.main(CreateDuplicateToken.java:66) 
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.jbpm.graph.exe.Token 
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216) 
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108) 
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221) 
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476) 
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) 
... 3 more 
18:06:33,500 [main] ERROR Services : problem closing service 'persistence' 
org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) 
at org.jbpm.svc.Services.close(Services.java:211) 
at org.jbpm.JbpmContext.close(JbpmContext.java:141) 
at com.westpac.nzlo.tempjbpm.CreateDuplicateToken.main(CreateDuplicateToken.java:66) 
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.jbpm.graph.exe.Token 
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216) 
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108) 
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221) 
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476) 
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) 
... 3 more 
org.jbpm.JbpmException: problem closing services {persistence=org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session} 
at org.jbpm.svc.Services.close(Services.java:223) 
at org.jbpm.JbpmContext.close(JbpmContext.java:141) 
at com.westpac.nzlo.tempjbpm.CreateDuplicateToken.main(CreateDuplicateToken.java:66) 
Caused by: org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) 
at org.jbpm.svc.Services.close(Services.java:211) 
... 2 more 
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.jbpm.graph.exe.Token 
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216) 
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108) 
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221) 
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476) 
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190) 
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195) 
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) 
... 3 more 


thnx 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3963424#3963424

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3963424



More information about the jboss-dev-forums mailing list