/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* 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.jbpm.runtime.manager.impl.factory;
import javax.persistence.EntityManagerFactory;
import org.jbpm.runtime.manager.impl.SimpleRuntimeEnvironment;
import org.jbpm.runtime.manager.impl.identity.UserDataServiceProvider;
import org.jbpm.services.task.HumanTaskConfigurator;
import org.jbpm.services.task.HumanTaskServiceFactory;
import org.kie.api.runtime.manager.RuntimeEnvironment;
import org.kie.api.task.TaskService;
import org.kie.internal.runtime.manager.TaskServiceFactory;
/**
* A regular <code>TaskServiceFactory</code> implementation that is intended to be used in non CDI environments.
* This creates a new <code>TaskService</code> instance for every call to the factory.
* The <code>TaskService</code> instance will be equipped with a <code>JbpmJTATransactionManager</code>
* for transaction management. This is mandatory as it must participate in already active
* transaction if such exists.
*/
public class LocalTaskServiceFactory implements TaskServiceFactory {
private RuntimeEnvironment runtimeEnvironment;
public LocalTaskServiceFactory(RuntimeEnvironment runtimeEnvironment) {
this.runtimeEnvironment = runtimeEnvironment;
}
@Override
public TaskService newTaskService() {
// all to reuse an already given instance of task service instead of producing new one
TaskService providedTaskService = (TaskService) ((SimpleRuntimeEnvironment) runtimeEnvironment)
.getEnvironmentTemplate().get("org.kie.api.task.TaskService");
if (providedTaskService != null) {
return providedTaskService;
}
EntityManagerFactory emf = ((SimpleRuntimeEnvironment)runtimeEnvironment).getEmf();
if (emf != null) {
HumanTaskConfigurator configurator = HumanTaskServiceFactory.newTaskServiceConfigurator()
.environment(runtimeEnvironment.getEnvironment())
.entityManagerFactory(emf)
.userGroupCallback(runtimeEnvironment.getUserGroupCallback())
.userInfo(UserDataServiceProvider.getUserInfo());
TaskService internalTaskService = configurator.getTaskService();
return internalTaskService;
} else {
return null;
}
}
@Override
public void close() {
}
}