Browse Source

org.json改为jackson.json:冲突解决

demon 8 years ago
parent
commit
879e60ff8b
40 changed files with 846 additions and 494 deletions
  1. 18 10
      Hos-Framework/src/main/java/com/yihu/ehr/framework/util/operator/ClassFileUtil.java
  2. 4 4
      hos-admin/src/main/java/com/yihu/hos/crawler/model/config/SysConfig.java
  3. 7 7
      hos-admin/src/main/java/com/yihu/hos/crawler/origin/FileSystemOrigin.java
  4. 7 7
      hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerFlowManager.java
  5. 3 3
      hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerManager.java
  6. 5 5
      hos-admin/src/main/java/com/yihu/hos/crawler/service/DataCollectDispatcher.java
  7. 5 5
      hos-admin/src/main/java/com/yihu/hos/crawler/service/EsbHttp.java
  8. 5 5
      hos-admin/src/main/java/com/yihu/hos/crawler/service/OldPatientCDAUpload.java
  9. 5 5
      hos-admin/src/main/java/com/yihu/hos/crawler/service/PatientCDAUpload.java
  10. 4 4
      hos-admin/src/main/java/com/yihu/hos/service/ArchiveUploadJob.java
  11. 4 4
      hos-admin/src/main/java/com/yihu/hos/service/CrawlerFlowUploadJob.java
  12. 3 1
      hos-arbiter/src/main/java/com/yihu/hos/HosArbiterApplication.java
  13. 3 5
      hos-arbiter/src/main/resources/application.properties
  14. 61 11
      hos-broker/pom.xml
  15. 3 10
      hos-broker/src/main/java/com/yihu/hos/HosBrokerApplication.java
  16. 3 3
      hos-broker/src/main/java/com/yihu/hos/camelrouter/BrokerServerRouter.java
  17. 3 2
      hos-broker/src/main/java/com/yihu/hos/camelrouter/BusinessLogRouter.java
  18. 70 0
      hos-broker/src/main/java/com/yihu/hos/common/classLoader/DynamicClassLoader.java
  19. 1 1
      hos-broker/src/main/java/com/yihu/hos/configuration/ActivemqConfiguration.java
  20. 1 1
      hos-broker/src/main/java/com/yihu/hos/configuration/ApplicationConfiguration.java
  21. 1 1
      hos-broker/src/main/java/com/yihu/hos/configuration/ArbiterConfiguration.java
  22. 13 0
      hos-broker/src/main/java/com/yihu/hos/common/constants/Constant.java
  23. 59 0
      hos-broker/src/main/java/com/yihu/hos/common/dao/BrokerDao.java
  24. 129 0
      hos-broker/src/main/java/com/yihu/hos/common/listener/ApplicationStartListener.java
  25. 1 1
      hos-broker/src/main/java/com/yihu/hos/listener/HosServiceListener.java
  26. 8 2
      hos-broker/src/main/java/com/yihu/hos/controllers/ESBCamelController.java
  27. 0 23
      hos-broker/src/main/java/com/yihu/hos/dao/BrokerDao.java
  28. 0 173
      hos-broker/src/main/java/com/yihu/hos/listener/ApplicationStartListener.java
  29. 0 16
      hos-broker/src/main/java/com/yihu/hos/models/CamelContextQueue.java
  30. 17 0
      hos-broker/src/main/java/com/yihu/hos/models/SystemCamelContext.java
  31. 17 0
      hos-broker/src/main/java/com/yihu/hos/models/SystemClassMapping.java
  32. 0 18
      hos-broker/src/main/java/com/yihu/hos/models/SystemPathMapping.java
  33. 72 0
      hos-broker/src/main/java/com/yihu/hos/models/SystemServiceFlow.java
  34. 61 0
      hos-broker/src/main/java/com/yihu/hos/models/SystemServiceFlowClass.java
  35. 2 2
      hos-broker/src/main/java/com/yihu/hos/services/BrokerServerService.java
  36. 116 84
      hos-broker/src/main/java/com/yihu/hos/services/ESBCamelService.java
  37. 1 0
      hos-broker/src/test/java/com/yihu/hos/HosBrokerApplicationTests.java
  38. 87 44
      hos-core-dependencies/pom.xml
  39. 1 1
      hos-core/pom.xml
  40. 46 36
      hos-web-framework-dependencies/pom.xml

+ 18 - 10
Hos-Framework/src/main/java/com/yihu/ehr/framework/util/operator/ClassFileUtil.java

