提交 5d57687d 编写于 作者: O o2null

Merge branch 'feature/java11' into 'develop'

dump and restore

See merge request o2oa/o2oa!1537
......@@ -39,6 +39,7 @@ import com.x.base.core.project.config.StorageMappings;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ClassLoaderTools;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.ListTools;
......@@ -78,7 +79,7 @@ public class DumpData {
this.pureGsonDateFormated = XGsonBuilder.instance();
}
public void run() {
private Thread dumpDataThread = new Thread(() -> {
try {
List<String> classNames = entities();
logger.print("find {} data to dump, start at {}.", classNames.size(), DateTools.format(start));
......@@ -95,9 +96,12 @@ public class DumpData {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
Thread.currentThread().setContextClassLoader(ClassLoaderTools.urlClassLoader(false,false,false,
false, false, Config.dir_local_temp_classes().toPath()));
Thread.currentThread().setName(DumpData.class.getName() + ":" + className);
@SuppressWarnings("unchecked")
Class<JpaObject> cls = (Class<JpaObject>) Class.forName(className);
Class<JpaObject> cls = (Class<JpaObject>) Thread.currentThread().getContextClassLoader()
.loadClass(className);
emf = OpenJPAPersistence.createEntityManagerFactory(cls.getName(), xml.getFileName().toString(),
PersistenceXmlHelper.properties(cls.getName(), Config.slice().getEnable()));
em = emf.createEntityManager();
......@@ -120,6 +124,10 @@ public class DumpData {
} catch (Exception e) {
e.printStackTrace();
}
}, "dumpDataThread");
public void run() {
dumpDataThread.start();
}
@SuppressWarnings("unchecked")
......@@ -130,7 +138,7 @@ public class DumpData {
return list;
}
for (String str : (List<String>) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES)) {
Class<?> cls = Class.forName(str);
Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(str);
ContainerEntity containerEntity = cls.getAnnotation(ContainerEntity.class);
if (Objects.equals(containerEntity.reference(), Reference.strong)) {
list.add(str);
......
......@@ -12,6 +12,7 @@ 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.Review;
import com.x.query.core.entity.Item;
public class EraseContentCms extends EraseContent {
......@@ -29,6 +30,7 @@ public class EraseContentCms extends EraseContent {
addClass(DocumentCommentCommend.class);
addClass(DocumentCommend.class);
addClass(CmsBatchOperation.class);
addClass(Item.class);
this.run();
return true;
}
......
......@@ -38,6 +38,7 @@ import com.x.base.core.project.config.StorageMappings;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ClassLoaderTools;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.ListTools;
......@@ -100,10 +101,13 @@ public class RestoreData {
AtomicLong total = new AtomicLong(0);
stream.forEach(className -> {
String nameOfThread = Thread.currentThread().getName();
Thread.currentThread().setName(RestoreData.class.getName() + ":" + className);
try {
Thread.currentThread().setContextClassLoader(ClassLoaderTools.urlClassLoader(false, false,
false, false, false, Config.dir_local_temp_classes().toPath()));
Thread.currentThread().setName(RestoreData.class.getName() + ":" + className);
@SuppressWarnings("unchecked")
Class<JpaObject> cls = (Class<JpaObject>) Class.forName(className);
Class<JpaObject> cls = (Class<JpaObject>) Thread.currentThread().getContextClassLoader()
.loadClass(className);
logger.print("restore data({}/{}): {}.", idx.getAndAdd(1), classNames.size(), cls.getName());
long size = restore(cls, xml);
total.getAndAdd(size);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册