Package org.drools.persistence.processinstance

Source Code of org.drools.persistence.processinstance.JPASignalManager

package org.drools.persistence.processinstance;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.Query;

import org.drools.WorkingMemory;
import org.drools.command.CommandService;
import org.drools.command.runtime.process.SignalEventCommand;
import org.drools.process.instance.event.DefaultSignalManager;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.process.ProcessInstance;

public class JPASignalManager extends DefaultSignalManager {

  private CommandService commandService;

    public JPASignalManager(WorkingMemory workingMemory) {
        super(workingMemory);
    }
   
    public void setCommandService(CommandService commandService) {
      this.commandService = commandService;
    }
   
    public void signalEvent(String type,
                            Object event) {
        for ( long id : getProcessInstancesForEvent( type ) ) {
            getWorkingMemory().getProcessInstance( id );
        }
        super.signalEvent( type,
                           event );
    }

    public void signalEvent(long processInstanceId,
                            String type,
                            Object event) {
      SignalEventCommand command = new SignalEventCommand();
      command.setProcessInstanceId(processInstanceId);
      command.setEventType(type);
      command.setEvent(event);
      commandService.execute(command);
    }

    @SuppressWarnings("unchecked")
    private List<Long> getProcessInstancesForEvent(String type) {
        EntityManager em = (EntityManager) getWorkingMemory().getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
       
        Query processInstancesForEvent = em.createNamedQuery( "ProcessInstancesWaitingForEvent" );
        processInstancesForEvent.setFlushMode(FlushModeType.COMMIT);
        processInstancesForEvent.setParameter( "type",
                                               type );
        List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
        return list;
    }

}
TOP

Related Classes of org.drools.persistence.processinstance.JPASignalManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.