@ -1,7 +1,8 @@
package com.yihu.ehr.framework.util.operator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
@ -17,25 +18,34 @@ public class ClassFileUtil {
    }
    private static Logger logger = LogManager.getLogger();
    private static Logger logger = LoggerFactory.getLogger(ClassFileUtil.class);
    /**
     * 通过这个工具方法,可以进行class文件的创建
     * @param systemRootURL 本次进行系统创建的system业务系统存储class文件的根目录
     * @param systemFlowURL 本次进行系统创建的system业务系统存储class文件的根目录
     * @param packageName class文件的包信息
     * @param className class文件的类名信息
     * @param path class文件的路径
     */
    public static void createClassfile(URL systemRootURL , String packageName, String className, String path) {
    public static void createClassfile(URL systemFlowURL, String packageName, String className, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File systemFlowFile = new File(systemFlowURL.getPath());
            if (!systemFlowFile.exists()) {
                systemFlowFile.mkdirs();
            }
            File packageFile = new File(systemFlowURL.getPath() + "/" + packageName);
            if (!packageFile.exists()) {
                packageFile.mkdirs();
            }
            String classPath = packageFile + "/" + className + ".class";
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                return;
            } else {
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(classPath);
            int n = 0;// 每次读取的字节长度
            byte[] bb = new byte[1024];// 存储每次读取的内容
@ -50,11 +60,10 @@ public class ClassFileUtil {
        }
    }
    public static void updateClassfile(URL systemRootURL , String packageName, String className, String path) {
    public static void updateClassfile(String classPath, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
@ -75,10 +84,9 @@ public class ClassFileUtil {
        }
    }
    public static void deleteClassfile(URL systemRootURL , String packageName, String className) {
    public static void deleteClassfile(String classPath) {
        // 开始输出文件内容
        try {
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();

+ 4 - 4
hos-admin/src/main/java/com/yihu/hos/crawler/model/config/SysConfig.java

@ -1,10 +1,10 @@
package com.yihu.hos.crawler.model.config;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.model.patient.PatientIdentity;
import com.yihu.hos.crawler.model.patient.PatientIndex;
import com.yihu.hos.core.datatype.StringUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
@ -17,7 +17,7 @@ import java.util.Map;
public class SysConfig {
    private static Logger logger = LogManager.getLogger(SysConfig.class);
    private static Logger logger = LoggerFactory.getLogger(SysConfig.class);
    public static final String HOS_RESOURCES_CONFIG = "/config/sys.config.xml";
    private static volatile SysConfig instance = null;
    private HashMap<String, PatientIdentity> patientIdentityHashMap;

+ 7 - 7
hos-admin/src/main/java/com/yihu/hos/crawler/origin/FileSystemOrigin.java

@ -5,20 +5,20 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.common.Services;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.file.FtpFileUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.format.AdapterScheme;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.transform.LogicValues;
import com.yihu.hos.crawler.service.EsbHttp;
import com.yihu.hos.core.file.FtpFileUtil;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import com.yihu.hos.system.model.SystemDatasource;
import com.yihu.hos.system.model.SystemOrganization;
import com.yihu.hos.system.service.OrganizationManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import java.io.IOException;
import java.sql.SQLException;
@ -36,7 +36,7 @@ import java.util.Map;
 */
public class FileSystemOrigin implements IDataOrigin {
    private static Logger logger = LogManager.getLogger(FileSystemOrigin.class);
    private static Logger logger = LoggerFactory.getLogger(FileSystemOrigin.class);
    public static String dirHear = "/home/test/patient/";        //病人数据文件根目录
    public static String fileType = "/image/";                    //采集的文件类型文件夹

+ 7 - 7
hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerFlowManager.java

@ -2,6 +2,10 @@ package com.yihu.hos.crawler.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.dao.CrawlerDatasetDao;
import com.yihu.hos.crawler.dao.CrawlerFlowDao;
import com.yihu.hos.crawler.dao.CrawlerFlowHeadDao;
@ -11,24 +15,20 @@ import com.yihu.hos.crawler.model.flow.CrawlerDataSetModel;
import com.yihu.hos.crawler.model.flow.CrawlerFlowHeadModel;
import com.yihu.hos.crawler.model.flow.CrawlerFlowModel;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.web.framework.model.DictItem;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import com.yihu.hos.standard.model.adapter.AdapterDatasetModel;
import com.yihu.hos.standard.model.adapter.AdapterDictEntryModel;
import com.yihu.hos.standard.model.adapter.AdapterSchemeVersionModel;
import com.yihu.hos.standard.service.adapter.AdapterDatasetService;
import com.yihu.hos.standard.service.adapter.AdapterSchemeVersionService;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.yihu.hos.web.framework.model.DictItem;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import java.util.*;
public class CrawlerFlowManager {
    private static Logger logger = LogManager.getLogger(CrawlerFlowManager.class);
    private static Logger logger = LoggerFactory.getLogger(CrawlerFlowManager.class);
    private static DataCollectDispatcher dispatch = DataCollectDispatcher.getInstance();
    private static SysConfig sysConfig = SysConfig.getInstance();

+ 3 - 3
hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerManager.java

@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
@ -15,8 +17,6 @@ import com.yihu.hos.standard.service.adapter.AdapterSchemeVersionService;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import com.yihu.hos.web.framework.model.DictItem;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.HashMap;
@ -25,7 +25,7 @@ import java.util.Map;
public class CrawlerManager {
    private static Logger logger = LogManager.getLogger(CrawlerManager.class);
    private static Logger logger = LoggerFactory.getLogger(CrawlerManager.class);
    private static DataCollectDispatcher dispatch = DataCollectDispatcher.getInstance();
    private static SysConfig sysConfig=SysConfig.getInstance();

+ 5 - 5
hos-admin/src/main/java/com/yihu/hos/crawler/service/DataCollectDispatcher.java

@ -4,10 +4,11 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.web.framework.constrant.SqlConstants;
import com.yihu.hos.core.file.FileUtil;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.file.FileUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.format.DataSetTransformer;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.adapter.AdapterMetaData;
@ -17,10 +18,9 @@ import com.yihu.hos.crawler.model.patient.PatientIdentity;
import com.yihu.hos.crawler.model.transform.EhrCondition;
import com.yihu.hos.crawler.model.transform.LogicValues;
import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
import com.yihu.hos.web.framework.constrant.SqlConstants;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.text.SimpleDateFormat;
@ -30,7 +30,7 @@ import java.util.*;
public class DataCollectDispatcher {
    private static DataCollectDispatcher ourInstance = new DataCollectDispatcher();
    private static Logger logger = LogManager.getLogger(DataCollectDispatcher.class);
    private static Logger logger = LoggerFactory.getLogger(DataCollectDispatcher.class);
    private String token;
    private DataCollectDispatcher() {
    }

+ 5 - 5
hos-admin/src/main/java/com/yihu/hos/crawler/service/EsbHttp.java

@ -3,21 +3,21 @@ package com.yihu.hos.crawler.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.web.framework.constrant.SqlConstants;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.encrypt.MD5;
import com.yihu.hos.core.httpclient.HttpClientUtil;
import com.yihu.hos.core.httpclient.HttpHelper;
import com.yihu.hos.core.httpclient.HttpResponse;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.transform.EhrCondition;
import com.yihu.hos.web.framework.constrant.SqlConstants;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONObject;
import sun.misc.BASE64Encoder;
@ -29,7 +29,7 @@ import java.util.*;
 */
public class EsbHttp {
    private static Logger logger = LogManager.getLogger(EsbHttp.class);
    private static Logger logger = LoggerFactory.getLogger(EsbHttp.class);
    /***************************** 用户接口 *********************************************/
    /**

+ 5 - 5
hos-admin/src/main/java/com/yihu/hos/crawler/service/OldPatientCDAUpload.java

@ -2,18 +2,18 @@ package com.yihu.hos.crawler.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.core.compress.Zipper;
import com.yihu.hos.core.encrypt.MD5;
import com.yihu.hos.core.encrypt.RSA;
import com.yihu.hos.core.file.FileUtil;
import com.yihu.hos.core.httpclient.HttpHelper;
import com.yihu.hos.core.httpclient.HttpResponse;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.security.Key;
@ -28,7 +28,7 @@ import java.util.*;
 */
public class OldPatientCDAUpload {
    private static Logger logger = LogManager.getLogger(OldPatientCDAUpload.class);
    private static Logger logger = LoggerFactory.getLogger(OldPatientCDAUpload.class);
    public static String uploadMethod;

+ 5 - 5
hos-admin/src/main/java/com/yihu/hos/crawler/service/PatientCDAUpload.java

@ -1,12 +1,12 @@
package com.yihu.hos.crawler.service;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.core.compress.Zipper;
import com.yihu.hos.core.encrypt.RSA;
import com.yihu.hos.core.file.FileUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import java.io.File;
import java.security.Key;
@ -21,7 +21,7 @@ import java.util.UUID;
 */
public class PatientCDAUpload {
    private static Logger logger = LogManager.getLogger(PatientCDAUpload.class);
    private static Logger logger = LoggerFactory.getLogger(PatientCDAUpload.class);
    public static String uploadMethod;

+ 4 - 4
hos-admin/src/main/java/com/yihu/hos/service/ArchiveUploadJob.java

@ -1,14 +1,14 @@
package com.yihu.hos.service;
import com.yihu.hos.common.Services;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.service.CrawlerManager;
import com.yihu.hos.datacollect.model.RsJobConfig;
import com.yihu.hos.datacollect.service.intf.IDatacollectManager;
import com.yihu.hos.web.framework.model.DataGridResult;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Date;
import java.util.HashMap;
@ -20,7 +20,7 @@ import java.util.UUID;
 */
public class ArchiveUploadJob implements IBaseJob {
    private static Logger logger = LogManager.getLogger(ArchiveUploadJob.class);
    private static Logger logger = LoggerFactory.getLogger(ArchiveUploadJob.class);
    @Override
    public void execute(String jobId) throws Exception{

+ 4 - 4
hos-admin/src/main/java/com/yihu/hos/service/CrawlerFlowUploadJob.java

@ -1,14 +1,14 @@
package com.yihu.hos.service;
import com.yihu.hos.common.Services;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.crawler.service.CrawlerFlowManager;
import com.yihu.hos.datacollect.model.RsJobConfig;
import com.yihu.hos.datacollect.service.intf.IDatacollectManager;
import com.yihu.hos.web.framework.model.DataGridResult;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Date;
import java.util.HashMap;
@ -21,7 +21,7 @@ import java.util.UUID;
 * Created by chenyingjie on 16/7/14.
 */
public class CrawlerFlowUploadJob implements IBaseJob {
    private static Logger logger = LogManager.getLogger(CrawlerFlowUploadJob.class);
    private static Logger logger = LoggerFactory.getLogger(CrawlerFlowUploadJob.class);
    @Override
    public void execute(String jobId) throws Exception {

+ 3 - 1
hos-arbiter/src/main/java/com/yihu/hos/HosArbiterApplication.java

@ -3,9 +3,11 @@ package com.yihu.hos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@SpringBootApplication
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class HosArbiterApplication implements CommandLineRunner {
	public static void main(String[] args) {

+ 3 - 5
hos-arbiter/src/main/resources/application.properties

@ -4,14 +4,12 @@ server.port=10135
#spring.data.mongodb.port=27017
#spring.data.mongodb.username=admin
#spring.data.mongodb.password=admin
spring.data.mongodb.host=172.19.103.86
spring.data.mongodb.host=192.168.1.220
spring.data.mongodb.port=27017
spring.data.mongodb.username=esb
spring.data.mongodb.password=esb
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin
spring.data.mongodb.authenticationDatabase=admin
spring.data.mongodb.database=configuration
spring.activemq.broker-url=tcp://172.19.103.86:61616
spring.activemq.user=admin
spring.activemq.password=admin

+ 61 - 11
hos-broker/pom.xml

@ -1,21 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.yihu.hos</groupId>
	<artifactId>hos-broker</artifactId>
	<version>1.1.1-SNAPSHOT</version>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>hos-broker</name>
	<description>ESB服务运行模块</description>
	<parent>
		<groupId>com.yihu.hos</groupId>
		<artifactId>hos-web-framework-dependencies</artifactId>
		<version>1.1.1-SNAPSHOT</version>
		<relativePath>../hos-web-framework-dependencies</relativePath> <!-- lookup parent from repository -->
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
@ -55,18 +55,68 @@
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-spring-boot</artifactId>
			<version>2.17.1</version> <!-- use the same version as your Camel core version -->
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-http</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-cxf</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-quartz</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-quartz2</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-xmljson</artifactId>
			<version>2.17.1</version>
			<!-- Use the same version as camel-core, but remember that this component is only available from 2.10 onwards -->
		</dependency>
		<dependency>
			<groupId>xom</groupId>
			<artifactId>xom</artifactId>
			<version>1.2.5</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-stream</artifactId>
			<version>2.17.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-http4</artifactId>
			<version>2.17.1</version> <!-- use the same version as your Camel core version -->
		</dependency>
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-camel</artifactId>
			<version>5.13.2</version>
		</dependency>
		<!-- test -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--<dependency>-->
			<!--<groupId>org.apache.camel</groupId>-->
			<!--<artifactId>camel-test</artifactId>-->
			<!--<scope>test</scope>-->
		<!--</dependency>-->
		<dependency>
			<groupId>com.yihu.hos.resource</groupId>
			<artifactId>Hos-Framework</artifactId>

+ 3 - 10
hos-broker/src/main/java/com/yihu/hos/HosBrokerApplication.java

@ -1,23 +1,16 @@
package com.yihu.hos;
import com.yihu.hos.listener.ApplicationStartListener;
import com.yihu.hos.common.listener.ApplicationStartListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class HosBrokerApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(HosBrokerApplication.class);
    }
public class HosBrokerApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(HosBrokerApplication.class);
        app.run(args);
        app.addListeners(new ApplicationStartListener());
        app.run(args);
    }
}

+ 3 - 3
hos-broker/src/main/java/com/yihu/hos/camelrouter/BrokerServerRouter.java

@ -1,4 +1,4 @@
package com.yihu.hos.camelrouter;
package com.yihu.hos.common.camelrouter;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
public class BrokerServerRouter extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("timer:brokerServerOnline?period={{timer.period}}")
                .to("bean:brokerServerService?method=brokerServerOnline");
//        from("timer:brokerServerOnline?period={{timer.period}}")
//                .to("bean:brokerServerService?method=brokerServerOnline");
    }
}

+ 3 - 2
hos-broker/src/main/java/com/yihu/hos/camelrouter/BusinessLogRouter.java

@ -1,6 +1,6 @@
package com.yihu.hos.camelrouter;
package com.yihu.hos.common.camelrouter;
import com.yihu.hos.configuration.ActivemqConfiguration;
import com.yihu.hos.common.configuration.ActivemqConfiguration;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * @created Airhead 2016/8/8.
 */

+ 70 - 0
hos-broker/src/main/java/com/yihu/hos/common/classLoader/DynamicClassLoader.java

@ -0,0 +1,70 @@
package com.yihu.hos.common.classLoader;
import com.yihu.hos.common.constants.Constant;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class DynamicClassLoader extends ClassLoader {
    public DynamicClassLoader(ClassLoader parent) {
        super(parent);
    }
    @SuppressWarnings("unchecked")
    public Class loadClass(String classPath, String className)
            throws ClassNotFoundException {
        try {
            className = className + Constant.DOT + Constant.CLASS;
            String url = classPathParser(classPath)
                    + classNameParser(className);
            URL myUrl = new URL(url);
            URLConnection connection = myUrl.openConnection();
            InputStream input = connection.getInputStream();
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            int data = input.read();
            while (data != -1) {
                buffer.write(data);
                data = input.read();
            }
            input.close();
            byte[] classData = buffer.toByteArray();
            return defineClass(noSuffix(className), classData, 0,
                    classData.length);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    private String pathParser(String path) {
        return path.replaceAll("\\\\", "/");
    }
    private String classPathParser(String path) {
        String classPath = pathParser(path);
        if (!classPath.startsWith("file:")) {
            classPath = "file:" + classPath;
        }
        if (!classPath.endsWith("/")) {
            classPath = classPath + "/";
        }
        return classPath;
    }
    private String classNameParser(String className) {
        return className.substring(0, className.lastIndexOf(".")).replaceAll(
                "\\.", "/")
                + className.substring(className.lastIndexOf("."));
    }
    private String noSuffix(String className) {
        return className.substring(0, className.lastIndexOf("."));
    }
}

+ 1 - 1
hos-broker/src/main/java/com/yihu/hos/configuration/ActivemqConfiguration.java

@ -1,4 +1,4 @@
package com.yihu.hos.configuration;
package com.yihu.hos.common.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

+ 1 - 1
hos-broker/src/main/java/com/yihu/hos/configuration/ApplicationConfiguration.java

@ -1,4 +1,4 @@
package com.yihu.hos.configuration;
package com.yihu.hos.common.configuration;
import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
import org.springframework.context.ApplicationListener;

+ 1 - 1
hos-broker/src/main/java/com/yihu/hos/configuration/ArbiterConfiguration.java

@ -1,4 +1,4 @@
package com.yihu.hos.configuration;
package com.yihu.hos.common.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

+ 13 - 0
hos-broker/src/main/java/com/yihu/hos/common/constants/Constant.java

@ -0,0 +1,13 @@
package com.yihu.hos.common.constants;
/**
 * Created by Administrator on 2016/4/13.
 */
public class Constant {
    public static String CLASS = "class";
    public static String DOT = ".";
    public static String EMPTY = "";
    public static String ROUTE = "route";
    public static String PROCESSOR = "processor";
}

+ 59 - 0
hos-broker/src/main/java/com/yihu/hos/common/dao/BrokerDao.java

@ -0,0 +1,59 @@
package com.yihu.hos.common.dao;
import com.yihu.hos.models.SystemServiceFlow;
import com.yihu.hos.models.SystemServiceFlowClass;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.*;
@Repository("BrokerDao")
public class BrokerDao {
    public static final String BEAN_ID = "BrokerDao";
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<SystemServiceFlow> getSystemServiceFlowList() throws Exception {
        List<SystemServiceFlow> systemServiceFlowList = new ArrayList<SystemServiceFlow>();;
        String sql = "select * from system_service_flow";
        List list = jdbcTemplate.queryForList(sql);
        Iterator iterator = list.iterator();
        SystemServiceFlow systemServiceFlow = null;
        while (iterator.hasNext()) {
            Map map = (Map) iterator.next();
            systemServiceFlow = new SystemServiceFlow();
            systemServiceFlow.setId((Integer) map.get("id"));
            systemServiceFlow.setCode((String) map.get("code"));
            systemServiceFlow.setName((String) map.get("name"));
            systemServiceFlow.setPath((String) map.get("path"));
            systemServiceFlow.setChart((String) map.get("chart"));
            systemServiceFlow.setValid((Integer) map.get("valid"));
            systemServiceFlow.setCreateDate((Date) map.get("create_date"));
            systemServiceFlowList.add(systemServiceFlow);
        }
        return systemServiceFlowList;
    }
    public List<SystemServiceFlowClass> getSystemServiceFlowClassList() throws Exception {
        List<SystemServiceFlowClass> systemServiceFlowClassList = new ArrayList<SystemServiceFlowClass>();;
        String sql = "select * from system_service_flow_class";
        List list = jdbcTemplate.queryForList(sql);
        Iterator iterator = list.iterator();
        SystemServiceFlowClass systemServiceFlowClass = null;
        while (iterator.hasNext()) {
            Map map = (Map) iterator.next();
            systemServiceFlowClass = new SystemServiceFlowClass();
            systemServiceFlowClass.setId((Integer) map.get("id"));
            systemServiceFlowClass.setClassName((String) map.get("class_name"));
            systemServiceFlowClass.setPackageName((String) map.get("package_name"));
            systemServiceFlowClass.setClassPath((String) map.get("class_path"));
            systemServiceFlowClass.setFlowId((Integer) map.get("flow_id"));
            systemServiceFlowClass.setType((String) map.get("type"));
            systemServiceFlowClassList.add(systemServiceFlowClass);
        }
        return systemServiceFlowClassList;
    }
}

+ 129 - 0
hos-broker/src/main/java/com/yihu/hos/common/listener/ApplicationStartListener.java

@ -0,0 +1,129 @@
package com.yihu.hos.common.listener;
import com.yihu.ehr.framework.util.operator.ClassFileUtil;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.hos.common.constants.Constant;
import com.yihu.hos.common.dao.BrokerDao;
import com.yihu.hos.models.SystemCamelContext;
import com.yihu.hos.models.SystemClassMapping;
import com.yihu.hos.models.SystemServiceFlow;
import com.yihu.hos.models.SystemServiceFlowClass;
import org.apache.camel.builder.RouteBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ApplicationStartListener implements ApplicationListener<ContextRefreshedEvent> {
    private static Logger logger = LogManager.getLogger();
    /**
     * 这是一个固定的存储class文件的根路径
     * 正式系统中,这个值可来自于系统的配置文件
     */
    private void camelRouteStart(ContextRefreshedEvent contextRefreshedEvent) throws Exception {
        //从数据库获取所有路由对应的class路径以便动态加载
        BrokerDao brokerDao = (BrokerDao) contextRefreshedEvent.getApplicationContext().getBean(BrokerDao.BEAN_ID);
        List<SystemServiceFlow> systemServiceFlowList = brokerDao.getSystemServiceFlowList();
        List<SystemServiceFlowClass> systemServiceFlowClassList = brokerDao.getSystemServiceFlowClassList();
        //对所有route与processor进行分类存储
        Map<String, List<SystemServiceFlowClass>> systemServiceFlowClassGroupMap = new HashMap<>();
        for (SystemServiceFlowClass systemServiceFlowClass : systemServiceFlowClassList) {
            Integer flowId = systemServiceFlowClass.getFlowId();
            String type = systemServiceFlowClass.getType();
            if (systemServiceFlowClassGroupMap.containsKey(flowId)) {
                List<SystemServiceFlowClass> classList = systemServiceFlowClassGroupMap.get(type + flowId);
                classList.add(systemServiceFlowClass);
                systemServiceFlowClassGroupMap.put(type + flowId.toString(), classList);
            } else {
                List<SystemServiceFlowClass> classList = new ArrayList<>();
                classList.add(systemServiceFlowClass);
                systemServiceFlowClassGroupMap.put(type + flowId.toString(), classList);
            }
        }
        List<File> systemClassFlowPaths = new ArrayList<>();
        List<RouteBuilder> alreadyRouteBuilders = new ArrayList<>();
        for (SystemServiceFlow systemServiceFlow : systemServiceFlowList) {
            Integer flowId = systemServiceFlow.getId();
            String code = systemServiceFlow.getCode();
            // 这是system业务系统在本地存储class的根目录
            File systemClassFlowPath = new File(ClassLoader.getSystemResource("").getPath() + "/" + code);
            if (!systemClassFlowPaths.contains(systemClassFlowPath)) {
                systemClassFlowPaths.add(systemClassFlowPath);
            }
            List<SystemServiceFlowClass> processesClassList = systemServiceFlowClassGroupMap.get("processor" + flowId);
            List<SystemServiceFlowClass> routesClassList = systemServiceFlowClassGroupMap.get("route" + flowId);
            // 创建processor文件
            if (!CollectionUtil.isEmpty(processesClassList)) {
                for (SystemServiceFlowClass processesClass : processesClassList) {
                    String className = processesClass.getClassName();
                    String packageName = processesClass.getPackageName();
                    String classPath = processesClass.getClassPath();
                    // 创建文件
                    ClassFileUtil.createClassfile(systemClassFlowPath.toURI().toURL(), packageName, className, classPath);
                    // 记录到工具类中,以便其它线程需要时进行取用
                    SystemClassMapping.getSystemClassNameMapping().put(code + Constant.PROCESSOR, code + Constant.DOT + packageName + Constant.DOT + className);
                }
            }
            if (!CollectionUtil.isEmpty(routesClassList)) {
                // 创建route文件
                for (SystemServiceFlowClass routesClass : routesClassList) {
                    String className = routesClass.getClassName();
                    String packageName = routesClass.getPackageName();
                    String classPath = routesClass.getClassPath();
                    // 创建文件
                    ClassFileUtil.createClassfile(systemClassFlowPath.toURI().toURL(), packageName, className, classPath);
                    // 记录到工具类中,以便其它线程需要时进行取用
                    SystemClassMapping.getSystemClassNameMapping().put(code + Constant.ROUTE, code + Constant.DOT + packageName + Constant.DOT + className);
                    ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
                    Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) currentClassLoader.loadClass(SystemClassMapping.getSystemClassNameMapping().get(code + Constant.ROUTE));
                    if(routeBuilderClass != null) {
                        RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                        alreadyRouteBuilders.add(routeBuilder);
                    }
                }
            }
        }
        // 4、=============
        // 首先启动Apache Camel服务
        SystemCamelContext.getDefaultCamelContext().start();
        logger.info("Apache Camel Context 启动完成......");
        // 加载和设置ClassLoader
        List<URL> URLs = new ArrayList<>();
        for (File systemClassFlowPath : systemClassFlowPaths) {
            URLs.add(systemClassFlowPath.toURI().toURL());
        }
        ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
        ClassLoader camelESBClassLoader = new URLClassLoader(URLs.toArray(new URL[]{}) , currentClassLoader);
        Thread.currentThread().setContextClassLoader(camelESBClassLoader);
        SystemCamelContext.getDefaultCamelContext().setApplicationContextClassLoader(camelESBClassLoader);
        // 然后就可以进行RouteBuilder的加载
        for (RouteBuilder routeBuilder : alreadyRouteBuilders) {
            try {
                SystemCamelContext.getDefaultCamelContext().addRoutes(routeBuilder);
            } catch(Exception e) {
                logger.warn(e.getMessage() , e);
            }
        }
    }
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        try {
            camelRouteStart(contextRefreshedEvent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 1 - 1
hos-broker/src/main/java/com/yihu/hos/listener/HosServiceListener.java

@ -1,4 +1,4 @@
package com.yihu.hos.listener;
package com.yihu.hos.common.listener;
/**
 * @created Airhead 2016/8/2.

+ 8 - 2
hos-broker/src/main/java/com/yihu/hos/controllers/ESBCamelController.java

@ -21,6 +21,13 @@ public class ESBCamelController {
    @Resource(name= ESBCamelService.BEAN_ID)
    ESBCamelService esbCamelService;
    @RequestMapping(value = "/test", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "新增Processor处理器", produces = "application/json", notes = "当外界组件通知一个新的processor处理器被定义时,该事件被触发")
    public Result test() {
      return Result.success("test");
    }
    @RequestMapping(value = "/processor", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "新增Processor处理器", produces = "application/json", notes = "当外界组件通知一个新的processor处理器被定义时,该事件被触发")
@ -33,8 +40,7 @@ public class ESBCamelController {
            @RequestParam(value = "className") String className,
            @ApiParam(name = "path", value = "class文件路径", required = true)
            @RequestParam(value = "path") String path) {
        return Result.success("成功!");
//        return esbCamelService.onProcessorAdded(serviceFlow, packageName, className, path);
        return esbCamelService.onProcessorAdded(serviceFlow, packageName, className, path);
    }
    @RequestMapping(value = "/processor", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)

+ 0 - 23
hos-broker/src/main/java/com/yihu/hos/dao/BrokerDao.java

@ -1,23 +0,0 @@
package com.yihu.hos.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository("BrokerDao")
public class BrokerDao {
    public static final String BEAN_ID = "BrokerDao";
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<Map<String, Object>> getSystemServiceFlowList() throws Exception {
        return jdbcTemplate.queryForList("select * from system_service_flow");
    }
    public List<Map<String, Object>> getSystemServiceFlowClassList() throws Exception {
        return jdbcTemplate.queryForList("select * from system_service_flow_class");
    }
}

+ 0 - 173
hos-broker/src/main/java/com/yihu/hos/listener/ApplicationStartListener.java

@ -1,173 +0,0 @@
package com.yihu.hos.listener;
import com.yihu.ehr.framework.util.operator.ClassFileUtil;
import com.yihu.hos.dao.BrokerDao;
import com.yihu.hos.models.CamelContextQueue;
import com.yihu.hos.models.SystemPathMapping;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.SynchronousQueue;
/**
 * 项目启动执行
 * add by hzp at 2016-01-25
 */
@Repository("ApplicationStartListener")
public class ApplicationStartListener implements ApplicationListener {
    public static final String BEAN_ID = "ApplicationStartListener";
    @Resource(name = BrokerDao.BEAN_ID)
    BrokerDao brokerDao;
    private static Logger logger = LogManager.getLogger();
    /**
     * 这是一个固定的存储class文件的根路径
     * 正式系统中,这个值可来自于系统的配置文件
     */
    private static final String CLASSROOTPATH = "D:/testCamelRoot";
    private void camelRouteStart() throws Exception {
         /*
         * 启动顺序为:
         *
         * 1、首先使用Apache Curator组件进行zookeeper服务端连接,
         *
         * 2、通过Apache Curator组件查询目前已有的业务系统ID信息,
         * 以便依据这些业务系统ID,建立本地ClassLoader的根路径(当然,有就不需要创建了)
         * 并且注册Apache Curator封装层的监听。
         *
         * 3、检查第2步得到的业务系统下,已经存在的processor处理器定义和已有的route定义
         * 以便生成class信息。
         *
         * 4、启动Apache Camel服务,将第三步那些route定义进行动态加载
         *
         * 5、经过以上步骤,整个启动过程完成了。现在主线程需要一直等待从SynchronousQueue队列发来的动态加载请求了。
         * */
        // 1、===============
        // 连接到zookeeper
//        CuratorFramework zkClient = CuratorFrameworkFactory.newClient("192.168.61.140:2181", 30000, 30000, new RetryNTimes(50, 3000));
//        zkClient.start();
//        BootStartup.LOGGER.info("完成zookeeper服务端的连接工作!");
        // 2、===============
        // 取得已存在的系统
//        List<String> systemNames = zkClient.getChildren().forPath("/");
        List<Map<String, Object>> systemServiceFlowList = brokerDao.getSystemServiceFlowList();
        List<Map<String, Object>> systemServiceFlowClassList = brokerDao.getSystemServiceFlowClassList();
        Map<String, List<Map<String, Object>>> systemServiceFlowClassGroupMap = new HashMap<>();
        for (Map<String, Object> systemServiceFlowClassMap : systemServiceFlowClassList) {
            Integer flowId = (Integer) systemServiceFlowClassMap.get("flow_id");
            if (systemServiceFlowClassGroupMap.containsKey(flowId)) {
                List<Map<String, Object>> classList = systemServiceFlowClassGroupMap.get(flowId);
                classList.add(systemServiceFlowClassMap);
                String type = (String) systemServiceFlowClassMap.get("type");
                systemServiceFlowClassGroupMap.put(type + flowId.toString()  , classList);
            } else {
                List<Map<String, Object>> classList = new ArrayList<>();
                classList.add(systemServiceFlowClassMap);
                String type = (String) systemServiceFlowClassMap.get("type");
                systemServiceFlowClassGroupMap.put(type + flowId.toString()  , classList);
            }
        }
        List<File> systemClassRootPaths = new ArrayList<>();
        List<RouteBuilder> alreadyRouteBuilders = new ArrayList<>();
        for (Map<String, Object> systemNameMap : systemServiceFlowList) {
            Integer flowId = (Integer) systemNameMap.get("id");
            String code = (String) systemNameMap.get("code");
            // 这是system业务系统在本地存储class的根目录
            File systemClassRootPath = new File(CLASSROOTPATH + "/" + code);
            if (!systemClassRootPath.exists()) {
                systemClassRootPath.mkdirs();
            }
            Map<String, URL> systemRootPathMapping = SystemPathMapping.getSystemRootPathMapping();
            // 记录到工具类中,以便其它线程需要时进行取用
            systemRootPathMapping.put(code, systemClassRootPath.toURI().toURL());
            if (!systemClassRootPaths.contains(systemClassRootPath)) {
                systemClassRootPaths.add(systemClassRootPath);
            }
            List<Map<String, Object>> processesClassList = systemServiceFlowClassGroupMap.get("processor" + flowId);
            List<Map<String, Object>> routesClassList = systemServiceFlowClassGroupMap.get("route" + flowId);
            // 创建processor文件
            for (Map<String, Object> processesClass : processesClassList) {
                String className = (String) processesClass.get("name");
                String packageName = (String) processesClass.get("package");
                String classPath = (String) processesClass.get("path");
                // 创建文件
                ClassFileUtil.createClassfile(systemClassRootPath.toURI().toURL(), packageName, className, classPath);
            }
            // 创建route文件
            for (Map<String, Object> routesClass : routesClassList) {
                String className = (String) routesClass.get("name");
                String packageName = (String) routesClass.get("package");
                String classPath = (String) routesClass.get("path");
                // 创建文件
                ClassFileUtil.createClassfile(systemClassRootPath.toURI().toURL(), packageName, className, classPath);
                RouteBuilder routeBuilder = (RouteBuilder)Class.forName(packageName + "." + className).newInstance();
                alreadyRouteBuilders.add(routeBuilder);
            }
        }
        // 4、=============
        // 首先启动Apache Camel服务
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.start();
        logger.info("Apache Camel Context 启动完成......");
        // 加载和设置ClassLoader
        List<URL> URLs = new ArrayList<>();
        for (File systemClassRootPath : systemClassRootPaths) {
            URLs.add(systemClassRootPath.toURI().toURL());
        }
        ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
        ClassLoader camelESBClassLoader = new URLClassLoader(URLs.toArray(new URL[]{}) , currentClassLoader);
        Thread.currentThread().setContextClassLoader(camelESBClassLoader);
        camelContext.setApplicationContextClassLoader(camelESBClassLoader);
        // 然后就可以进行RouteBuilder的加载
        for (RouteBuilder routeBuilder : alreadyRouteBuilders) {
            try {
                camelContext.addRoutes(routeBuilder);
            } catch(Exception e) {
                logger.warn(e.getMessage() , e);
            }
        }
        // 5、=============
        // 开始监控CamelContext动态操作队列
        SynchronousQueue<String> camelContextOperateQueue = CamelContextQueue.getCamelCamelContextQueue();
        String mustLoadedClassName = null;
        // 如果没有收到其它线程的加载请求,主线程将停止在这里
        while((mustLoadedClassName = camelContextOperateQueue.take()) != null) {
            Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>)camelESBClassLoader.loadClass(mustLoadedClassName);
            if(routeBuilderClass != null) {
                RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                camelContext.addRoutes(routeBuilder);
            }
        }
    }
    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        try {
            camelRouteStart();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 16
hos-broker/src/main/java/com/yihu/hos/models/CamelContextQueue.java

@ -1,16 +0,0 @@
package com.yihu.hos.models;
import java.util.concurrent.SynchronousQueue;
/**
 * Created by lingfeng on 2016/8/4.
 */
public class CamelContextQueue {
    private static SynchronousQueue<String> camelContextOperateQueue;
    public static SynchronousQueue<String> getCamelCamelContextQueue() {
        if (camelContextOperateQueue == null) {
            camelContextOperateQueue = new SynchronousQueue<>(true);
        }
        return camelContextOperateQueue;
    }
}

+ 17 - 0
hos-broker/src/main/java/com/yihu/hos/models/SystemCamelContext.java

@ -0,0 +1,17 @@
package com.yihu.hos.models;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
/**
 * Created by lingfeng on 2016/8/9.
 */
public class SystemCamelContext {
    private static CamelContext defaultCamelContext;
    public static CamelContext getDefaultCamelContext() {
        if (defaultCamelContext == null) {
            defaultCamelContext = new DefaultCamelContext();
        }
        return defaultCamelContext;
    }
}

+ 17 - 0
hos-broker/src/main/java/com/yihu/hos/models/SystemClassMapping.java

@ -0,0 +1,17 @@
package com.yihu.hos.models;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by lingfeng on 2016/8/4.
 */
public class SystemClassMapping {
    private static Map<String, String> systemClassNameMapping;
    public static Map<String, String> getSystemClassNameMapping() {
        if (systemClassNameMapping == null) {
            systemClassNameMapping = new HashMap<>();
        }
        return systemClassNameMapping;
    }
}

+ 0 - 18
hos-broker/src/main/java/com/yihu/hos/models/SystemPathMapping.java

@ -1,18 +0,0 @@
package com.yihu.hos.models;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by lingfeng on 2016/8/4.
 */
public class SystemPathMapping {
    private static Map<String, URL> systemRootPathMapping ;
    public static Map<String, URL> getSystemRootPathMapping() {
        if (systemRootPathMapping == null) {
            systemRootPathMapping = new HashMap<>();
        }
        return systemRootPathMapping;
    }
}

+ 72 - 0
hos-broker/src/main/java/com/yihu/hos/models/SystemServiceFlow.java

@ -0,0 +1,72 @@
package com.yihu.hos.models;
import java.util.Date;
/**
 * Created by lingfeng on 2016/8/8.
 */
public class SystemServiceFlow {
    Integer id;
    String code;
    String name;
    String path;
    String chart;
    Integer valid;
    Date createDate;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getChart() {
        return chart;
    }
    public void setChart(String chart) {
        this.chart = chart;
    }
    public Integer getValid() {
        return valid;
    }
    public void setValid(Integer valid) {
        this.valid = valid;
    }
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

+ 61 - 0
hos-broker/src/main/java/com/yihu/hos/models/SystemServiceFlowClass.java

@ -0,0 +1,61 @@
package com.yihu.hos.models;
/**
 * Created by lingfeng on 2016/8/8.
 */
public class SystemServiceFlowClass {
    Integer id;
    String className;
    String packageName;
    String classPath;
    Integer flowId;
    String type;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public String getPackageName() {
        return packageName;
    }
    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }
    public String getClassPath() {
        return classPath;
    }
    public void setClassPath(String classPath) {
        this.classPath = classPath;
    }
    public Integer getFlowId() {
        return flowId;
    }
    public void setFlowId(Integer flowId) {
        this.flowId = flowId;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

+ 2 - 2
hos-broker/src/main/java/com/yihu/hos/services/BrokerServerService.java

@ -2,8 +2,8 @@ package com.yihu.hos.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.configuration.ApplicationConfiguration;
import com.yihu.hos.configuration.ArbiterConfiguration;
import com.yihu.hos.common.configuration.ApplicationConfiguration;
import com.yihu.hos.common.configuration.ArbiterConfiguration;
import org.apache.camel.util.InetAddressUtil;
import org.apache.http.Consts;
import org.apache.http.NameValuePair;

+ 116 - 84
hos-broker/src/main/java/com/yihu/hos/services/ESBCamelService.java

@ -3,15 +3,18 @@ package com.yihu.hos.services;
import com.yihu.ehr.framework.model.Result;
import com.yihu.ehr.framework.util.operator.ClassFileUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.models.CamelContextQueue;
import com.yihu.hos.models.SystemPathMapping;
import com.yihu.hos.common.classLoader.DynamicClassLoader;
import com.yihu.hos.common.constants.Constant;
import com.yihu.hos.models.SystemCamelContext;
import com.yihu.hos.models.SystemClassMapping;
import org.apache.camel.builder.RouteBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
import java.net.URL;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Map;
import java.util.concurrent.SynchronousQueue;
/**
 * Created by lingfeng on 2016/8/4.
@ -28,138 +31,167 @@ public class ESBCamelService {
     * @param path processor处理器定义涉及的class对应路径
     */
    public Result onProcessorAdded(String serviceFlow, String packageName, String className, String path) {
 /*
         * 当一个处理器进行添加时,要做以下处理
         * 1、首先根据serviceFlow的信息,在ESB-Broker Server的映射容器中寻
         * 找个业务系统定义的各种Server Class 文件在ESB-Broker Server节点本地存储的根路径
         * 2、然后按照packageName、className、contents的信息将这个class文件写入到正确的位置
         *
         * 注意:由于此时只是完成了class了文件的写入,所以这个class文件还没有被classloader进行初始化。
         * 另外由于,CamelContext并没有提供单独进行processor处理器加载的功能,而是随着routes实例的加载而加载
         * 而这个工作将在onRouteDefineChanged事件中完成,所以在完成processor-class文件的写入后,就不需要再做其它事情了。
         * */
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        try {
            if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                    || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
                logger.error("必要的入参数据不正确,请检查!");
                return Result.error("必要的入参数据不正确,请检查!");
            }
            this.createClassfile(serviceFlow, packageName, className, path, Constant.PROCESSOR);
            return Result.success("新增处理器成功!");
        } catch (Exception e) {
            logger.error(e);
            return Result.error("新增处理器失败!");
        }
        this.createClassfile(serviceFlow, packageName, className, path);
        return Result.success("新增处理器成功!");
    }
    /**
     * 当外界组件通知一个已有的processor处理器data部分发生变化时,该事件被触发。
     */
    public Result onProcessorDataChanged(String serviceFlow , String packageName , String className , String path) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        try {
            if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                    || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
                logger.error("必要的入参数据不正确,请检查!");
                return Result.error("必要的入参数据不正确,请检查!");
            }
            this.updateClassfile(serviceFlow, packageName, className, path, Constant.PROCESSOR);
            SystemCamelContext.getDefaultCamelContext().stopRoute(serviceFlow);
            SystemCamelContext.getDefaultCamelContext().removeRoute(serviceFlow);
            DynamicClassLoader classLoader = new DynamicClassLoader(DynamicClassLoader.class.getClassLoader());
            Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) classLoader.loadClass(ClassLoader.getSystemResource(Constant.EMPTY).getPath(), SystemClassMapping.getSystemClassNameMapping().get(serviceFlow + Constant.ROUTE));
            classLoader.loadClass(ClassLoader.getSystemResource(Constant.EMPTY).getPath(), SystemClassMapping.getSystemClassNameMapping().get(serviceFlow + Constant.PROCESSOR));
            if (routeBuilderClass != null) {
                RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                SystemCamelContext.getDefaultCamelContext().addRoutes(routeBuilder);
            }
            return Result.success("修改处理器成功!");
        } catch (Exception e) {
            logger.error(e);
            return Result.error("修改路由失败!");
        }
        this.updateClassfile(serviceFlow, packageName, className, path);
        return Result.success("修改处理器成功!");
    }
    /**
     * 当外界组件通知一个新的RouteDefine路由被定义时,该事件被触发
     */
    public Result onRouteDefineAdded(String serviceFlow , String packageName , String className , String path) {
/*
         * 当一个新的路由定义事件发生时,要做以下几件事情:
         *
         * 1、根据serviceFlow的信息,在ESB-Broker Server的映射容器中寻
         * 找个业务系统定义的各种Server Class 文件在ESB-Broker Server节点本地存储的根路径
         * 2、然后按照packageName、className、contents的信息将这个class文件写入到正确的位置
         * 3、不能在本线程操作Apache Camel,只能通过一个同步队列通知Apache Camel主线程
         * */
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        // 第1、2两步处理过程,都是在这里完成
        this.createClassfile(serviceFlow, packageName, className, path);
        // 3、===============加载到CamelContext中
        SynchronousQueue<String> camelContextOperateQueue = CamelContextQueue.getCamelCamelContextQueue();
        try {
            camelContextOperateQueue.put(packageName + "." + className);
        } catch (InterruptedException e) {
            logger.error(e.getMessage() , e);
            if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                    || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
                logger.error("必要的入参数据不正确,请检查!");
                return Result.error("必要的入参数据不正确,请检查!");
            }
            File systemClassRootPath = new File(ClassLoader.getSystemResource("").getPath() + "/" + serviceFlow);
            if (!systemClassRootPath.exists()) {
                systemClassRootPath.mkdirs();
            }
            // 第1、2两步处理过程,都是在这里完成
            this.createClassfile(serviceFlow, packageName, className, path, Constant.ROUTE);
            // 3、===============加载到CamelContext中
            ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
            Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) currentClassLoader.loadClass(SystemClassMapping.getSystemClassNameMapping().get(serviceFlow + Constant.ROUTE));
            if(routeBuilderClass != null) {
                RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                SystemCamelContext.getDefaultCamelContext().addRoutes(routeBuilder);
            }
            return Result.success("新增路由成功!");
        } catch (Exception e) {
            logger.error(e);
            return Result.error("新增路由失败!");
        }
        return Result.success("新增路由成功!");
    }
    /**
     * 当外界组件通知一个已有的RouteDefine路由定义被改变时,主要就是路由定义内容被改变时,该事件被触发。
     */
    public Result onRouteDefineChanged(String serviceFlow, String packageName, String className, String path) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        try {
            if (StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                    || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
                logger.error("必要的入参数据不正确,请检查!");
                return Result.error("必要的入参数据不正确,请检查!");
            }
            SystemCamelContext.getDefaultCamelContext().stopRoute(serviceFlow);
            SystemCamelContext.getDefaultCamelContext().removeRoute(serviceFlow);
            this.updateClassfile(serviceFlow, packageName, className, path, Constant.ROUTE);
            // 3、===============加载到CamelContext中
            DynamicClassLoader classLoader = new DynamicClassLoader(DynamicClassLoader.class.getClassLoader());
            Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) classLoader.loadClass(ClassLoader.getSystemResource(Constant.EMPTY).getPath(), SystemClassMapping.getSystemClassNameMapping().get(serviceFlow + Constant.ROUTE));
            if (routeBuilderClass != null) {
                RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                SystemCamelContext.getDefaultCamelContext().addRoutes(routeBuilder);
            }
            return Result.success("修改路由成功!");
        } catch (Exception e) {
            return Result.error("修改路由失败!");
        }
        this.updateClassfile(serviceFlow, packageName, className, path);
        return Result.success("修改路由成功!");
    }
    /**
     * 当外界组件通知一个已有的RouteDefine路由定义被删除时,该事件被触发。
     */
    public Result onRouteDefineDelete(String serviceFlow, String packageName, String className) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        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, Constant.PROCESSOR);
            return Result.success("删除路由成功!");
        } catch (Exception e) {
            return Result.error("删除路由失败!");
        }
        this.deleteClassfile(serviceFlow, packageName, className);
        return Result.success("删除路由成功!");
    }
    private void createClassfile(String serviceFlow, String packageName, String className, String path) {
    private void createClassfile(String serviceFlow, String packageName, String className, String path, String type) throws MalformedURLException {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
            return;
        }
        File systemClassFlowPath = new File(ClassLoader.getSystemResource(Constant.EMPTY).getPath() + "/" + serviceFlow);
        // 记录到工具类中,以便其它线程需要时进行取用
        SystemClassMapping.getSystemClassNameMapping().put(serviceFlow + Constant.ROUTE, serviceFlow + Constant.DOT + packageName + Constant.DOT + className);
        // 2、============开始写入class文件
        ClassFileUtil.createClassfile(systemRootURL, packageName, className, path);
        ClassFileUtil.createClassfile(systemClassFlowPath.toURI().toURL(), packageName, className, path);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 生成过程结束");
        logger.info("===================" + packageName + Constant.DOT + className + ".class 生成过程结束");
    }
    private void updateClassfile(String serviceFlow, String packageName, String className, String path) {
    private void updateClassfile(String serviceFlow, String packageName, String className, String path, String type) {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
        Map<String, String> systemClassNameMapping = SystemClassMapping.getSystemClassNameMapping();
        String systemClassName = systemClassNameMapping.get(serviceFlow + type);
        if(StringUtil.isEmpty(systemClassName)) {
            return;
        }
        String classPath = ClassLoader.getSystemResource("").getPath() + "/" + serviceFlow + "/" + packageName + "/" + className + ".class";
        // 2、============开始写入class文件
        ClassFileUtil.updateClassfile(systemRootURL, packageName, className, path);
        ClassFileUtil.updateClassfile(classPath, path);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 修改过程结束");
        logger.info("===================" + packageName + Constant.DOT + className + ".class 修改过程结束");
    }
    private void deleteClassfile(String serviceFlow, String packageName, String className) {
    private void deleteClassfile(String serviceFlow, String packageName, String className, String type) {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
        Map<String, String> systemClassNameMapping = SystemClassMapping.getSystemClassNameMapping();
        String systemClassName = systemClassNameMapping.get(serviceFlow + type);
        if(StringUtil.isEmpty(systemClassName)) {
            return;
        }
        String classPath = ClassLoader.getSystemResource("").getPath() + "/" + serviceFlow + "/" + packageName + "/" + className + ".class";
        // 2、============开始写入class文件
        ClassFileUtil.deleteClassfile(systemRootURL, packageName, className);
        ClassFileUtil.deleteClassfile(classPath);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 删除过程结束");
        logger.info("===================" + packageName + Constant.DOT + className + ".class 删除过程结束");
    }
}

+ 1 - 0
hos-broker/src/test/java/com/yihu/hos/HosBrokerApplicationTests.java

@ -3,6 +3,7 @@ package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

+ 87 - 44
hos-core-dependencies/pom.xml

@ -5,7 +5,7 @@
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yihu.hos</groupId>
    <artifactId>hos-core-denpendencies</artifactId>
    <artifactId>hos-core-dependencies</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <build>
@ -21,7 +21,13 @@
        </plugins>
    </build>
    <properties>
        <jackson.version>2.4.6</jackson.version>
        <!--<jackson.version>2.4.6</jackson.version>-->
        <version.log4j>1.2.17</version.log4j>
        <version.log4j-over-slf4j>1.7.21</version.log4j-over-slf4j>
        <version.log4j2>2.4.1</version.log4j2>
        <version.jcl-over-slf4j>1.7.19</version.jcl-over-slf4j>
        <version.jul-over-slf4j>1.7.21</version.jul-over-slf4j>
        <version.slf4j>1.7.21</version.slf4j>
    </properties>
    <pluginRepositories>
@ -77,11 +83,6 @@
        <!--<artifactId>commons-discovery</artifactId>-->
        <!--<version>0.2</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
@ -123,55 +124,43 @@
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--<dependency>-->
        <!--<groupId>commons-logging</groupId>-->
        <!--<artifactId>commons-logging</artifactId>-->
        <!--<version>1.2</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
        <!--<groupId>org.apache.commons</groupId>-->
        <!--<artifactId>commons-pool2</artifactId>-->
        <!--<version>2.4.2</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
        </dependency>
        <!--commons end-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.13</version>
        </dependency>
        <!--httpclient start-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.1</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.3</version>
        </dependency>
        <!--httpclient end-->
        <!--quartz start-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.0.1</version>
            <!--<exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>-->
        </dependency>
        <!--quartz end-->
        <!--pinyin4j start-->
        <dependency>
            <groupId>com.belerweb</groupId>
@ -216,21 +205,75 @@
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
            <version>2.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.6</version>
        </dependency>
        <!--jackson end-->
        <!-- Log framework start-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${version.log4j}</version>
            <scope>${dependency.scope}</scope>
        </dependency>
        <!--jackson end-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${version.log4j2}</version>
            <scope>${dependency.scope}</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${version.log4j2}</version>
            <scope>${dependency.scope}</scope>
        </dependency>
        <!--Log framework to SLF4J bridge: x-over-slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${version.jcl-over-slf4j}</version>
            <scope>${dependency.scope}</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>${version.jul-over-slf4j}</version>
            <scope>${dependency.scope}</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>${version.log4j-over-slf4j}</version>
            <scope>${dependency.scope}</scope>
        </dependency>
        <!--SLF4J api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${version.slf4j}</version>
            <scope>${dependency.scope}</scope>
        </dependency>
        <!-- Log framework end-->
    </dependencies>

+ 1 - 1
hos-core/pom.xml

@ -9,7 +9,7 @@
    <version>1.1.1-SNAPSHOT</version>
    <parent>
        <groupId>com.yihu.hos</groupId>
        <artifactId>hos-core-denpendencies</artifactId>
        <artifactId>hos-core-dependencies</artifactId>
        <version>1.1.1-SNAPSHOT</version>
        <relativePath>../hos-core-dependencies</relativePath>
    </parent>

+ 46 - 36
hos-web-framework-dependencies/pom.xml

@ -11,13 +11,13 @@
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
        <version>1.4.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <camel.version>2.17.1</camel.version>
        <spring.version>4.2.5.RELEASE</spring.version>
        <spring.version>4.3.2.RELEASE</spring.version>
        <!--<spring.security.version>4.0.2.RELEASE</spring.security.version>-->
    </properties>
@ -63,34 +63,26 @@
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.9.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.2.2</version>
        </dependency>
        <!--<dependency>-->
        <!--<groupId>org.springframework.boot</groupId>-->
        <!--<artifactId>spring-boot-starter-data-mongodb</artifactId>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.data</groupId>-->
            <!--<artifactId>spring-data-mongodb</artifactId>-->
            <!--<version>1.9.2.RELEASE</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
        <!--<groupId>org.mongodb</groupId>-->
        <!--<artifactId>mongo-java-driver</artifactId>-->
        <!--<version>3.2.2</version>-->
        <!--</dependency>-->
        <!-- camel start -->
        <dependency>
@ -108,27 +100,40 @@
            <artifactId>camel-jms</artifactId>
            <version>${camel.version}</version> <!-- use the same version as your Camel core version -->
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-cxf</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-quartz</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-quartz2</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-xmljson</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-camel -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
            <version>5.13.2</version>
        </dependency>
        <!-- camel end -->
        <!-- database driver start -->
        <!--<dependency>-->
            <!--<groupId>org.mongodb</groupId>-->
            <!--<artifactId>mongo-java-driver</artifactId>-->
            <!--<version>3.2.2</version>-->
        <!--</dependency>-->
        <!-- database driver end -->
        <!--<dependency>-->
        <!--<groupId>org.apache.activemq</groupId>-->
        <!--<artifactId>activemq-all</artifactId>-->
        <!--<version>5.13.0</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-core</artifactId>
            <version>1.1.1-SNAPSHOT</version>
        </dependency>
        <!-- swagger start -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
@ -145,8 +150,13 @@
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!--=============spring end =============-->
        <!-- swagger end -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.13.0</version>
        </dependency>
        <!-- test start -->
        <dependency>