package org.drools.persistence.processinstance;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.Query;
import org.drools.common.InternalKnowledgeRuntime;
import org.drools.process.instance.event.DefaultSignalManager;
import org.drools.runtime.EnvironmentName;
public class JPASignalManager extends DefaultSignalManager {
public JPASignalManager(InternalKnowledgeRuntime kruntime) {
super(kruntime);
}
public void signalEvent(String type,
Object event) {
for ( long id : getProcessInstancesForEvent( type ) ) {
getKnowledgeRuntime().getProcessInstance( id );
}
super.signalEvent( type,
event );
}
@SuppressWarnings("unchecked")
private List<Long> getProcessInstancesForEvent(String type) {
EntityManager em = (EntityManager) getKnowledgeRuntime().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;
}
}