/**
* Copyright 2013 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.overlord.dtgov.jbpm.util;
import java.util.Collection;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import org.jbpm.kie.services.api.RuntimeDataService;
import org.jbpm.kie.services.impl.KModuleDeploymentUnit;
import org.jbpm.kie.services.impl.event.DeploymentEvent;
import org.jbpm.kie.services.impl.event.Undeploy;
import org.jbpm.kie.services.impl.model.ProcessAssetDesc;
import org.jbpm.kie.services.impl.model.ProcessInstanceDesc;
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
@Sramp
private DeploymentService deploymentService;
@ApplicationScoped
@Produces
public DeploymentService getDeploymentService()
{
return deploymentService;
}
@Inject
@Undeploy
protected Event<DeploymentEvent> undeploymentEvent;
/**
* 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 available process definitions
* @return
*/
public ProcessInstanceDesc getProcessInstance(long processInstanceId) {
return runtimeDataService.getProcessInstanceById(processInstanceId);
}
/**
* Returns all available process definitions
* @return
*/
public Collection<ProcessInstanceDesc> getProcessInstances() {
return runtimeDataService.getProcessInstances();
}
/**
* 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();
}
public void closeAllRuntimeManagers() {
for (DeployedUnit deployedUnit: deploymentService.getDeployedUnits()) {
deployedUnit.getRuntimeManager().close();
undeploymentEvent.fire(new DeploymentEvent(deployedUnit.getDeploymentUnit().getIdentifier(), deployedUnit));
}
}
}