All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jbpm.runtime.manager.impl.DefaultRuntimeEnvironment Maven / Gradle / Ivy

There is a newer version: 7.74.1.Final
Show newest version
/*
 * 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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy