Bladeren bron

处理cms管理员接口发布文档内存溢出问题

o2sword 4 jaren geleden
bovenliggende
commit
80346aa59d

+ 2 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/ThisApplication.java

@@ -42,7 +42,7 @@ public class ThisApplication {
 	// 执行数据库中的批处理操作
 	public static final QueueBatchOperation queueBatchOperation = new QueueBatchOperation();
 	// Document发布时,向所有阅读者推送通知
-	public static final QueueSendDocumentNotify queueSendDocumentNotify = new QueueSendDocumentNotify();
+	public static QueueSendDocumentNotify queueSendDocumentNotify = new QueueSendDocumentNotify();
 	private static final ConcurrentHashMap<String, DataImportStatus> importStatus = new ConcurrentHashMap<>();
 
 	public static Context context() {
@@ -58,6 +58,7 @@ public class ThisApplication {
 		context().startQueue(queueDataRowImport);
 		context().startQueue(queueDocumentUpdate);
 		context().startQueue(queueDocumentViewCountUpdate);
+		queueSendDocumentNotify.initFixedThreadPool(3);
 		context().startQueue(queueSendDocumentNotify);
 
 		// 每天凌晨2点执行一次

+ 14 - 14
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishAndNotify.java

@@ -69,20 +69,20 @@ public class ActionPersistPublishAndNotify extends BaseAction {
 				modifyDocStatus( id, "published", effectivePerson.getDistinguishedName() );
 				document.setDocStatus("published");
 				document.setPublishTime(new Date());
-				
+
 				document = documentPersistService.refreshDocInfoData( document );
-				
+
 				Wo wo = new Wo();
 				wo.setId( document.getId() );
 				result.setData( wo );
-				
+
 				//检查是否需要删除热点图片
 				try {
 					ThisApplication.queueDocumentUpdate.send( document );
 				} catch ( Exception e1 ) {
 					e1.printStackTrace();
 				}
-				
+
 			} catch (Exception e) {
 				Exception exception = new ExceptionDocumentInfoProcess(e, "系统将文档状态修改为发布状态时发生异常。Id:" + id);
 				result.error(exception);
@@ -186,7 +186,7 @@ public class ActionPersistPublishAndNotify extends BaseAction {
 				logger.error(e, effectivePerson, request, null);
 			}
 		}
-		
+
 		//判断是否需要发送通知消息
 		if (check) {
 			try {
@@ -204,7 +204,7 @@ public class ActionPersistPublishAndNotify extends BaseAction {
 //					}
 					if( categoryInfo.getSendNotify() ){
 						logger.info("try to add notify object to queue for document:" + document.getTitle() );
-						ThisApplication.queueSendDocumentNotify.send( document );
+						ThisApplication.queueSendDocumentNotify.send( document.getId() );
 					}
 				}
 			} catch (Exception e) {
@@ -221,21 +221,21 @@ public class ActionPersistPublishAndNotify extends BaseAction {
 	}
 
 	public static class Wi {
-		
+
 		public static WrapCopier<Wi, Document> copier = WrapCopierFactory.wi( Wi.class, Document.class, null, JpaObject.FieldsUnmodify );
-		
+
 		@FieldDescribe( "文档读者." )
 		private List<PermissionInfo> readerList = null;
-		
+
 		@FieldDescribe( "文档编辑者." )
 		private List<PermissionInfo> authorList = null;
-		
+
 		@FieldDescribe( "图片列表." )
 		private List<String> cloudPictures = null;
-		
+
 		@FieldDescribe( "不修改权限(跳过权限设置,保留原来的设置)." )
 		private Boolean skipPermission  = false;
-		
+
 		public Boolean getSkipPermission() {
 			return skipPermission;
 		}
@@ -269,8 +269,8 @@ public class ActionPersistPublishAndNotify extends BaseAction {
 		}
 
 	}
-	
+
 	public static class Wo extends WoId {
 
 	}
-}
+}

+ 4 - 4
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishByWorkFlow.java

@@ -377,8 +377,8 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 			}
 		}
 
-		//判断是否需要发送通知消息
-		if (check) {
+		//判断是否需要发送通知消息 后端业务接口不需要发送消息
+		/*if (check) {
 			try {
 				Boolean notify = false;
 				if( categoryInfo.getSendNotify() == null ) {
@@ -392,7 +392,7 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 				}
 				if( notify ){
 					logger.info("try to add notify object to queue for document:" + document.getTitle() );
-					ThisApplication.queueSendDocumentNotify.send( document );
+					ThisApplication.queueSendDocumentNotify.send( document.getId() );
 				}
 			} catch (Exception e) {
 				check = false;
@@ -400,7 +400,7 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 				result.error( exception );
 				logger.error( e, effectivePerson, request, null);
 			}
-		}
+		}*/
 
 		CacheManager.notify(Document.class);
 		return result;

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishContent.java

@@ -441,7 +441,7 @@ public class ActionPersistPublishContent extends BaseAction {
 				}
 				if( notify ){
 					logger.debug("try to add notify object to queue for document:" + document.getTitle() );
-					ThisApplication.queueSendDocumentNotify.send( document );
+					ThisApplication.queueSendDocumentNotify.send( document.getId() );
 				}
 			} catch (Exception e) {
 				check = false;

+ 53 - 53
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/queue/QueueSendDocumentNotify.java

@@ -25,72 +25,72 @@ import java.util.List;
 /**
  * Document正式发布后,向所有的阅读者推送消息通知
  */
-public class QueueSendDocumentNotify extends AbstractQueue<Document> {
-	
+public class QueueSendDocumentNotify extends AbstractQueue<String> {
+
 	private static  Logger logger = LoggerFactory.getLogger( QueueSendDocumentNotify.class );
 	private UserManagerService userManagerService = new UserManagerService();
 
-	public void execute( Document document ) throws Exception {
-		logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>QueueSendDocumentNotify:" + document.getTitle() );
-		if( document == null ) {
+	public void execute( String documentId ) throws Exception {
+		logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start QueueSendDocumentNotify:" + documentId );
+		if( StringUtils.isEmpty(documentId) ) {
 			logger.debug("can not send publish notify , document is NULL!" );
 			return;
 		}
-		if( !StringUtils.equalsIgnoreCase( "信息" , document.getDocumentType()) ) {
-			logger.debug("can not send publish notify , document is not '信息'!" );
-			return;
-		}
-		logger.debug("send publish notify for new document:" + document.getTitle() );
+		List<String> persons = null;
+		Document document = null;
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			AppInfo appInfo = emc.find( document.getAppId(), AppInfo.class );
-			CategoryInfo category = emc.find( document.getCategoryId(), CategoryInfo.class );
-
-			if( appInfo != null && category != null ) {
-				ReviewService reviewService = new ReviewService();
-				List<String> persons = reviewService.listPermissionPersons( appInfo, category, document );
-				if( ListTools.isNotEmpty( persons )) {
-					//有可能是*, 一般是所有的人员标识列表
-					if( persons.contains( "*" )) {
-						String topUnitName = document.getCreatorTopUnitName();
-						logger.debug(">>>>>document.getCreatorTopUnitName()=" + topUnitName );
-						if( StringUtils.equalsAnyIgnoreCase("cipher",topUnitName ) || StringUtils.equalsAnyIgnoreCase("xadmin", topUnitName) ){
-							//取发起人所有顶层组织
-							if( !StringUtils.equalsAnyIgnoreCase("cipher",document.getCreatorIdentity() ) &&
-								!StringUtils.equalsAnyIgnoreCase("xadmin",document.getCreatorIdentity() )){
-								topUnitName = userManagerService.getTopUnitNameByIdentity(document.getCreatorIdentity());
-							}else if(!StringUtils.equalsAnyIgnoreCase("cipher",document.getCreatorPerson() ) &&
-									!StringUtils.equalsAnyIgnoreCase("xadmin",document.getCreatorPerson() )){
-								topUnitName = userManagerService.getTopUnitNameWithPerson(document.getCreatorPerson());
+			document = emc.find(documentId, Document.class);
+			if(document !=null && StringUtils.equals( "信息" , document.getDocumentType())) {
+				logger.debug("send publish notify for new document:" + document.getTitle() );
+				AppInfo appInfo = emc.find(document.getAppId(), AppInfo.class);
+				CategoryInfo category = emc.find(document.getCategoryId(), CategoryInfo.class);
+
+				if (appInfo != null && category != null) {
+					ReviewService reviewService = new ReviewService();
+					persons = reviewService.listPermissionPersons(appInfo, category, document);
+					if (ListTools.isNotEmpty(persons)) {
+						//有可能是*, 一般是所有的人员标识列表
+						if (persons.contains("*")) {
+							String topUnitName = document.getCreatorTopUnitName();
+							logger.debug(">>>>>document.getCreatorTopUnitName()=" + topUnitName);
+							if (StringUtils.equalsAnyIgnoreCase("cipher", topUnitName) || StringUtils.equalsAnyIgnoreCase("xadmin", topUnitName)) {
+								//取发起人所有顶层组织
+								if (!StringUtils.equalsAnyIgnoreCase("cipher", document.getCreatorIdentity()) &&
+										!StringUtils.equalsAnyIgnoreCase("xadmin", document.getCreatorIdentity())) {
+									topUnitName = userManagerService.getTopUnitNameByIdentity(document.getCreatorIdentity());
+								} else if (!StringUtils.equalsAnyIgnoreCase("cipher", document.getCreatorPerson()) &&
+										!StringUtils.equalsAnyIgnoreCase("xadmin", document.getCreatorPerson())) {
+									topUnitName = userManagerService.getTopUnitNameWithPerson(document.getCreatorPerson());
+								}
+							}
+							if (StringUtils.isNotEmpty(topUnitName)) {
+								//取顶层组织的所有人
+								persons = listPersonWithUnit(topUnitName);
+							} else {
+								persons = new ArrayList<>();
 							}
-						}
-						if( StringUtils.isNotEmpty( topUnitName )){
-							//取顶层组织的所有人
-							persons = listPersonWithUnit( topUnitName );
-						}else{
-							persons = new ArrayList<>();
 						}
 					}
+				} else {
+					logger.debug("can not send publish notify for document, category or  appinfo not exists! ID: " + document.getId());
 				}
-				if( ListTools.isNotEmpty( persons )) {
-					//去一下重复
-			        HashSet<String> set = new HashSet<String>( persons );
-			        persons.clear();
-			        persons.addAll(set);
-			        
-					MessageWo wo = MessageWo.copier.copy(document);
-					for( String person : persons ) {
-						if( !StringUtils.equals( "*", person  )) {
-							MessageFactory.cms_publish(person, wo);
-						}
-					}
-					logger.debug("cms send total count:" + persons.size()  );
+			}
+		}
+		if( ListTools.isNotEmpty( persons )) {
+			//去一下重复
+			HashSet<String> set = new HashSet<String>( persons );
+			persons.clear();
+			persons.addAll(set);
+
+			MessageWo wo = MessageWo.copier.copy(document);
+			for( String person : persons ) {
+				if( !StringUtils.equals( "*", person  )) {
+					MessageFactory.cms_publish(person, wo);
 				}
-				logger.debug("cms send publish notify for new document completed! " );
-				//}
-			}else{
-				logger.debug("can not send publish notify for document, category or  appinfo not exists! ID: " + document.getId() );
 			}
+			logger.debug(documentId +" cms send total count:" + persons.size()  );
 		}
+		logger.debug(documentId + " QueueSendDocumentNotify cms send publish notify for new document completed! " );
 	}
 
 	/**
@@ -108,7 +108,7 @@ public class QueueSendDocumentNotify extends AbstractQueue<Document> {
 		}
 		return persons;
 	}
-	
+
 	public static class MessageWo{
 
 		public static List<String> Excludes = new ArrayList<String>();