|
@ -14,6 +14,7 @@ import com.yihu.hos.models.SystemCamelContext;
|
|
|
import com.yihu.hos.models.SystemClassMapping;
|
|
|
import com.yihu.hos.web.framework.model.Result;
|
|
|
import com.yihu.hos.web.framework.util.GridFSUtil;
|
|
|
import org.apache.camel.Processor;
|
|
|
import org.apache.camel.builder.RouteBuilder;
|
|
|
import org.apache.log4j.LogManager;
|
|
|
import org.apache.log4j.Logger;
|
|
@ -24,6 +25,8 @@ import java.io.File;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.net.MalformedURLException;
|
|
|
import java.net.URL;
|
|
|
import java.net.URLClassLoader;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
@ -54,6 +57,11 @@ public class ESBCamelService {
|
|
|
String fileName = DES.decrypt(path, DES.COMMON_PASSWORD);
|
|
|
MongoDatabase db = mongoConfig.mongoClient().getDatabase(dbName);
|
|
|
if (GridFSUtil.readFile(db, out, fileName)) {
|
|
|
File packageFile = new File(serviceFlow + StringUtil.replaceStrAll(packageName, ".", "/"));
|
|
|
ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
|
|
|
ClassLoader camelESBClassLoader = new URLClassLoader(new URL[]{packageFile.toURI().toURL()}, currentClassLoader);
|
|
|
Thread.currentThread().setContextClassLoader(camelESBClassLoader);
|
|
|
|
|
|
return Result.success("新增处理器成功!");
|
|
|
} else {
|
|
|
return Result.error("新增处理器失败!");
|
|
@ -98,10 +106,30 @@ public class ESBCamelService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 当外界组件通知一个已有的Processor路由定义被删除时,该事件被触发。
|
|
|
*/
|
|
|
public Result onProcessorDataDelete(String serviceFlow, String packageName, String className) {
|
|
|
try {
|
|
|
if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
|
|
|
|| StringUtil.isEmpty(className)) {
|
|
|
logger.error("必要的入参数据不正确,请检查!");
|
|
|
return Result.error("必要的入参数据不正确,请检查!");
|
|
|
}
|
|
|
|
|
|
SystemCamelContext.getDefaultCamelContext().stopRoute(serviceFlow);
|
|
|
SystemCamelContext.getDefaultCamelContext().removeRoute(serviceFlow);
|
|
|
this.deleteClassfile(serviceFlow, packageName, className, BrokerConstant.PROCESSOR);
|
|
|
return Result.success("删除路由成功!");
|
|
|
} catch (Exception e) {
|
|
|
return Result.error("删除路由失败!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 当外界组件通知一个新的RouteDefine路由被定义时,该事件被触发
|
|
|
*/
|
|
|
public Result onRouteDefineAdded(String serviceFlow , String packageName , String className , String path) {
|
|
|
public Result onRouteDefineAdded(String serviceFlow, String packageName, String className, String path) {
|
|
|
try {
|
|
|
if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
|
|
|
|| StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
|
|
@ -174,7 +202,7 @@ public class ESBCamelService {
|
|
|
|
|
|
SystemCamelContext.getDefaultCamelContext().stopRoute(serviceFlow);
|
|
|
SystemCamelContext.getDefaultCamelContext().removeRoute(serviceFlow);
|
|
|
this.deleteClassfile(serviceFlow, packageName, className, BrokerConstant.PROCESSOR);
|
|
|
this.deleteClassfile(serviceFlow, packageName, className, BrokerConstant.ROUTE);
|
|
|
return Result.success("删除路由成功!");
|
|
|
} catch (Exception e) {
|
|
|
return Result.error("删除路由失败!");
|
|
@ -231,17 +259,16 @@ public class ESBCamelService {
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
private FileOutputStream updateClassfile(String serviceFlow, String packageName, String className, String type) {
|
|
|
private FileOutputStream updateClassfile(String serviceFlow, String packageName, String className, String type) throws MalformedURLException {
|
|
|
// 1、============
|
|
|
Map<String, String> systemClassNameMapping = SystemClassMapping.getSystemClassNameMapping();
|
|
|
String systemClassName = systemClassNameMapping.get(serviceFlow + type + className);
|
|
|
if(StringUtil.isEmpty(systemClassName)) {
|
|
|
return null;
|
|
|
}
|
|
|
String packagePath = StringUtil.replaceStrAll(packageName, ".", "/");
|
|
|
String classPath = this.getClass().getProtectionDomain().getClassLoader().getResource("").getPath() + packagePath + "/" + className + ".class";
|
|
|
File systemClassFlowPath = new File(this.getClass().getProtectionDomain().getClassLoader().getResource("").getPath());
|
|
|
// 2、============开始写入class文件
|
|
|
FileOutputStream out = ClassFileUtil.updateClassfile(classPath);
|
|
|
FileOutputStream out = ClassFileUtil.updateClassfile(systemClassFlowPath.toURI().toURL(), packageName, className);
|
|
|
// 完成
|
|
|
logger.info("===================" + packageName + CoreConstant.DOT + className + ".class 修改过程结束");
|
|
|
return out;
|