[Design of JBoss jBPM] - Re: process definition as a resource
by camunda
Heiko wrote :
| 1) a changed pdl file, but classes remain the same
| 2) same pdl, but classes changed
| 3) changed pdl and classes changed
|
| IMO 1) and 3) should lead to a new version of that process, i.e. demanding an explicit version increment in the pdl, whereas 2) simply associated a different resource set to with process (i think bernd called it patching/bug fixes)
|
I see the use cases a bit different:
1) Fix a process (patching/bug fixing)
a) with changed classes
b) with changed jpdl
c) or both
2) Deploy a rael new version
with changed classes
and with changed jpdl
The distinction between fix and new version cannot be based dependent on the changed artefacts but has to be made from the user.
1a is simply a redeployment on the server
1b creates a new process version of same process in database
2 creates a new process in database and adds the deployment classes.
I would like to keep process db versioning for use case 1b. If you think of long running processes being forced to release a new version (with classes and stuff as a new deployment artefact) just because one state was forgotten seems unhandy for me. And then you have to develop sophisticated mechanisms to undeploy not longer used processes. With the db versioning it just "fades out".
But maybe I am too used to the current process versioning concept already and like it too much ;-) At least I can say, that it is good for marketing to support it ;-)
@Tom: Classloading work pretty well if you correctly use scoped classloading of AS with different parallel versions if the deployer and service take care of it correctly. The deployer I wrote for jbpm 3 works productive at the customer without problems...
For the execution modes: Yeah, differentiate these and support each of them would be quite interesting!
Even if I would prefer "persistent dynamic" for most use cases, because then you have all information together in the database (good for reporting or BI as well, or? In fact BI/ETL tools normally talk to databases not to XML files in the classpath ;-)).
But on the other hand persistent process resource could be really an interesting choice for some scenarios, I have to think more about and play with it a bit... What scares me is to loose the foreign keys to the process definition. And I could imagine implementing all the nuts and bolts of it isn't quite easy. And the question is: where is the big advantage of it? But during writing, I start to like it more and more ;-)
The idea about the embedded execution modes are really very interesting, since you find these kind of customer tables quite often and it could provide a good migration strategy towards jbpm :-)
Cheers
Bernd
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4210940#4210940
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4210940
17 years, 1 month
[Design of JBoss jBPM] - deletion problem
by tom.baeyens@jboss.com
"jeff" wrote : hello, tom... i am looking forward to receive your reply...
|
| i came up with some problems again...
| i would like to run a persistent execution mode test...
| i worked quite well when deploy, start a new process instance with a process definition,
| but when i resume a persisted process instance, something i don't know what to do happened..
|
| my source code & jvm stack:
|
| public class PersistentExecutionModeTest extends EnvironmentFactoryTestCase {
|
| SessionFactory sessionFactory;
| Session session;
| Transaction transaction;
|
| public void testDeploy() { // seems ok
| // /*
| JbpmConfiguration environmentFactory = (JbpmConfiguration)getEnvironmentFactory();
| ProcessService processService = environmentFactory.get(ProcessService.class);
|
| ClientProcessDefinition processDefinition = ProcessDefinitionBuilder
| .startProcess("test")
|
| .startActivity("start", WaitState.class)
| .initial()
| .flow("end","end")
| .endActivity()
|
| .startActivity("end", AutomaticActivity.class)
| .endActivity()
|
| .endProcess();
|
| Deployment deployment = new DeploymentImpl();
| deployment.addObject("testProcesssss", processDefinition);
|
| ((ProcessServiceImpl) processService).deploy(deployment);
| // */
| }
|
| public void testStartProcessInstance() { // seems ok, 2
|
| JbpmConfiguration environmentFactory = (JbpmConfiguration) getEnvironmentFactory();
| ExecutionService executionService = environmentFactory.get(ExecutionService.class);
| Execution execution = executionService.startProcessInstanceById("test:1", "request17");
| }
|
| public void testResumeProcessInstance(){ // something wrong...
|
| JbpmConfiguration environmentFactory = (JbpmConfiguration)getEnvironmentFactory();
| ExecutionService executionService = environmentFactory.get(ExecutionService.class);
| Execution execution = executionService.signalExecutionById("test/request17", "end"); // exception occured here
|
| }
|
| }
|
| here is problems:
| Hibernate:
| /* delete org.jbpm.pvm.internal.model.ExecutionImpl */ delete
| from
| JBPM_EXECUTION
| where
| DBID_=?
| and DBVERSION_=?
| 10:36:37,578 WRN | [JDBCExceptionReporter] SQL Error: 1451, SQLState: 23000
| 10:36:37,578 SEV | [JDBCExceptionReporter] Cannot delete or update a parent row: a foreign key constraint fails (`jbpm_pvm/jbpm_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm_execution` (`DBID_`))
| ### EXCEPTION ###########################################
| 10:36:37,578 SEV | [AbstractFlushingEventListener] Could not synchronize database state with session
| org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#4]
| at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
| at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
| at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2546)
| at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2702)
| at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:77)
| 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:172)
| at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
| at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
| at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
| at org.jbpm.pvm.internal.tx.HibernateSessionResource.prepare(HibernateSessionResource.java:54)
| at org.jbpm.pvm.internal.tx.StandardTransaction.commit(StandardTransaction.java:106)
| at org.jbpm.pvm.internal.tx.StandardTransaction.complete(StandardTransaction.java:65)
| at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:61)
| at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
| at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:52)
| at org.jbpm.pvm.internal.model.ProcessInstanceEndedSynchronization.afterCompletion(ProcessInstanceEndedSynchronization.java:52)
| at org.jbpm.pvm.internal.tx.StandardSynchronization.afterCompletion(StandardSynchronization.java:41)
| at org.jbpm.pvm.internal.tx.StandardTransaction.afterCompletion(StandardTransaction.java:213)
| at org.jbpm.pvm.internal.tx.StandardTransaction.commit(StandardTransaction.java:153)
| at org.jbpm.pvm.internal.tx.StandardTransaction.complete(StandardTransaction.java:65)
| at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:61)
| at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
| at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:52)
| at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.signalExecutionById(ExecutionServiceImpl.java:97)
| at org.jbpm.pvm.executionmode.persistence.PersistentExecutionModeTest.testResumeProcessInstance(PersistentExecutionModeTest.java:81)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at junit.framework.TestCase.runTest(TestCase.java:164)
| at org.jbpm.test.BaseJbpmTestCase.runTest(BaseJbpmTestCase.java:81)
| at junit.framework.TestCase.runBare(TestCase.java:130)
| at junit.framework.TestResult$1.protect(TestResult.java:106)
| at junit.framework.TestResult.runProtected(TestResult.java:124)
| at junit.framework.TestResult.run(TestResult.java:109)
| at junit.framework.TestCase.run(TestCase.java:120)
| at junit.framework.TestSuite.runTest(TestSuite.java:230)
| at junit.framework.TestSuite.run(TestSuite.java:225)
| at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
| at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
|
| BY THE WAY,
| at this line: Execution execution = executionService.signalExecutionById("test/request17", "end");
| as referenced in the previous version manual, here should be call the method with the parameters ("test:1/request17", "end")?
| but i got exception as nothing found, and i trace the source code to DefaultIdGenerator#createId
| ....
| if (parent!=null) {
| base = parent.getId();
| } else if (processDefinition.getKey()!=null){ // processDefinition.getKey() = "test"
| base = processDefinition.getKey();
| } else {
| base = processDefinition.getId();
| }
| ....
| is there anything wrong with my process definition? or because of my wrongful use of the API?
|
|
| regards, jeff
|
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4210938#4210938
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4210938
17 years, 1 month