hi, can anyone help me:
there is a testcase 'org.jbpm.test.activities.SubProcessTest' in module
'test-pojo' which is run in object-mode.
and so i try to write a subprocess testcase running in persistent-mode. i have been trying
but i can not make it... exception comes out:
10:37:11,250 SEV | [LazyInitializationException] could not initialize proxy - no Session
| org.hibernate.LazyInitializationException: could not initialize proxy - no Session
| at
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
| at
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
| at
org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
| at
org.jbpm.pvm.internal.model.ActivityImpl$$EnhancerByCGLIB$$fa091528.getParentActivity(<generated>)
| at
org.jbpm.pvm.internal.model.ExecutionImpl.initializeScopes(ExecutionImpl.java:210)
| at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:193)
| at
org.jbpm.pvm.internal.model.ExecutionImpl.beginSubProcessInstance(ExecutionImpl.java:882)
| at
name.galanfish.test.super_sub_process.cmd.StartSubProcessCmd.execute(StartSubProcessCmd.java:33)
| at
name.galanfish.test.super_sub_process.cmd.StartSubProcessCmd.execute(StartSubProcessCmd.java:1)
| at
org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
| at
org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:54)
| 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.beginSubProcess(ExecutionServiceImpl.java:84)
| at name.galanfish.test.super_sub_process.SubProcess.execute(SubProcess.java:36)
| at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:57)
| at
org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:587)
| at
org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:560)
| at org.jbpm.pvm.internal.model.ExecutionImpl.signal(ExecutionImpl.java:384)
| at org.jbpm.pvm.internal.cmd.SignalCmd.execute(SignalCmd.java:62)
| at org.jbpm.pvm.internal.cmd.SignalCmd.execute(SignalCmd.java:1)
| at
org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
| at
org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:54)
| 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:121)
| at
name.galanfish.test.super_sub_process.SuperSubProcessTest.testSimpleSuperSubProcess(SuperSubProcessTest.java:38)
| 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)
the source code as follow:
public class SuperSubProcessTest extends EnvironmentFactoryTestCase {
|
| private JbpmConfiguration factory;
| private ProcessServiceImpl processService;
| private ExecutionService executionService;
|
|
| @Override
| protected void setUp() throws Exception {
| super.setUp();
| factory = (JbpmConfiguration) getEnvironmentFactory();
| processService = (ProcessServiceImpl) factory.getProcessService();
| executionService = factory.getExecutionService();
| }
|
| public void testSimpleSuperSubProcess(){
| createAndDeploySimpleSuperSubProcess();
| executionService.startProcessInstanceById("super2:1",
"superrequest8");
| executionService.signalExecutionById("super2/superrequest8",
"to_one");
| }
|
| private void createAndDeploySimpleSuperSubProcess(){
| ClientProcessDefinition superProcess =
ProcessDefinitionBuilder.startProcess("super2")
| .startActivity("start", WaitState.class)
| .initial()
| .transition("one", "to_one")
| .endActivity()
|
| .startActivity("one", AutomaticActivity.class)
| .transition("sub", "to_sub")
| .endActivity()
|
| .startActivity("sub", SubProcess.class)
| .transition("end", "to_end")
| .endActivity()
|
| .startActivity("end", AutomaticActivity.class)
| .endActivity()
| .endProcess();
|
| ClientProcessDefinition subProcess =
ProcessDefinitionBuilder.startProcess("sub2")
| .startActivity("start", AutomaticActivity.class)
| .initial()
| .transition("end", "to_end")
| .endActivity()
|
| .startActivity("end", EndState.class)
| .endActivity()
| .endProcess();
|
| deployProcess(superProcess);
| deployProcess(subProcess);
| }
|
| private void deployProcess(ProcessDefinition process){
| Deployment deployment = processService.createDeployment();
| deployment.addObject("process", process);
| processService.deploy(deployment);
| }
| }
|
| public class SubProcess implements ExternalActivityBehaviour{
|
| private static final long serialVersionUID = 1L;
|
| public void signal(ActivityExecution execution, String signalName, Map<String,
Object> parameters) throws Exception {
|
| }
|
| public void execute(ActivityExecution execution) throws Exception {
| ProcessService processService = Environment.getFromCurrent(ProcessService.class);
| ClientProcessDefinition subProcess =
(ClientProcessDefinition)processService.findLatestProcessDefinitionByKey("sub2");
// hard code
|
| ExecutionService exeService = Environment.getFromCurrent(ExecutionService.class);
| // i add method 'beginSubProcess' in ExecutionService which is to execute
the command 'StartSubProcessCmd'(source code as follow)
| Execution subExecution = exeService.beginSubProcess(execution, subProcess,
"subrequest1"); // hard code
| if(!subExecution.isEnded()){
| execution.waitForSignal();
| }
| }
| }
|
| public class StartSubProcessCmd extends AbstractCommand<Execution>{
|
| private static final long serialVersionUID = 1L;
|
| private ActivityExecution parentExecution;
| private ProcessDefinition subProcess;
| private String key;
| public StartSubProcessCmd(Execution parentExecution, ProcessDefinition subProcess,
String key){
| this.parentExecution = (ActivityExecution)parentExecution;
| this.subProcess = subProcess;
| this.key = key;
| }
|
| public Execution execute(Environment environment) throws Exception {
| ClientExecution subExecution =
parentExecution.beginSubProcessInstance((ClientProcessDefinition) subProcess, key);
| return subExecution;
| }
| }
appreciate!
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4212929#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...