package org.jbpm.examples.cdi;
import java.util.Collection;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.jbpm.kie.services.api.Kjar;
import org.jbpm.kie.services.api.RuntimeDataService;
import org.jbpm.kie.services.impl.KModuleDeploymentUnit;
import org.jbpm.kie.services.impl.model.ProcessAssetDesc;
import org.kie.api.runtime.manager.RuntimeManager;
import org.kie.internal.deployment.DeployedUnit;
import org.kie.internal.deployment.DeploymentService;
/**
* Main entry point for the application to interact with ProcessEngine.
* It is capable of managing multiple RuntimeManagers that are built from kjar. Each kjar will
* have it's own dedicated RuntimeManager instance where each of them might be configured
* based on different strategies (singleton, per request, per process instance)
*
* @see EnvironmentProducer
*/
@ApplicationScoped
public class ProcessEngineService {
@Inject
private RuntimeDataService runtimeDataService;
@Inject
@Kjar
private DeploymentService deploymentService;
/**
* Deploys given unit into the process engine
* @param unit unit that represents kjar and runtime strategy
*/
public void deployUnit(KModuleDeploymentUnit unit) {
deploymentService.deploy(unit);
}
/**
* Undeploys given unit from the process engine
* @param unit unit that represents kjar
*/
public void undeployUnit(KModuleDeploymentUnit unit) {
deploymentService.undeploy(unit);
}
/**
* Returns all available process definitions
* @return
*/
public Collection<ProcessAssetDesc> getProcesses() {
return runtimeDataService.getProcesses();
}
/**
* Returns all process definitions for given deployment unit (kjar)
* @param deploymentId unique identifier of unit (kjar)
* @return
*/
public Collection<ProcessAssetDesc> getProcesses(String deploymentId) {
return runtimeDataService.getProcessesByDeploymentId(deploymentId);
}
/**
* Returns <code>RuntimeManager</code> instance for given deployment unit (kjar)
* @param deploymentId unique identifier of unit (kjar)
* @return null if no RuntimeManager available for given id
*/
public RuntimeManager getRuntimeManager(String deploymentId) {
DeployedUnit deployedUnit = deploymentService.getDeployedUnit(deploymentId);
if (deployedUnit == null) {
return null;
}
return deployedUnit.getRuntimeManager();
}
}