|
@ -1,23 +1,15 @@
|
|
|
package com.yihu.hos.broker.services.camel;
|
|
|
|
|
|
import com.yihu.hos.broker.common.log.TracerFormatter;
|
|
|
import com.yihu.hos.broker.services.BrokerServerService;
|
|
|
import com.yihu.hos.broker.util.lang.DynamicClassLoader;
|
|
|
import com.yihu.hos.core.log.Logger;
|
|
|
import com.yihu.hos.core.log.LoggerFactory;
|
|
|
import org.apache.camel.CamelContext;
|
|
|
import org.apache.camel.Exchange;
|
|
|
import org.apache.camel.builder.RouteBuilder;
|
|
|
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
|
|
|
import org.apache.camel.processor.interceptor.Tracer;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
|
|
|
|
|
|
import java.net.URL;
|
|
|
import java.net.URLClassLoader;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.SynchronousQueue;
|
|
|
|
|
|
/**
|
|
@ -47,15 +39,8 @@ public class CamelStartBoot {
|
|
|
context.setTracing(true);
|
|
|
|
|
|
context.start();
|
|
|
|
|
|
List<URL> URLs = new ArrayList<>();
|
|
|
ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
|
|
|
ClassLoader camelClassLoader = new URLClassLoader(URLs.toArray(new URL[]{}), currentClassLoader);
|
|
|
Thread.currentThread().setContextClassLoader(camelClassLoader);
|
|
|
context.setApplicationContextClassLoader(currentClassLoader);
|
|
|
logger.info("Apache Camel Context 启动完成...");
|
|
|
|
|
|
|
|
|
brokerServerService.login();
|
|
|
|
|
|
//如果没有收到其它线程的加载请求,主线程将停止在这里,所以该while之后不能有其他业务逻辑
|
|
@ -63,7 +48,8 @@ public class CamelStartBoot {
|
|
|
String className;
|
|
|
while ((className = camelContextOperateQueue.take()) != null) {
|
|
|
try {
|
|
|
Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) camelClassLoader.loadClass(className);
|
|
|
DynamicClassLoader dynamicClassLoader = new DynamicClassLoader(SystemCamelContext.getResource(this).getPath());
|
|
|
Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) dynamicClassLoader.loadClass(className);
|
|
|
if (routeBuilderClass != null) {
|
|
|
RouteBuilder routeBuilder = routeBuilderClass.newInstance();
|
|
|
capableBeanFactory.autowireBean(routeBuilder);
|