cancel
Showing results for 
Search instead for 
Did you mean: 

How to get An ExecutionEntity or an ActivityImpl in runtime?

ggdeveloper
Champ in-the-making
Champ in-the-making
I have inject the executionManager by spring,and it is exists,but i can't use executionManager to get an ExecutionEntity.
from a task  i can get executionId ,but when i use executionManager.findExecutionById(String executionId) it throw an exception.
My process is :start->task1->task2->end.
code is :


@Test
   public void testRollback5() throws Exception {
      Task mobjTask =
            taskService.createTaskQuery().taskId("102").singleResult();
      if (mobjTask != null) {
         System.out.println("ready rollback");
         
         List<HistoricActivityInstance> hais =
               historyService.createHistoricActivityInstanceQuery()
                     .executionId(mobjTask.getExecutionId())
                     .activityName(mobjTask.getName()).list();
         // 任务名need be 唯一
         for (HistoricActivityInstance hai : hais) {
            System.out.println("activityId:"+hai.getActivityId());
            System.out.println("activityName:"+hai.getActivityName());
         }
         System.out.println("====");
         ExecutionEntity    ee = (ExecutionEntity )executionManager.findExecutionById(mobjTask.getExecutionId());
         System.out.println(ee.getId());
         System.out.println("====");

         System.out.println("roll back completed");
      } else {
         System.out.println("task is null");
      }
      
   }
who can help me

error trace is :

java.lang.NullPointerException
   at org.activiti.engine.impl.persistence.AbstractManager.getSession(AbstractManager.java:56)
   at org.activiti.engine.impl.persistence.AbstractManager.getDbSqlSession(AbstractManager.java:52)
   at org.activiti.engine.impl.persistence.entity.ExecutionManager.findExecutionById(ExecutionManager.java:83)
   at com.bocins.its.workflow.Demo.testRollback5(Demo.java:671)
   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:597)
   at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
   at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
   at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
   at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
   at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
   at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
   at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


2 REPLIES 2

frederikherema1
Star Contributor
Star Contributor
Hi,

You can only use the ExpressionManager when you're in the context of a running process, not when just using our API. This means that you can only use it in:
- JavaDelegates in service-tasks
- Execution-listeners
- Task listeners

ggdeveloper
Champ in-the-making
Champ in-the-making
Hi,

You can only use the ExpressionManager when you're in the context of a running process, not when just using our API. This means that you can only use it in:
- JavaDelegates in service-tasks
- Execution-listeners
- Task listeners
It's good,Thank you very much.