cancel
Showing results for 
Search instead for 
Did you mean: 

Exception in SingnalEvent

rvashishth
Champ in-the-making
Champ in-the-making
Hi,

I am getting following exception while using signal event.


Jun 24, 2014 3:22:26 PM org.activiti.engine.impl.interceptor.CommandContext close
SEVERE: Error while closing command context
java.lang.NullPointerException
   at org.activiti.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior.leave(ParallelMultiInstanceBehavior.java:104)
   at org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.leave(AbstractBpmnActivityBehavior.java:49)



<signal id="approvalsignal" name="approvalsignal"></signal>
  <process id="EventLoopProcess" name="My process" isExecutable="true" xmlns:drools="http://www.jboss.org/drools" drools:version="1" drools:packageName="defaultPackage" drools:adHoc="false">
    <startEvent id="startevent1" name="Start"></startEvent>
    <scriptTask id="scripttask1" name="Script Task" scriptFormat="groovy" activiti:autoStoreVariables="false">
      <script>System.out.println("script task 1");</script>
    </scriptTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="scripttask1"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow2" sourceRef="scripttask2" targetRef="endevent1"></sequenceFlow>
    <subProcess id="subprocess1" name="Sub Process">
      <startEvent id="startevent2" name="Start"></startEvent>
      <serviceTask id="servicetask2" name="Service Task" activiti:class="com.jato.activititest.HelloServiceTaskEvent">
        <multiInstanceLoopCharacteristics isSequential="false">
          <loopCardinality>3</loopCardinality>
        </multiInstanceLoopCharacteristics>
      </serviceTask>
      <sequenceFlow id="flow3" sourceRef="startevent2" targetRef="servicetask2"></sequenceFlow>
      <endEvent id="endevent3" name="End"></endEvent>
      <sequenceFlow id="flow4" sourceRef="servicetask2" targetRef="endevent3"></sequenceFlow>
    </subProcess>
    <sequenceFlow id="flow5" sourceRef="scripttask1" targetRef="subprocess1"></sequenceFlow>
    <scriptTask id="scripttask2" name="Script Task" scriptFormat="groovy" activiti:autoStoreVariables="false">
      <script>System.out.println("after subprocess");</script>
    </scriptTask>
    <sequenceFlow id="flow6" sourceRef="subprocess1" targetRef="scripttask2"></sequenceFlow>
    <boundaryEvent id="boundarysignal1" name="Signal" attachedToRef="subprocess1" cancelActivity="true">
      <signalEventDefinition signalRef="approvalsignal"></signalEventDefinition>
    </boundaryEvent>
    <scriptTask id="scripttask3" name="Script Task" scriptFormat="groovy" activiti:autoStoreVariables="false">
      <script>System.out.println("interrupted");</script>
    </scriptTask>
    <sequenceFlow id="flow7" sourceRef="boundarysignal1" targetRef="scripttask3"></sequenceFlow>
    <sequenceFlow id="flow8" sourceRef="scripttask3" targetRef="endevent1"></sequenceFlow>
  </process>


following is the service class that is creating signal event


@Override
   public void execute(DelegateExecution execution) throws Exception {
      System.out.println("executing HelloServiceTaskEvent");
      execution.setVariable("user1approved", "true");
      RuntimeService runtimeService = execution.getEngineServices().getRuntimeService();
      if(!userApproved()){
         System.out.println("creating signal");
         runtimeService.signalEventReceived("approvalsignal");
      }
      
   }


I have tried by changing multiinstance behavior to sequential as well and runtimeService.signalEventReceivedAsyc, it looks like i have missed something in signal event implementations.
My requirement is to run the service task in loop and exit that at specific condition.


Thanks,
Rahul Vashishth
2 REPLIES 2

martin_grofcik
Confirmed Champ
Confirmed Champ
Hi,

I won't answer your question, but I try to provide solution 🙂


A multi-instance activity ends when all instances are finished. However, it is possible to specify an expression that is evaluated every time one instance ends. When this expression evaluates to true, all remaining instances are destroyed and the multi-instance activity ends, continuing the process. Such an expression must be defined in the completionCondition child element.

http://www.activiti.org/userguide/#bpmnMultiInstance

Regards
Martin

rvashishth
Champ in-the-making
Champ in-the-making
Thanks,  I missed the completion condition and was looking into other side using events. Smiley Indifferent