Ver código fonte

Merge branch 'hotfix/embed' into 'develop'

修改embed调用线程错误.

See merge request o2oa/o2oa!111
o2null 5 anos atrás
pai
commit
3326f404bf

+ 0 - 1
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/factory/PersonFactory.java

@@ -120,7 +120,6 @@ public class PersonFactory extends AbstractFactory {
 		p = cb.or(p, cb.equal(root.get(Person_.open4Id), credential));
 		p = cb.or(p, cb.equal(root.get(Person_.open5Id), credential));
 		cq.select(root.get(Person_.id));
-		Query query = em.createQuery(cq.where(p));
 		List<String> list = em.createQuery(cq.where(p).distinct(true)).getResultList();
 		if (list.size() == 1) {
 			return list.get(0);

+ 58 - 75
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/work/ActionAssignCreate.java

@@ -3,7 +3,6 @@ package com.x.processplatform.service.processing.jaxrs.work;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.concurrent.Callable;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -11,9 +10,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -27,7 +23,6 @@ import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.config.StorageMapping;
 import com.x.base.core.project.exception.ExceptionEntityNotExist;
-import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
 import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
@@ -51,11 +46,15 @@ import com.x.processplatform.service.processing.MessageFactory;
 import com.x.processplatform.service.processing.ThisApplication;
 import com.x.processplatform.service.processing.WorkDataHelper;
 
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
 /**
  * 创建处于start状态的work
  * 
  * @author Rui
  *
+ * 此方法不需要推入线程池运行
  */
 class ActionAssignCreate extends BaseAction {
 
@@ -67,86 +66,70 @@ class ActionAssignCreate extends BaseAction {
 		Wo wo = new Wo();
 		Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
 		Boolean processing = wi.getProcessing();
-		CallWrapObject callWrapObject = new CallWrapObject();
-
-		Callable<String> callable = new Callable<String>() {
-			public String call() throws Exception {
-				try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-					Business business = new Business(emc);
-					List<String> applicationIds = listApplication(business, wi.getApplication());
-					if (ListTools.isEmpty(applicationIds)) {
-						throw new ExceptionEntityNotExist(wi.getApplication(), Application.class);
-					}
-					Process process = getProcess(business, applicationIds, wi.getProcess());
-					Application application = business.element().get(process.getApplication(), Application.class);
-					Begin begin = business.element().getBeginWithProcess(process.getId());
-					Work work = create(application, process, begin);
-					callWrapObject.job = work.getJob();
-					callWrapObject.id = work.getId();
-					String identityDn = business.organization().identity().get(wi.getIdentity());
-					if (StringUtils.isEmpty(identityDn)) {
-						throw new ExceptionIdentityNotExist(wi.getIdentity());
-					}
-					work.setTitle(wi.getTitle());
-					work.setCreatorIdentity(identityDn);
-					work.setCreatorPerson(business.organization().person().getWithIdentity(identityDn));
-					work.setCreatorUnit(business.organization().unit().getWithIdentity(identityDn));
-					/* 通过赋值调用的是不能被作为草稿删除的 */
-					work.setDataChanged(true);
-					if (ListTools.isNotEmpty(wi.getAttachmentList())) {
-						emc.beginTransaction(Attachment.class);
-						/** 这个attachmentList要手动初始化 */
-						// work.setAttachmentList(new ArrayList<String>());
-						for (WiAttachment o : wi.getAttachmentList()) {
-							StorageMapping fromMapping = ThisApplication.context().storageMappings()
-									.get(Attachment.class, o.getStorage());
-							if (null == fromMapping) {
-								throw new ExceptionFromMappingNotExist(o.getStorage());
-							}
-							StorageMapping toMapping = ThisApplication.context().storageMappings()
-									.random(Attachment.class);
-							if (null == toMapping) {
-								throw new ExceptionToMappingNotExist(Attachment.class);
-							}
-							Attachment attachment = new Attachment(work, effectivePerson.getDistinguishedName(),
-									o.getSite());
-							attachment.setActivity(begin.getId());
-							attachment.setActivityName(begin.getName());
-							attachment.setActivityType(ActivityType.begin);
-							attachment.setActivityToken(work.getActivityToken());
-							attachment.saveContent(toMapping, o.readContent(fromMapping), o.getName());
-							emc.persist(attachment, CheckPersistType.all);
-						}
+
+		Work work = null;
+
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			List<String> applicationIds = listApplication(business, wi.getApplication());
+			if (ListTools.isEmpty(applicationIds)) {
+				throw new ExceptionEntityNotExist(wi.getApplication(), Application.class);
+			}
+			Process process = getProcess(business, applicationIds, wi.getProcess());
+			Application application = business.element().get(process.getApplication(), Application.class);
+			Begin begin = business.element().getBeginWithProcess(process.getId());
+			work = create(application, process, begin);
+			String identityDn = business.organization().identity().get(wi.getIdentity());
+			if (StringUtils.isEmpty(identityDn)) {
+				throw new ExceptionIdentityNotExist(wi.getIdentity());
+			}
+			work.setTitle(wi.getTitle());
+			work.setCreatorIdentity(identityDn);
+			work.setCreatorPerson(business.organization().person().getWithIdentity(identityDn));
+			work.setCreatorUnit(business.organization().unit().getWithIdentity(identityDn));
+			/* 通过赋值调用的是不能被作为草稿删除的 */
+			work.setDataChanged(true);
+			if (ListTools.isNotEmpty(wi.getAttachmentList())) {
+				emc.beginTransaction(Attachment.class);
+				/** 这个attachmentList要手动初始化 */
+				// work.setAttachmentList(new ArrayList<String>());
+				for (WiAttachment o : wi.getAttachmentList()) {
+					StorageMapping fromMapping = ThisApplication.context().storageMappings().get(Attachment.class,
+							o.getStorage());
+					if (null == fromMapping) {
+						throw new ExceptionFromMappingNotExist(o.getStorage());
 					}
-					emc.beginTransaction(Work.class);
-					emc.persist(work, CheckPersistType.all);
-					if (null != wi.getData()) {
-						WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
-						workDataHelper.update(wi.getData());
+					StorageMapping toMapping = ThisApplication.context().storageMappings().random(Attachment.class);
+					if (null == toMapping) {
+						throw new ExceptionToMappingNotExist(Attachment.class);
 					}
-					emc.commit();
-					MessageFactory.work_create(work);
+					Attachment attachment = new Attachment(work, effectivePerson.getDistinguishedName(), o.getSite());
+					attachment.setActivity(begin.getId());
+					attachment.setActivityName(begin.getName());
+					attachment.setActivityType(ActivityType.begin);
+					attachment.setActivityToken(work.getActivityToken());
+					attachment.saveContent(toMapping, o.readContent(fromMapping), o.getName());
+					emc.persist(attachment, CheckPersistType.all);
 				}
-				return "";
 			}
-		};
-
-		ProcessPlatformExecutorFactory.get(wi.getProcess()).submit(callable).get();
-
+			emc.beginTransaction(Work.class);
+			emc.persist(work, CheckPersistType.all);
+			if (null != wi.getData()) {
+				WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
+				workDataHelper.update(wi.getData());
+			}
+			emc.commit();
+		}
+		MessageFactory.work_create(work);
 		if (BooleanUtils.isTrue(processing)) {
 			ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
-					Applications.joinQueryUri("work", callWrapObject.id, "processing"), null, callWrapObject.job);
+					Applications.joinQueryUri("work", work.getId(), "processing"), null, work.getJob());
 		}
-		wo.setId(callWrapObject.id);
+		wo.setId(work.getId());
 		result.setData(wo);
 		return result;
 	}
 
-	public static class CallWrapObject {
-		private String job;
-		private String id;
-	}
-
 	public static class Wi extends GsonPropertyObject {
 
 		@FieldDescribe("应用标识")
@@ -282,7 +265,7 @@ class ActionAssignCreate extends BaseAction {
 		work.setProcessAlias(process.getAlias());
 		work.setJob(StringTools.uniqueToken());
 		work.setStartTime(now);
-//		work.setErrorRetry(0);
+		// work.setErrorRetry(0);
 		work.setWorkStatus(WorkStatus.start);
 		work.setDestinationActivity(begin.getId());
 		work.setDestinationActivityType(ActivityType.begin);

+ 19 - 29
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/work/ActionCreate.java

@@ -1,13 +1,11 @@
 package com.x.processplatform.service.processing.jaxrs.work;
 
 import java.util.Date;
-import java.util.concurrent.Callable;
 
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.annotation.CheckPersistType;
-import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
@@ -26,7 +24,8 @@ import com.x.processplatform.service.processing.WorkDataHelper;
  * 创建处于start状态的work
  * 
  * @author Rui
- *
+ * 
+ * 此方法不需要推入线程池运行
  */
 class ActionCreate extends BaseAction {
 
@@ -35,33 +34,24 @@ class ActionCreate extends BaseAction {
 
 		ActionResult<Wo> result = new ActionResult<>();
 		Wo wo = new Wo();
+		Work work = null;
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			Process process = business.element().get(processId, Process.class);
+			Application application = business.element().get(process.getApplication(), Application.class);
+			Begin begin = business.element().getBeginWithProcess(process.getId());
 
-		Callable<String> callable = new Callable<String>() {
-			public String call() throws Exception {
-				try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-					Business business = new Business(emc);
-					Process process = business.element().get(processId, Process.class);
-					Application application = business.element().get(process.getApplication(), Application.class);
-					Begin begin = business.element().getBeginWithProcess(process.getId());
-
-					Work work = create(application, process, begin);
-					emc.beginTransaction(Work.class);
-					if ((null != jsonElement) && jsonElement.isJsonObject()) {
-						WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
-						workDataHelper.update(jsonElement);
-					}
-					emc.persist(work, CheckPersistType.all);
-					emc.commit();
-					wo.setId(work.getId());
-					MessageFactory.work_create(work);
-				}
-				return "";
+			work = create(application, process, begin);
+			emc.beginTransaction(Work.class);
+			if ((null != jsonElement) && jsonElement.isJsonObject()) {
+				WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
+				workDataHelper.update(jsonElement);
 			}
-		};
-
-		/* 根据流程应用id分派进程号. */
-		ProcessPlatformExecutorFactory.get(processId).submit(callable).get();
-
+			emc.persist(work, CheckPersistType.all);
+			emc.commit();
+			wo.setId(work.getId());
+		}
+		MessageFactory.work_create(work);
 		result.setData(wo);
 		return result;
 	}
@@ -85,7 +75,7 @@ class ActionCreate extends BaseAction {
 		work.setProcessAlias(process.getAlias());
 		work.setJob(StringTools.uniqueToken());
 		work.setStartTime(now);
-//		work.setErrorRetry(0);
+		// work.setErrorRetry(0);
 		work.setWorkStatus(WorkStatus.start);
 		work.setDestinationActivity(begin.getId());
 		work.setDestinationActivityType(ActivityType.begin);