/* 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.camunda.bpm.extension.osgi.container.deployment;
import org.camunda.bpm.container.impl.deployment.StartProcessEngineStep;
import org.camunda.bpm.container.impl.jmx.services.JmxManagedProcessEngineController;
import org.camunda.bpm.container.impl.metadata.spi.ProcessEngineXml;
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.camunda.bpm.engine.impl.util.ReflectUtil;
import org.osgi.framework.BundleContext;
/**
* @author Daniel Meyer
* @author Roman Smirnov
* @author Ronny Bräunlich
*
*/
public class OSGiStartProcessEngineStep extends StartProcessEngineStep {
protected BundleContext context;
public OSGiStartProcessEngineStep(ProcessEngineXml processEngineXml, BundleContext context) {
super(processEngineXml);
this.context = context;
}
@Override
protected JmxManagedProcessEngineController createProcessEngineControllerInstance(ProcessEngineConfigurationImpl configuration) {
return new BundleClassloaderAwareProcessEngineController(configuration, context);
}
@Override
@SuppressWarnings("unchecked")
protected <T> Class<? extends T> loadClass(String className, ClassLoader customClassloader, Class<T> clazz) {
Class<? extends T> configurationClass = null;
// give process applicaiton the opportunity to provide a custom process engine configuration class
if(customClassloader != null) {
try {
configurationClass = (Class<? extends T>) customClassloader.loadClass(className);
} catch(ClassNotFoundException e) {
// ok
}
}
if(customClassloader == null || configurationClass == null) {
configurationClass = (Class<? extends T>) ReflectUtil.loadClass(className);
}
return configurationClass;
}
}