CenterService/src/main/java/com/java110/center/CenterServiceApplicationStart.java
@@ -2,6 +2,8 @@ import com.java110.center.smo.ICenterServiceCacheSMO; import com.java110.common.factory.ApplicationContextFactory; import com.java110.core.annotation.Java110ListenerDiscovery; import com.java110.event.center.DataFlowEventPublishing; import com.java110.event.center.init.EventConfigInit; import com.java110.service.init.ServiceStartInit; import org.springframework.boot.SpringApplication; @@ -29,6 +31,8 @@ @SpringBootApplication(scanBasePackages={"com.java110.service","com.java110.center","com.java110.core","com.java110.event.center","com.java110.cache"}) @EnableDiscoveryClient //@EnableConfigurationProperties(EventProperties.class) @Java110ListenerDiscovery(listenerPublishClass = DataFlowEventPublishing.class, basePackages = {"com.java110.center.listener"}) public class CenterServiceApplicationStart { /** @@ -61,7 +65,7 @@ ServiceStartInit.initSystemConfig(context); //加载事件数据 EventConfigInit.initSystemConfig(); //EventConfigInit.initSystemConfig(); //刷新缓存 flushMainCache(args); CenterService/src/main/java/com/java110/center/listener/DealUserIdListener.java
File was renamed from java110-event/src/main/java/com/java110/event/center/listener/DealUserIdListener.java @@ -1,19 +1,21 @@ package com.java110.event.center.listener; package com.java110.center.listener; import com.java110.common.constant.ResponseConstant; import com.java110.common.exception.ListenerExecuteException; import com.java110.core.annotation.Java110Listener; import com.java110.core.context.DataFlow; import com.java110.event.app.order.Ordered; import com.java110.event.center.event.InvokeBusinessSystemEvent; import com.java110.event.center.listener.DataFlowListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; /** * 用户ID处理 侦听 * Created by wuxw on 2018/7/2. */ @Component //@Component @Java110Listener(name="dealUserIdListener") public class DealUserIdListener implements DataFlowListener<InvokeBusinessSystemEvent>,Ordered { private final static Logger logger = LoggerFactory.getLogger(DealUserIdListener.class); CenterService/src/main/java/com/java110/center/listener/ReceiveRequestListener.java
New file @@ -0,0 +1,33 @@ package com.java110.center.listener; import com.java110.core.annotation.Java110Listener; import com.java110.event.app.order.Ordered; import com.java110.event.center.event.ReceiveRequestEvent; import com.java110.event.center.listener.DataFlowListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; /** * Created by wuxw on 2018/7/2. */ @Java110Listener(name = "receiveRequestListener") public class ReceiveRequestListener implements DataFlowListener<ReceiveRequestEvent>,Ordered { private final static Logger logger = LoggerFactory.getLogger(ReceiveRequestListener.class); @Override public int getOrder() { return 1; } @Override public void soService(ReceiveRequestEvent event) { Map<String,String> headers = event.getHeaders(); logger.debug("请求头信息为:{}",headers); String requestData = event.getRequestData(); logger.debug("请求报文为:{}",requestData); } } CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
@@ -70,19 +70,23 @@ DataFlowEventPublishing.preValidateData(reqJson,headers); //1.0 创建数据流 dataFlow = DataFlowFactory.newInstance(DataFlow.class).builder(reqJson, headers); DataFlowEventPublishing.initDataFlowComplete(dataFlow); /*LogAgent.sendLog(dataFlow.reBuilder(dataFlow.getTransactionId(),LogAgent.LOG_TYPE_S,LogAgent.LOG_STATUS_S, dataFlow.getRequestURL(),dataFlow.getReqData(),dataFlow.getHeaders())); */ //2.0 加载配置信息 initConfigData(dataFlow); DataFlowEventPublishing.loadConfigDataComplete(dataFlow); //3.0 校验 APPID是否有权限操作serviceCode judgeAuthority(dataFlow); //4.0 调用规则校验 ruleValidate(dataFlow); DataFlowEventPublishing.ruleValidateComplete(dataFlow); //5.0 保存订单和业务项 c_orders c_order_attrs c_business c_business_attrs saveOrdersAndBusiness(dataFlow); //6.0 调用下游系统 DataFlowEventPublishing.invokeBusinessSystem(dataFlow); invokeBusinessSystem(dataFlow); responseJson = DataTransactionFactory.createCommonResponseJson(dataFlow); @@ -144,11 +148,10 @@ AuthenticationFactory.putSign(dataFlow, responseJson); saveLogMessage(dataFlow,LogAgent.createLogMessage(dataFlow.getRequestHeaders(),dataFlow.getReqJson().toJSONString()), LogAgent.createLogMessage(dataFlow.getResponseHeaders(),dataFlow.getResJson().toJSONString()),endDate.getTime()-dataFlow.getStartDate().getTime()); DataFlowEventPublishing.dataResponse(dataFlow,reqJson,headers); } resJson = encrypt(responseJson.toJSONString(),headers); //这里保存耗时,以及日志 return resJson; } StoreService/src/main/java/com/java110/store/StoreServiceApplicationStart.java
@@ -1,5 +1,7 @@ package com.java110.store; import com.java110.core.annotation.Java110ListenerDiscovery; import com.java110.event.service.BusinessServiceDataFlowEventPublishing; import com.java110.event.service.init.SystemStartLoadBusinessConfigure; import com.java110.service.init.ServiceStartInit; import org.springframework.boot.SpringApplication; @@ -26,6 +28,8 @@ */ @SpringBootApplication(scanBasePackages={"com.java110.service","com.java110.store","com.java110.core","com.java110.cache"}) @EnableDiscoveryClient @Java110ListenerDiscovery(listenerPublishClass = BusinessServiceDataFlowEventPublishing.class, basePackages = {"com.java110.store.listener"}) public class StoreServiceApplicationStart { private final static String LISTENER_PATH = "java110.StoreService.listeners"; @@ -46,6 +50,6 @@ ApplicationContext context = SpringApplication.run(StoreServiceApplicationStart.class, args); ServiceStartInit.initSystemConfig(context); //加载业务侦听 SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH); //SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH); } } StoreService/src/main/java/com/java110/store/listener/SaveStoreInfoListener.java
New file @@ -0,0 +1,216 @@ package com.java110.store.listener; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.common.constant.ResponseConstant; import com.java110.common.constant.ServiceCodeConstant; import com.java110.common.constant.StatusConstant; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.annotation.Java110Listener; import com.java110.core.context.DataFlowContext; import com.java110.core.factory.DataTransactionFactory; import com.java110.core.factory.GenerateCodeFactory; import com.java110.entity.center.Business; import com.java110.event.service.BusinessServiceDataFlowEvent; import com.java110.event.service.BusinessServiceDataFlowListener; import com.java110.store.dao.IStoreServiceDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 保存 用户信息 侦听 * Created by wuxw on 2018/5/18. */ @Java110Listener("saveStoreInfoListener") @Transactional public class SaveStoreInfoListener extends LoggerEngine implements BusinessServiceDataFlowListener{ @Autowired IStoreServiceDao storeServiceDaoImpl; @Override public int getOrder() { return 0; } @Override public String getServiceCode() { return ServiceCodeConstant.SERVICE_CODE_SAVE_STORE_INFO; } @Override public void soService(BusinessServiceDataFlowEvent event) { //这里处理业务逻辑数据 DataFlowContext dataFlowContext = event.getDataFlowContext(); doSaveUserInfo(dataFlowContext); } private void doSaveUserInfo(DataFlowContext dataFlowContext){ String businessType = dataFlowContext.getOrder().getBusinessType(); Business business = dataFlowContext.getCurrentBusiness(); //Assert.hasLength(business.getbId(),"bId 不能为空"); // Instance 过程 if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(businessType)){ //doComplateUserInfo(business); doSaveInstanceUserInfo(dataFlowContext,business); }else if(StatusConstant.REQUEST_BUSINESS_TYPE_BUSINESS.equals(businessType)){ // Business过程 doSaveBusinessUserInfo(dataFlowContext,business); }else if(StatusConstant.REQUEST_BUSINESS_TYPE_DELETE.equals(businessType)){ //撤单过程 doDeleteInstanceUserInfo(dataFlowContext,business); } dataFlowContext.setResJson(DataTransactionFactory.createBusinessResponseJson(dataFlowContext,ResponseConstant.RESULT_CODE_SUCCESS,"成功", dataFlowContext.getParamOut())); } /** * 撤单 * @param business */ private void doDeleteInstanceUserInfo(DataFlowContext dataFlowContext,Business business) { /*String bId = business.getbId(); //Assert.hasLength(bId,"请求报文中没有包含 bId"); Map info = new HashMap(); info.put("bId",bId); Map userInfo = storeServiceDaoImpl.queryUserInfo(info); if(userInfo != null && !userInfo.isEmpty()){ info.put("bId",bId); info.put("userId",userInfo.get("user_id").toString()); info.put("statusCd",StatusConstant.STATUS_CD_INVALID); storeServiceDaoImpl.updateUserInfoInstance(userInfo); dataFlowContext.addParamOut("userId",userInfo.get("user_id")); } info.clear(); info.put("bId",bId); List<Map> userAttrs = storeServiceDaoImpl.queryUserInfoAttrs(info); if(userAttrs != null && userAttrs.size() >0){ info.put("bId",bId); //info.put("userId",userInfo.get("user_id").toString()); info.put("statusCd",StatusConstant.STATUS_CD_INVALID); storeServiceDaoImpl.updateUserAttrInstance(info); } */ } /** * instance过程 * @param business */ private void doSaveInstanceUserInfo(DataFlowContext dataFlowContext,Business business) { JSONObject data = business.getDatas(); //Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理"); //Assert.jsonObjectHaveKey(data,"businessUser","datas 节点下没有包含 businessUser 节点"); //JSONObject businessUser = data.getJSONObject("businessUser"); /* Map info = new HashMap(); info.put("bId",business.getbId()); info.put("operate",StatusConstant.OPERATE_ADD); Map businessUser = storeServiceDaoImpl.queryBusinessUserInfo(info); if( businessUser != null && !businessUser.isEmpty()) { storeServiceDaoImpl.saveUserInfoInstance(businessUser); dataFlowContext.addParamOut("userId",businessUser.get("user_id")); } List<Map> businessUserAttrs = storeServiceDaoImpl.queryBusinessUserInfoAttrs(info); if(businessUserAttrs != null && businessUserAttrs.size() > 0) { storeServiceDaoImpl.saveUserAttrInstance(businessUser); }*/ } /** * 保存数据至u_user 表中 * @param business */ private void doComplateUserInfo(DataFlowContext dataFlowContext,Business business) { /*String bId = business.getbId(); Map paramIn = new HashMap(); paramIn.put("bId",bId); paramIn.put("statusCd",StatusConstant.STATUS_CD_VALID); storeServiceDaoImpl.updateUserInfoInstance(paramIn); storeServiceDaoImpl.updateUserAttrInstance(paramIn);*/ } /** * 处理用户信息 * @param business */ private void doSaveBusinessUserInfo(DataFlowContext dataFlowContext,Business business) { /*JSONObject data = business.getDatas(); Assert.notEmpty(data,"没有datas 节点,或没有子节点需要处理"); Assert.jsonObjectHaveKey(data,"businessUser","datas 节点下没有包含 businessUser 节点"); JSONObject businessUser = data.getJSONObject("businessUser"); Assert.jsonObjectHaveKey(businessUser,"userId","businessUser 节点下没有包含 userId 节点"); if(businessUser.getInteger("userId") < 0){ //生成userId String userId = GenerateCodeFactory.getUserId(); businessUser.put("userId",userId); } dataFlowContext.addParamOut("userId",businessUser.getString("userId")); businessUser.put("bId",business.getbId()); businessUser.put("operate", StatusConstant.OPERATE_ADD); //保存用户信息 storeServiceDaoImpl.saveBusinessUserInfo(businessUser); if(businessUser.containsKey("businessUserAttr")){ doSaveUserAttrs(business); }*/ //storeServiceDaoImpl.saveUserInfoInstance(businessUser); } private void doSaveUserAttrs(Business business){ /*JSONObject data = business.getDatas(); JSONObject businessUser = data.getJSONObject("businessUser"); JSONArray businessUserAttrs = businessUser.getJSONArray("businessUserAttr"); for(int userAttrIndex = 0 ; userAttrIndex < businessUserAttrs.size();userAttrIndex ++){ JSONObject userAttr = businessUserAttrs.getJSONObject(userAttrIndex); Assert.jsonObjectHaveKey(userAttr,"attrId","businessUserAttr 节点下没有包含 attrId 节点"); if(userAttr.getInteger("attrId") < 0){ String attrId = GenerateCodeFactory.getAttrId(); userAttr.put("attrId",attrId); } userAttr.put("bId",business.getbId()); userAttr.put("userId",businessUser.getString("userId")); userAttr.put("operate", StatusConstant.OPERATE_ADD); storeServiceDaoImpl.saveBusinessUserAttr(userAttr); }*/ /*JSONObject attrInstance = new JSONObject(); attrInstance.put("bId",business.getbId()); storeServiceDaoImpl.saveUserAttrInstance(attrInstance);*/ } public IStoreServiceDao getStoreServiceDaoImpl() { return storeServiceDaoImpl; } public void setStoreServiceDaoImpl(IStoreServiceDao storeServiceDaoImpl) { this.storeServiceDaoImpl = storeServiceDaoImpl; } } UserService/src/main/java/com/java110/user/UserServiceApplicationStart.java
@@ -1,5 +1,8 @@ package com.java110.user; import com.java110.core.annotation.Java110ListenerDiscovery; import com.java110.event.center.DataFlowEventPublishing; import com.java110.event.service.BusinessServiceDataFlowEventPublishing; import com.java110.event.service.init.SystemStartLoadBusinessConfigure; import com.java110.service.init.ServiceStartInit; import org.apache.catalina.Context; @@ -32,6 +35,8 @@ */ @SpringBootApplication(scanBasePackages={"com.java110.service","com.java110.user","com.java110.core","com.java110.cache"}) @EnableDiscoveryClient @Java110ListenerDiscovery(listenerPublishClass = BusinessServiceDataFlowEventPublishing.class, basePackages = {"com.java110.user.listener"}) public class UserServiceApplicationStart { private final static String LISTENER_PATH = "java110.UserService.listeners"; @@ -52,6 +57,6 @@ ApplicationContext context = SpringApplication.run(UserServiceApplicationStart.class, args); ServiceStartInit.initSystemConfig(context); //加载业务侦听 SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH); // SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH); } } UserService/src/main/java/com/java110/user/listener/SaveUserAddressListener.java
@@ -8,6 +8,7 @@ import com.java110.common.exception.ListenerExecuteException; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.annotation.Java110Listener; import com.java110.core.context.DataFlowContext; import com.java110.core.factory.DataTransactionFactory; import com.java110.core.factory.GenerateCodeFactory; @@ -29,7 +30,7 @@ * 保存 用户信息 侦听 * Created by wuxw on 2018/5/18. */ @Service("saveUserAddress") @Java110Listener(name = "saveUserAddressListener") @Transactional public class SaveUserAddressListener implements BusinessServiceDataFlowListener{ UserService/src/main/java/com/java110/user/listener/SaveUserCredentialsListener.java
@@ -7,6 +7,7 @@ import com.java110.common.exception.ListenerExecuteException; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.annotation.Java110Listener; import com.java110.core.context.DataFlowContext; import com.java110.core.factory.DataTransactionFactory; import com.java110.entity.center.Business; @@ -26,7 +27,7 @@ * 保存 用户信息 侦听 * Created by wuxw on 2018/5/18. */ @Service("saveUserCredentials") @Java110Listener("saveUserCredentialsListener") @Transactional public class SaveUserCredentialsListener extends LoggerEngine implements BusinessServiceDataFlowListener{ UserService/src/main/java/com/java110/user/listener/SaveUserInfoListener.java
@@ -7,6 +7,7 @@ import com.java110.common.constant.StatusConstant; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.annotation.Java110Listener; import com.java110.core.factory.GenerateCodeFactory; import com.java110.core.context.DataFlowContext; import com.java110.core.factory.DataTransactionFactory; @@ -26,7 +27,7 @@ * 保存 用户信息 侦听 * Created by wuxw on 2018/5/18. */ @Service("saveUserInfo") @Java110Listener("saveUserInfoListener") @Transactional public class SaveUserInfoListener extends LoggerEngine implements BusinessServiceDataFlowListener{ UserService/src/main/java/com/java110/user/listener/SaveUserTagListener.java
@@ -8,6 +8,7 @@ import com.java110.common.exception.ListenerExecuteException; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.annotation.Java110Listener; import com.java110.core.context.DataFlowContext; import com.java110.core.factory.DataTransactionFactory; import com.java110.core.factory.GenerateCodeFactory; @@ -29,7 +30,7 @@ * 保存 用户信息 侦听 * Created by wuxw on 2018/5/18. */ @Service("saveUserTag") @Java110Listener("saveUserTagListener") @Transactional public class SaveUserTagListener extends LoggerEngine implements BusinessServiceDataFlowListener{ java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java
@@ -85,6 +85,11 @@ */ public static final String SERVICE_CODE_SAVE_USER_CREDENTIALS = "save.user.credentials"; /** * 保存商户信息 */ public static final String SERVICE_CODE_SAVE_STORE_INFO = "save.store.info"; java110-core/src/main/java/com/java110/core/annotation/Java110Listener.java
New file @@ -0,0 +1,21 @@ package com.java110.core.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; import java.lang.annotation.*; /** * Created by wuxw on 2018/7/2. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Java110Listener { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; } java110-core/src/main/java/com/java110/core/annotation/Java110ListenerDiscovery.java
New file @@ -0,0 +1,23 @@ package com.java110.core.annotation; import org.springframework.context.annotation.Import; import java.lang.annotation.*; /** * 侦听注入 * Created by wuxw on 2018/7/2. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(Java110ListenerDiscoveryRegistrar.class) public @interface Java110ListenerDiscovery { String[] basePackages() default {}; String[] value() default {}; Class<?> listenerPublishClass(); } java110-core/src/main/java/com/java110/core/annotation/Java110ListenerDiscoveryRegistrar.java
New file @@ -0,0 +1,197 @@ package com.java110.core.annotation; import com.java110.common.util.Assert; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.ResourceLoaderAware; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import java.beans.Introspector; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * 自定义侦听扫描 * Created by wuxw on 2018/7/2. */ public class Java110ListenerDiscoveryRegistrar implements ImportBeanDefinitionRegistrar,ResourceLoaderAware, BeanClassLoaderAware { private ResourceLoader resourceLoader; private ClassLoader classLoader; public Java110ListenerDiscoveryRegistrar(){ } @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { try { registerListener(importingClassMetadata,registry); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Override public void setBeanClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } /** * 注册侦听 * @param metadata * @param registry */ public void registerListener(AnnotationMetadata metadata, BeanDefinitionRegistry registry) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { ClassPathScanningCandidateComponentProvider scanner = getScanner(); scanner.setResourceLoader(this.resourceLoader); Set<String> basePackages; Map<String, Object> attrs = metadata .getAnnotationAttributes(Java110ListenerDiscovery.class.getName()); Object listenerPublishClassObj = attrs.get("listenerPublishClass"); Assert.notNull(listenerPublishClassObj,"Java110ListenerDiscovery 没有配置 listenerPublishClass 属性"); Class<?> listenerPublishClass = (Class<?>) listenerPublishClassObj; AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter( Java110Listener.class); scanner.addIncludeFilter(annotationTypeFilter); basePackages = getBasePackages(metadata); for (String basePackage : basePackages) { Set<BeanDefinition> candidateComponents = scanner .findCandidateComponents(basePackage); for (BeanDefinition candidateComponent : candidateComponents) { if (candidateComponent instanceof AnnotatedBeanDefinition) { // verify annotated class is an interface AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition) candidateComponent; AnnotationMetadata annotationMetadata = beanDefinition.getMetadata(); Map<String, Object> attributes = annotationMetadata .getAnnotationAttributes( Java110Listener.class.getCanonicalName()); String beanName = getListenerName(attributes,beanDefinition); /*BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(beanDefinition, beanName); BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry);*/ Method method = listenerPublishClass.getMethod("addListener",String.class); method.invoke(null,beanName); } } } } protected ClassPathScanningCandidateComponentProvider getScanner() { return new ClassPathScanningCandidateComponentProvider(false) { @Override protected boolean isCandidateComponent( AnnotatedBeanDefinition beanDefinition) { if (beanDefinition.getMetadata().isIndependent()) { // TODO until SPR-11711 will be resolved if (beanDefinition.getMetadata().isInterface() && beanDefinition.getMetadata() .getInterfaceNames().length == 1 && Annotation.class.getName().equals(beanDefinition .getMetadata().getInterfaceNames()[0])) { try { Class<?> target = ClassUtils.forName( beanDefinition.getMetadata().getClassName(), Java110ListenerDiscoveryRegistrar.this.classLoader); return !target.isAnnotation(); } catch (Exception ex) { this.logger.error( "Could not load target class: " + beanDefinition.getMetadata().getClassName(), ex); } } return true; } return false; } }; } protected Set<String> getBasePackages(AnnotationMetadata importingClassMetadata) { Map<String, Object> attributes = importingClassMetadata .getAnnotationAttributes(Java110ListenerDiscovery.class.getCanonicalName()); Set<String> basePackages = new HashSet<String>(); for (String pkg : (String[]) attributes.get("value")) { if (StringUtils.hasText(pkg)) { basePackages.add(pkg); } } for (String pkg : (String[]) attributes.get("basePackages")) { if (StringUtils.hasText(pkg)) { basePackages.add(pkg); } } if (basePackages.isEmpty()) { basePackages.add( ClassUtils.getPackageName(importingClassMetadata.getClassName())); } return basePackages; } /** * 获取名称 * @param listeners * @param beanDefinition * @return */ private String getListenerName(Map<String, Object> listeners,AnnotatedBeanDefinition beanDefinition) { if (listeners == null) { String shortClassName = ClassUtils.getShortName(beanDefinition.getBeanClassName()); return Introspector.decapitalize(shortClassName); } String value = (String) listeners.get("value"); if (!StringUtils.hasText(value)) { value = (String) listeners.get("name"); } if (StringUtils.hasText(value)) { return value; } String shortClassName = ClassUtils.getShortName(beanDefinition.getBeanClassName()); value = Introspector.decapitalize(shortClassName); return value; } } java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java
@@ -2,11 +2,11 @@ import com.java110.common.constant.CommonConstant; import com.java110.common.exception.BusinessException; import com.java110.common.factory.ApplicationContextFactory; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.event.center.event.DataFlowEvent; import com.java110.event.center.event.DataPreValidateEvent; import com.java110.event.center.event.ReceiveRequestEvent; import com.java110.core.context.DataFlow; import com.java110.event.center.event.*; import com.java110.event.center.listener.DataFlowListener; import java.lang.reflect.ParameterizedType; @@ -32,7 +32,7 @@ /** * 保存侦听实例信息,一般启动时加载 */ private final static List<DataFlowListener<?>> listeners = new ArrayList<DataFlowListener<?>>(); private final static List<String> listeners = new ArrayList<String>(); /** * 保存事件实例信息,一般启动时加载 @@ -52,15 +52,25 @@ * 添加 侦听,这个只有启动时,单线程 处理,所以是线程安全的 * @param listener */ public static void addListener(DataFlowListener<?> listener){ /*public static void addListener(DataFlowListener<?> listener){ listeners.add(listener); }*/ /** * 注解注册侦听 * @param listenerBeanName */ public static void addListener(String listenerBeanName){ //将 listener 放入 AppEventPublishing 中方便后期操作 //注册侦听 listeners.add(listenerBeanName); } /** * 获取侦听(全部侦听) * @return */ private static List<DataFlowListener<?>> getListeners(){ private static List<String> getListeners(){ return listeners; } @@ -72,7 +82,7 @@ */ private static List<DataFlowListener<?>> getListeners(String interfaceClassName){ Assert.isNull(interfaceClassName,"获取需要发布的事件处理侦听时,传递事件为空,请检查"); Assert.hasLength(interfaceClassName,"获取需要发布的事件处理侦听时,传递事件为空,请检查"); //先从缓存中获取,为了提升效率 if(cacheListenersMap.containsKey(interfaceClassName)){ @@ -80,7 +90,9 @@ } List<DataFlowListener<?>> dataFlowListeners = new ArrayList<DataFlowListener<?>>(); for(DataFlowListener<?> listener : getListeners()){ for(String listenerBeanName : getListeners()){ DataFlowListener<?> listener = ApplicationContextFactory.getBean(listenerBeanName,DataFlowListener.class); Type[] types = listener.getClass().getGenericInterfaces(); for (Type type : types) { if (type instanceof ParameterizedType) { @@ -141,7 +153,7 @@ */ private static void multicastEvent(final DataFlowEvent event, String asyn) { for (final DataFlowListener<?> listener : getListeners(event.getClass().getName())) { for (final DataFlowListener<?> listener : getListeners(event.getClass().getName())) { if(CommonConstant.PROCESS_ORDER_ASYNCHRONOUS.equals(asyn)){ //异步处理 @@ -206,5 +218,46 @@ multicastEvent(new DataPreValidateEvent("",null,requestData,headers)); } /** * 初始化 DataFlow 对象完成 * @param dataFlow 数据流对象 */ public static void initDataFlowComplete(DataFlow dataFlow){ multicastEvent(new DataFlowInitCompleteEvent("",dataFlow)); } /** * 规则校验完成事件 * @param dataFlow 数据流对象 */ public static void ruleValidateComplete(DataFlow dataFlow){ multicastEvent(new RuleValidateCompleteEvent("",dataFlow)); } /** * 加载配置文件完成 * @param dataFlow 数据流对象 */ public static void loadConfigDataComplete(DataFlow dataFlow){ multicastEvent(new LoadConfigDataCompleteEvent("",dataFlow)); } /** * 调用业务系统事件 * @param dataFlow 数据流 */ public static void invokeBusinessSystem(DataFlow dataFlow){ multicastEvent(new InvokeBusinessSystemEvent("",dataFlow)); } /** * 数据返回事件 * @param dataFlow 数据流 */ public static void dataResponse(DataFlow dataFlow,String responseData,Map<String,String> headers){ multicastEvent(new DataResponseEvent("",dataFlow,responseData,headers)); } /***********************************************发布侦听 结束***************************************************************/ } java110-event/src/main/java/com/java110/event/center/event/DataResponseEvent.java
@@ -2,11 +2,18 @@ import com.java110.core.context.DataFlow; import java.util.Map; /** * 规则校验完成事件 * Created by wuxw on 2018/7/2. */ public class DataResponseEvent extends DataFlowEvent { private final String responseData; private final Map<String,String> headers; /** * Constructs a prototypical Event. * @@ -14,7 +21,17 @@ * @param dataFlow * @throws IllegalArgumentException if source is null. */ public DataResponseEvent(Object source, DataFlow dataFlow) { public DataResponseEvent(Object source, DataFlow dataFlow,String responseData, Map<String,String> headers) { super(source, dataFlow); this.responseData = responseData; this.headers = headers; } public String getResponseData() { return responseData; } public Map<String, String> getHeaders() { return headers; } } java110-event/src/main/java/com/java110/event/center/event/ReceiveRequestEvent.java
@@ -25,4 +25,12 @@ this.requestData = requestData; this.headers = headers; } public String getRequestData() { return requestData; } public Map<String, String> getHeaders() { return headers; } } java110-event/src/main/java/com/java110/event/center/init/EventConfigInit.java
@@ -1,14 +1,11 @@ package com.java110.event.center.init; import com.java110.common.factory.ApplicationContextFactory; import com.java110.event.app.AppEventPublishing; import com.java110.event.center.DataFlowEventPublishing; import com.java110.event.center.listener.DataFlowListener; import org.apache.commons.lang3.StringUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PropertiesLoaderUtils; import javax.naming.ConfigurationException; import java.util.Properties; /** @@ -70,13 +67,9 @@ String[] listeners = properties.getProperty(DATAFLOW_LISTENER).split("\\,"); for(String listener : listeners){ //这里不能直接反射,这样 IXXXService 无法注入,所以直接从spring 中获取已经注入的 DataFlowListener<?> dataFlowListener = (DataFlowListener<?>) ApplicationContextFactory.getBean(listener); //将 listener 放入 AppEventPublishing 中方便后期操作 //注册侦听 DataFlowEventPublishing.addListener(dataFlowListener); DataFlowEventPublishing.addListener(listener); } } java110-event/src/main/java/com/java110/event/center/listener/DataFlowListener.java
@@ -1,5 +1,7 @@ package com.java110.event.center.listener; import com.java110.event.center.event.DataFlowEvent; import java.util.EventListener; java110-event/src/main/java/com/java110/event/service/BusinessServiceDataFlowEventPublishing.java
@@ -3,6 +3,7 @@ import com.java110.common.constant.CommonConstant; import com.java110.common.constant.ResponseConstant; import com.java110.common.exception.BusinessException; import com.java110.common.factory.ApplicationContextFactory; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.core.context.DataFlowContext; @@ -29,7 +30,7 @@ /** * 保存侦听实例信息,一般启动时加载 */ private final static List<BusinessServiceDataFlowListener> listeners = new ArrayList<BusinessServiceDataFlowListener>(); private final static List<String> listeners = new ArrayList<String>(); /** * 根据 事件类型查询侦听 @@ -40,7 +41,7 @@ * 添加 侦听,这个只有启动时,单线程 处理,所以是线程安全的 * @param listener */ public static void addListenner(BusinessServiceDataFlowListener listener){ public static void addListener(String listener){ listeners.add(listener); } @@ -48,7 +49,7 @@ * 获取侦听(全部侦听) * @return */ public static List<BusinessServiceDataFlowListener> getListeners(){ public static List<String> getListeners(){ return listeners; } @@ -68,7 +69,8 @@ } List<BusinessServiceDataFlowListener> dataFlowListeners = new ArrayList<BusinessServiceDataFlowListener>(); for(BusinessServiceDataFlowListener listener : getListeners()){ for(String listenerBeanName : getListeners()){ BusinessServiceDataFlowListener listener = ApplicationContextFactory.getBean(listenerBeanName,BusinessServiceDataFlowListener.class); if(serviceCode.equals(listener.getServiceCode())){ dataFlowListeners.add(listener); } java110-event/src/main/java/com/java110/event/service/init/SystemStartLoadBusinessConfigure.java
@@ -64,10 +64,10 @@ //这里不能直接反射,这样 IXXXService 无法注入,所以直接从spring 中获取已经注入的 //AppListener<?> appListener = (AppListener<?>)Class.forName(listener).newInstance(); try { BusinessServiceDataFlowListener businessServiceDataFlowListener = (BusinessServiceDataFlowListener) ApplicationContextFactory.getBean(listener); // BusinessServiceDataFlowListener businessServiceDataFlowListener = (BusinessServiceDataFlowListener) ApplicationContextFactory.getBean(listener); //将 listener 放入 AppEventPublishing 中方便后期操作 //注册侦听 BusinessServiceDataFlowEventPublishing.addListenner(businessServiceDataFlowListener); BusinessServiceDataFlowEventPublishing.addListener(listener); }catch (Exception e){ }