Gestion du classpathloader en settant le Thread.currentThread().setContextClassLoader(classLoader) dans les droolsRoute
This commit is contained in:
parent
fb0b9fde30
commit
0e85f4853f
1 changed files with 42 additions and 23 deletions
|
|
@ -39,7 +39,10 @@ import javax.annotation.PostConstruct;
|
|||
import javax.inject.Inject;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@Service("kieService")
|
||||
public class KieServiceCommon {
|
||||
|
|
@ -80,25 +83,40 @@ public class KieServiceCommon {
|
|||
this.marshallerHelper = new MarshallerHelper(this.server.getServerRegistry());
|
||||
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void initCamelBusinessRoutes() {
|
||||
try {
|
||||
String serverName = System.getProperty("org.kie.server.id");
|
||||
List<ContainerPojoPersist> containers = containerRepository.findByServerName(serverName);
|
||||
for (ContainerPojoPersist container : containers) {
|
||||
ClassLoader localClassLoader = null;
|
||||
String containerId = container.getContainerId();
|
||||
KieContainerInstanceImpl kieContainerInstance = registry.getContainer(containerId);
|
||||
if (kieContainerInstance != null) {
|
||||
try {
|
||||
localClassLoader = Thread.currentThread()
|
||||
.getContextClassLoader();
|
||||
} catch (ClassCastException e) {
|
||||
logger.info("GenericResource.runSession", e);
|
||||
}
|
||||
try {
|
||||
Set<Class<?>> classes = kieContainerInstance.getExtraClasses();
|
||||
String className = container.getClassName();
|
||||
Class foundClass = this.getClassFromName(classes, className);
|
||||
ClassLoader classLoader = foundClass.getClassLoader();
|
||||
Class<?> theClass = classLoader.loadClass(className);
|
||||
camelContext.setApplicationContextClassLoader(classLoader);
|
||||
Thread.currentThread().setContextClassLoader(classLoader);
|
||||
String projectName = container.getProjectName();
|
||||
String processId = container.getProcessID();
|
||||
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId);
|
||||
camelContext.addRoutes(droolsRouter);
|
||||
} finally {
|
||||
if (localClassLoader != null) {
|
||||
Thread.currentThread().setContextClassLoader(localClassLoader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
@ -156,6 +174,7 @@ public class KieServiceCommon {
|
|||
if (foundClass != null) {
|
||||
ClassLoader classLoader = foundClass.getClassLoader();
|
||||
Class<?> theClass = classLoader.loadClass(className);
|
||||
Thread.currentThread().setContextClassLoader(classLoader);
|
||||
camelContext.setApplicationContextClassLoader(classLoader);
|
||||
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, id, kci, processID);
|
||||
camelContext.addRoutes(droolsRouter);
|
||||
|
|
|
|||
Loading…
Add table
editor.link_modal.header
Reference in a new issue