org.jbpm.runtime.manager.impl.DefaultRuntimeEnvironment Maven / Gradle / Ivy
/*
* 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;
import javax.naming.InitialContext;
import javax.persistence.EntityManagerFactory;
import org.jbpm.process.core.timer.GlobalSchedulerService;
import org.jbpm.process.core.timer.impl.QuartzSchedulerService;
import org.jbpm.process.core.timer.impl.ThreadPoolSchedulerService;
import org.jbpm.runtime.manager.impl.identity.UserDataServiceProvider;
import org.jbpm.runtime.manager.impl.jpa.EntityManagerFactoryManager;
import org.jbpm.runtime.manager.impl.mapper.InMemoryMapper;
import org.jbpm.runtime.manager.impl.mapper.JPAMapper;
import org.kie.api.runtime.EnvironmentName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Default implementation of the RuntimeEnvironment that aims at providing all
* common settings with a minimum need for configuration.
*
* It automatically configures the following components:
*
* - uses
DefaultRegisterableItemsFactory
to provide work item handlers and event listeners instances
* - EntityManagerFactory - if non given uses persistence unit with "org.jbpm.persistence.jpa" name
* - SchedulerService - if non given tries to discover if Quartz based scheduler shall be used by checking if
* "org.quartz.properties" system property is given, if not uses ThreadPool based scheduler with thread pool size set to 3
* - uses simple MVEL based UserGroupCallback that requires mvel files for users and groups to be present on classpath
*
*
*/
public class DefaultRuntimeEnvironment extends SimpleRuntimeEnvironment {
private static final Logger logger = LoggerFactory.getLogger(DefaultRuntimeEnvironment.class);
public DefaultRuntimeEnvironment() {
this(null, discoverSchedulerService());
}
public DefaultRuntimeEnvironment(EntityManagerFactory emf) {
this(emf, discoverSchedulerService());
}
public DefaultRuntimeEnvironment(EntityManagerFactory emf, GlobalSchedulerService globalSchedulerService) {
super(new DefaultRegisterableItemsFactory());
this.emf = emf;
this.schedulerService = globalSchedulerService;
this.usePersistence = true;
this.userGroupCallback = UserDataServiceProvider.getUserGroupCallback();
}
public DefaultRuntimeEnvironment(EntityManagerFactory emf, boolean usePersistence) {
this(emf, null);
this.usePersistence = usePersistence;
this.emf = emf;
this.userGroupCallback = UserDataServiceProvider.getUserGroupCallback();
}
public void init() {
if (usePersistence && emf == null && getEnvironmentTemplate().get(EnvironmentName.CMD_SCOPED_ENTITY_MANAGER) == null) {
emf = EntityManagerFactoryManager.get().getOrCreate("org.jbpm.persistence.jpa");
}
addToEnvironment(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
if (this.mapper == null) {
if (this.usePersistence) {
this.mapper = new JPAMapper(emf);
} else {
this.mapper = new InMemoryMapper();
}
}
}
protected static GlobalSchedulerService discoverSchedulerService() {
if (System.getProperty("org.quartz.properties") != null) {
return new QuartzSchedulerService();
} else {
// if there is ejb scheduler service available make use of it unless it's disabled
if (!"true".equalsIgnoreCase(System.getProperty("org.kie.timer.ejb.disabled"))) {
try {
Class> clazz = Class.forName("org.jbpm.services.ejb.timer.EjbSchedulerService");
// to ensure ejb timer service is actually available let's jndi look up
InitialContext.doLookup("java:module/EJBTimerScheduler");
return (GlobalSchedulerService) clazz.newInstance();
} catch (Exception e) {
logger.debug("Unable to find on initialize ejb schduler service due to {}", e.getMessage());
}
}
}
return new ThreadPoolSchedulerService(3);
}
}