diff --git a/o2server/x_console/src/main/java/com/x/server/console/Main.java b/o2server/x_console/src/main/java/com/x/server/console/Main.java index 9d4d69147befda41b19bb60dd0ef54631e64ea2a..bc2973fc3072b91c3093324b5e960872057770de 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/Main.java +++ b/o2server/x_console/src/main/java/com/x/server/console/Main.java @@ -55,12 +55,12 @@ public class Main { /* getVersion需要FileUtils在后面运行 */ cleanTempDir(base); createTempClassesDirectory(base); - //LogTools.setSlf4jSimple(); + // LogTools.setSlf4jSimple(); try { Main.class.getClassLoader().loadClass("org.slf4j.impl.SimpleLogger"); LogTools.setSlf4jSimple(); - }catch(ClassNotFoundException ex) { - System.out.println("ignore:"+ex.getMessage()); + } catch (ClassNotFoundException ex) { + System.out.println("ignore:" + ex.getMessage()); slf4jOtherImplOn = true; } org.slf4j.impl.StaticLoggerBinder.getSingleton(); @@ -125,7 +125,7 @@ public class Main { } } }.start(); - + /* 启动NodeAgent */ if (BooleanUtils.isTrue(Config.currentNode().nodeAgentEnable())) { NodeAgent nodeAgent = new NodeAgent(); @@ -157,48 +157,48 @@ public class Main { matcher = CommandFactory.start_pattern.matcher(cmd); if (matcher.find()) { switch (matcher.group(1)) { - case "application": - startApplicationServer(); - break; - case "center": - startCenterServer(); - break; - case "web": - startWebServer(); - break; - case "storage": - startStorageServer(); - break; - case "data": - startDataServer(); - break; - default: - startAll(); - break; + case "application": + startApplicationServer(); + break; + case "center": + startCenterServer(); + break; + case "web": + startWebServer(); + break; + case "storage": + startStorageServer(); + break; + case "data": + startDataServer(); + break; + default: + startAll(); + break; } continue; } matcher = CommandFactory.stop_pattern.matcher(cmd); if (matcher.find()) { switch (matcher.group(1)) { - case "application": - stopApplicationServer(); - break; - case "center": - stopCenterServer(); - break; - case "web": - stopWebServer(); - break; - case "storage": - stopStorageServer(); - break; - case "data": - stopDataServer(); - break; - default: - stopAll(); - break; + case "application": + stopApplicationServer(); + break; + case "center": + stopCenterServer(); + break; + case "web": + stopWebServer(); + break; + case "storage": + stopStorageServer(); + break; + case "data": + stopDataServer(); + break; + default: + stopAll(); + break; } continue; } @@ -245,25 +245,9 @@ public class Main { } /* 关闭定时器 */ scheduler.shutdown(); - // } SystemOutErrorSideCopyBuilder.stop(); } - private static boolean test() { - try { - DeploymentManager deployer = Servers.applicationServer.getBean(DeploymentManager.class); - for (App app : deployer.getApps()) { - System.out.println(app.getContextPath()); - if (StringUtils.equals("/x_query_assemble_designer", app.getContextPath())) { - app.getContextHandler().stop(); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return true; - } - private static boolean createEncryptKey() { try { return new ActionCreateEncryptKey().execute(); diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java b/o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java index 74175f3af4775acce902b5bdedd1bc85961e243f..ba8fd23cb37e3fa1c3ad81bab0f4b3bbce53a767 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java @@ -2,10 +2,6 @@ package com.x.server.console.action; import java.util.Objects; -import com.x.base.core.project.config.Config; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; - import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -13,8 +9,13 @@ import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; + /* @author zhourui @@ -132,7 +133,7 @@ public class ActionControl extends ActionBase { private static Option ecOption() { return Option.builder("ec").longOpt("eraseContent").argName("type").hasArg().optionalArg(false) - .desc("清空实例数据,保留设计数据,type可选值 bbs cms log processPlatform message org.").build(); + .desc("清空实例数据,保留设计数据,type可选值: bbs,cms,log,processPlatform,message,org或者实体类名.").build(); } private static Option clh2Option() { @@ -183,26 +184,31 @@ public class ActionControl extends ActionBase { } String type = Objects.toString(cmd.getOptionValue("ec")); switch (type) { - case "processPlatform": - new EraseContentProcessPlatform().execute(); - break; - case "bbs": - new EraseContentBbs().execute(); - break; - case "cms": - new EraseContentCms().execute(); - break; - case "log": - new EraseContentLog().execute(); - break; - case "message": - new EraseContentMessage().execute(); - break; - case "org": - new EraseContentOrg().execute(); - break; - default: - logger.print("type may be processPlatform bbs cms log message."); + case "processPlatform": + new EraseContentProcessPlatform().execute(); + break; + case "bbs": + new EraseContentBbs().execute(); + break; + case "cms": + new EraseContentCms().execute(); + break; + case "log": + new EraseContentLog().execute(); + break; + case "message": + new EraseContentMessage().execute(); + break; + case "org": + new EraseContentOrg().execute(); + break; + default: + EraseContentEntity eraseContentEntity = new EraseContentEntity(); + for (String str : StringUtils.split(type, ",")) { + eraseContentEntity.addClass(str); + } + eraseContentEntity.execute(); + break; } } diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContent.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContent.java new file mode 100644 index 0000000000000000000000000000000000000000..73b59d665d8dd41d9f4422a8dcade59523c0ac13 --- /dev/null +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContent.java @@ -0,0 +1,169 @@ +package com.x.server.console.action; + +import java.io.File; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + +import org.apache.commons.collections4.ListUtils; +import org.apache.openjpa.persistence.OpenJPAPersistence; + +import com.x.base.core.container.factory.PersistenceXmlHelper; +import com.x.base.core.entity.JpaObject; +import com.x.base.core.entity.StorageObject; +import com.x.base.core.entity.annotation.ContainerEntity; +import com.x.base.core.entity.dataitem.DataItem; +import com.x.base.core.entity.dataitem.ItemCategory; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.config.StorageMapping; +import com.x.base.core.project.config.StorageMappings; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.DateTools; +import com.x.base.core.project.tools.ListTools; + +public abstract class EraseContent { + + private static Logger logger = LoggerFactory.getLogger(EraseContent.class); + + private Date start; + + private String name; + + private List classNames = new ArrayList<>(); + + private ItemCategory itemCategory; + + public abstract boolean execute() throws Exception; + + protected void addClass(Class cls) { + this.classNames.add(cls.getName()); + } + + protected void addClass(String className) { + this.classNames.add(className); + } + + protected void init(String name, ItemCategory itemCategory) throws Exception { + this.name = name; + this.itemCategory = itemCategory; + this.start = new Date(); + } + + protected void run() throws Exception { + logger.print("erase {} content data: start at {}.", name, DateTools.format(start)); + this.classNames = ListUtils.intersection(this.classNames, + (List) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES)); + StorageMappings storageMappings = Config.storageMappings(); + File persistence = new File(Config.dir_local_temp_classes(), + DateTools.compact(this.start) + "_eraseContent.xml"); + PersistenceXmlHelper.write(persistence.getAbsolutePath(), classNames); + for (int i = 0; i < classNames.size(); i++) { + Class cls = (Class) Class.forName(classNames.get(i)); + EntityManagerFactory emf = OpenJPAPersistence.createEntityManagerFactory(cls.getName(), + persistence.getName(), PersistenceXmlHelper.properties(cls.getName(), Config.slice().getEnable())); + EntityManager em = emf.createEntityManager(); + + if (DataItem.class.isAssignableFrom(cls)) { + Long total = this.estimateItemCount(em, cls); + logger.print("erase {} content data:{}, total {}.", name, cls.getName(), total); + this.eraseItem(cls, em, total); + } else { + Long total = this.estimateCount(em, cls); + logger.print("erase {} content data:{}, total {}.", name, cls.getName(), total); + this.erase(cls, em, storageMappings, total); + } + } + Date end = new Date(); + logger.print("erase {} content data: completed at {}, elapsed {} ms.", name, DateTools.format(end), + (end.getTime() - start.getTime())); + } + + private long estimateCount(EntityManager em, Class cls) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(cls); + cq.select(cb.count(root)); + return em.createQuery(cq).getSingleResult(); + } + + private long estimateItemCount(EntityManager em, Class cls) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(cls); + Predicate p = cb.equal(root.get(DataItem.itemCategory_FIELDNAME), this.itemCategory); + cq.select(cb.count(root)).where(p); + return em.createQuery(cq).getSingleResult(); + } + + private Long erase(Class cls, EntityManager em, StorageMappings storageMappings, Long total) + throws Exception { + Long count = 0L; + List list = null; + ContainerEntity containerEntity = cls.getAnnotation(ContainerEntity.class); + + do { + if (ListTools.isNotEmpty(list)) { + em.getTransaction().begin(); + for (T t : list) { + em.remove(t); + } + em.getTransaction().commit(); + if (StorageObject.class.isAssignableFrom(cls)) { + for (T t : list) { + StorageObject storageObject = (StorageObject) t; + String storageName = storageObject.getStorage(); + StorageMapping mapping = storageMappings.get(storageObject.getClass(), storageName); + if (null != mapping) { + storageObject.deleteContent(mapping); + } else { + logger.print("can not find storage mapping {}.", storageName); + } + } + } + count += list.size(); + em.clear(); + logger.print("erase {} content data:{}, {}/{}.", name, cls.getName(), count, total); + } + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(cls); + Root root = cq.from(cls); + cq.select(root); + list = em.createQuery(cq).setMaxResults(containerEntity.dumpSize()).getResultList(); + } while (ListTools.isNotEmpty(list)); + return count; + } + + private Long eraseItem(Class cls, EntityManager em, Long total) throws Exception { + Long count = 0L; + List list = null; + ContainerEntity containerEntity = cls.getAnnotation(ContainerEntity.class); + do { + if (ListTools.isNotEmpty(list)) { + em.getTransaction().begin(); + for (T t : list) { + em.remove(t); + } + em.getTransaction().commit(); + count += list.size(); + em.clear(); + logger.print("erase {} content data:{}, {}/{}.", name, cls.getName(), count, total); + } + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(cls); + Root root = cq.from(cls); + Predicate p = cb.equal(root.get(DataItem.itemCategory_FIELDNAME), itemCategory); + cq.select(root).where(p); + list = em.createQuery(cq).setMaxResults(containerEntity.dumpSize()).getResultList(); + } while (ListTools.isNotEmpty(list)); + return count; + } + +} \ No newline at end of file diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentBbs.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentBbs.java index 6b2681e6a39688970a31fc9c7c7fc9caf9d3f4bf..a8c4ff8a585fc6294f7c7ebc9a4a3a61334237d0 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentBbs.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentBbs.java @@ -1,8 +1,6 @@ package com.x.server.console.action; import com.x.base.core.entity.dataitem.ItemCategory; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; import com.x.bbs.entity.BBSOperationRecord; import com.x.bbs.entity.BBSReplyInfo; import com.x.bbs.entity.BBSSubjectAttachment; @@ -13,9 +11,8 @@ import com.x.bbs.entity.BBSVoteOption; import com.x.bbs.entity.BBSVoteOptionGroup; import com.x.bbs.entity.BBSVoteRecord; -public class EraseContentBbs extends EraseContentProcessPlatform { +public class EraseContentBbs extends EraseContent { - private static Logger logger = LoggerFactory.getLogger(EraseContentBbs.class); @Override public boolean execute() throws Exception { this.init("bbs", ItemCategory.bbs); diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentCms.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentCms.java index 21cf6f6b62844f6df2107f77507d764433b257f8..7d7e163963d9ba1b8f11bf5dfecba9e886fb278e 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentCms.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentCms.java @@ -1,26 +1,20 @@ package com.x.server.console.action; -import org.apache.commons.lang3.StringUtils; - import com.x.base.core.entity.dataitem.ItemCategory; -import com.x.base.core.project.config.Config; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; +import com.x.cms.core.entity.CmsBatchOperation; import com.x.cms.core.entity.Document; -import com.x.cms.core.entity.Review; +import com.x.cms.core.entity.DocumentCommend; +import com.x.cms.core.entity.DocumentCommentCommend; +import com.x.cms.core.entity.DocumentCommentContent; +import com.x.cms.core.entity.DocumentCommentInfo; import com.x.cms.core.entity.DocumentViewRecord; import com.x.cms.core.entity.FileInfo; import com.x.cms.core.entity.Log; import com.x.cms.core.entity.ReadRemind; -import com.x.cms.core.entity.DocumentCommentInfo; -import com.x.cms.core.entity.DocumentCommentContent; -import com.x.cms.core.entity.DocumentCommentCommend; -import com.x.cms.core.entity.DocumentCommend; -import com.x.cms.core.entity.CmsBatchOperation; +import com.x.cms.core.entity.Review; -public class EraseContentCms extends EraseContentProcessPlatform { +public class EraseContentCms extends EraseContent { - private static Logger logger = LoggerFactory.getLogger(EraseContentCms.class); @Override public boolean execute() throws Exception { this.init("cms", ItemCategory.cms); diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentEntity.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..affa2e871781310ab885ab952d614f5490e46c72 --- /dev/null +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentEntity.java @@ -0,0 +1,17 @@ +package com.x.server.console.action; + +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; + +public class EraseContentEntity extends EraseContent { + + private static Logger logger = LoggerFactory.getLogger(EraseContentEntity.class); + + @Override + public boolean execute() throws Exception { + this.init("entity", null); + this.run(); + return true; + } + +} \ No newline at end of file diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentLog.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentLog.java index fe81772866f2d658f160f17703d3b492d79e5b81..da515aa6447c3f28d7329f5cbad8f6d770c86d9c 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentLog.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentLog.java @@ -1,7 +1,5 @@ package com.x.server.console.action; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; import com.x.processplatform.core.entity.element.FormVersion; import com.x.processplatform.core.entity.element.ProcessVersion; import com.x.processplatform.core.entity.element.ScriptVersion; @@ -10,9 +8,7 @@ import com.x.program.center.core.entity.ScheduleLog; import com.x.program.center.core.entity.UnexpectedErrorLog; import com.x.program.center.core.entity.WarnLog; -public class EraseContentLog extends EraseContentProcessPlatform { - - private static Logger logger = LoggerFactory.getLogger(EraseContentLog.class); +public class EraseContentLog extends EraseContent { @Override public boolean execute() throws Exception { diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentMessage.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentMessage.java index b80da43d0a9b1ea33a2a7276fd4bc2fbe2f99b1d..5e81c1cbc32ce0551d1902b6c16d8135fef3312d 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentMessage.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentMessage.java @@ -1,7 +1,5 @@ package com.x.server.console.action; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; import com.x.message.core.entity.IMConversation; import com.x.message.core.entity.IMConversationExt; import com.x.message.core.entity.IMMsg; @@ -10,9 +8,8 @@ import com.x.message.core.entity.Mass; import com.x.message.core.entity.Message; import com.x.message.core.entity.Org; -public class EraseContentMessage extends EraseContentProcessPlatform { +public class EraseContentMessage extends EraseContent { - private static Logger logger = LoggerFactory.getLogger(EraseContentMessage.class); @Override public boolean execute() throws Exception { this.init("message", null); diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentOrg.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentOrg.java index 623aea52522d8b0c29192808dff486f01c8d3950..dc186f1ae3b933e3b34a0520f9ca5d0d43a28ce5 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentOrg.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentOrg.java @@ -2,8 +2,6 @@ package com.x.server.console.action; import javax.wsdl.Definition; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; import com.x.organization.core.entity.Bind; import com.x.organization.core.entity.Custom; import com.x.organization.core.entity.Group; @@ -19,9 +17,7 @@ import com.x.organization.core.entity.UnitDuty; import com.x.organization.core.entity.accredit.Empower; import com.x.organization.core.entity.accredit.EmpowerLog; -public class EraseContentOrg extends EraseContentProcessPlatform { - - private static Logger logger = LoggerFactory.getLogger(EraseContentOrg.class); +public class EraseContentOrg extends EraseContent { @Override public boolean execute() throws Exception { diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentProcessPlatform.java b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentProcessPlatform.java index 01bc53a50565e806d05bc62eeadffa3b07e368b4..754ecfc2c55c6b5ad34a4f083a7027d42a8195d3 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentProcessPlatform.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/EraseContentProcessPlatform.java @@ -1,29 +1,6 @@ package com.x.server.console.action; -import java.io.File; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; - -import com.x.base.core.container.factory.PersistenceXmlHelper; -import com.x.base.core.entity.JpaObject; -import com.x.base.core.entity.StorageObject; -import com.x.base.core.entity.dataitem.DataItem; import com.x.base.core.entity.dataitem.ItemCategory; -import com.x.base.core.project.config.Config; -import com.x.base.core.project.config.StorageMapping; -import com.x.base.core.project.config.StorageMappings; -import com.x.base.core.project.logger.Logger; -import com.x.base.core.project.logger.LoggerFactory; -import com.x.base.core.project.tools.DateTools; -import com.x.base.core.project.tools.ListTools; import com.x.processplatform.core.entity.content.Attachment; import com.x.processplatform.core.entity.content.DocumentVersion; import com.x.processplatform.core.entity.content.Draft; @@ -39,20 +16,7 @@ import com.x.processplatform.core.entity.content.WorkCompleted; import com.x.processplatform.core.entity.content.WorkLog; import com.x.query.core.entity.Item; -import org.apache.commons.collections4.ListUtils; -import org.apache.openjpa.persistence.OpenJPAPersistence; - -public class EraseContentProcessPlatform { - - private static Logger logger = LoggerFactory.getLogger(EraseContentProcessPlatform.class); - - private Date start; - - private String name; - - private List classNames = new ArrayList<>(); - - private ItemCategory itemCategory; +public class EraseContentProcessPlatform extends EraseContent { public boolean execute() throws Exception { this.init("processPlatform", ItemCategory.pp); @@ -73,115 +37,4 @@ public class EraseContentProcessPlatform { this.run(); return true; } - - protected void addClass(Class cls) throws Exception { - this.classNames.add(cls.getName()); - } - - protected void init(String name, ItemCategory itemCategory) throws Exception { - this.name = name; - this.itemCategory = itemCategory; - this.start = new Date(); - } - - protected void run() throws Exception { - logger.print("clean {} content data, start at {}.", name, DateTools.format(start)); - this.classNames = ListUtils.intersection(this.classNames, - (List) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES)); - StorageMappings storageMappings = Config.storageMappings(); - File persistence = new File(Config.dir_local_temp_classes(), - DateTools.compact(this.start) + "_eraseContent.xml"); - PersistenceXmlHelper.write(persistence.getAbsolutePath(), classNames); - for (int i = 0; i < classNames.size(); i++) { - Class cls = (Class) Class.forName(classNames.get(i)); - EntityManagerFactory emf = OpenJPAPersistence.createEntityManagerFactory(cls.getName(), - persistence.getName(), PersistenceXmlHelper.properties(cls.getName(), Config.slice().getEnable())); - EntityManager em = emf.createEntityManager(); - - if (DataItem.class.isAssignableFrom(cls)) { - logger.print("erase {} content data:{}, total:{}.", name, cls.getName(), - this.estimateItemCount(em, cls)); - this.eraseItem(cls, em); - } else { - logger.print("erase {} content data:{}, total:{}.", name, cls.getName(), this.estimateCount(em, cls)); - this.erase(cls, em, storageMappings); - } - - } - Date end = new Date(); - logger.print("erase {} completed at {}, elapsed: {} ms.", name, DateTools.format(end), - (end.getTime() - start.getTime())); - } - - private long estimateCount(EntityManager em, Class cls) { - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(Long.class); - Root root = cq.from(cls); - cq.select(cb.count(root)); - return em.createQuery(cq).getSingleResult(); - } - - private long estimateItemCount(EntityManager em, Class cls) { - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(Long.class); - Root root = cq.from(cls); - Predicate p = cb.equal(root.get(DataItem.itemCategory_FIELDNAME), this.itemCategory); - cq.select(cb.count(root)).where(p); - return em.createQuery(cq).getSingleResult(); - } - - private Long erase(Class cls, EntityManager em, StorageMappings storageMappings) throws Exception { - Long count = 0L; - List list = null; - do { - if (ListTools.isNotEmpty(list)) { - em.getTransaction().begin(); - for (T t : list) { - em.remove(t); - } - em.getTransaction().commit(); - if (StorageObject.class.isAssignableFrom(cls)) { - for (T t : list) { - StorageObject storageObject = (StorageObject) t; - String name = storageObject.getStorage(); - StorageMapping mapping = storageMappings.get(storageObject.getClass(), name); - if (null != mapping) { - storageObject.deleteContent(mapping); - } else { - logger.print("can not find storage mapping: {}.", name); - } - } - } - count += list.size(); - } - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(cls); - Root root = cq.from(cls); - cq.select(root); - list = em.createQuery(cq).setMaxResults(1000).getResultList(); - } while (ListTools.isNotEmpty(list)); - return count; - } - - private Long eraseItem(Class cls, EntityManager em) throws Exception { - Long count = 0L; - List list = null; - do { - if (ListTools.isNotEmpty(list)) { - em.getTransaction().begin(); - for (T t : list) { - em.remove(t); - } - em.getTransaction().commit(); - count += list.size(); - } - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(cls); - Root root = cq.from(cls); - Predicate p = cb.equal(root.get(DataItem.itemCategory_FIELDNAME), itemCategory); - cq.select(root).where(p); - list = em.createQuery(cq).setMaxResults(1000).getResultList(); - } while (ListTools.isNotEmpty(list)); - return count; - } } \ No newline at end of file