mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-09-20 04:24:05 +00:00
test[graalvm]: storage test
This commit is contained in:
1 parent
002b7ec2c5
commit
be744956b4
6 files changed
+63
-39
No files matched your search
@@ -14,10 +14,13 @@ package com.zfoo.boot.graalvm;
|
||||
|
||||
import com.zfoo.net.config.model.NetConfig;
|
||||
import com.zfoo.net.core.gateway.model.*;
|
||||
import com.zfoo.net.packet.IPacket;
|
||||
import com.zfoo.net.packet.common.*;
|
||||
import com.zfoo.net.packet.common.Error;
|
||||
import com.zfoo.net.router.attachment.*;
|
||||
import com.zfoo.storage.anno.GraalvmNativeStorage;
|
||||
import com.zfoo.protocol.util.ClassUtils;
|
||||
import com.zfoo.protocol.util.DomUtils;
|
||||
import com.zfoo.protocol.xml.XmlProtocols;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
@@ -68,9 +71,26 @@ public class GraalvmNetHints implements RuntimeHintsRegistrar {
|
||||
classes.add(TripleString.class);
|
||||
classes.add(TripleLSS.class);
|
||||
|
||||
var filterClasses = HintUtils.filterAllClass(clazz -> clazz.isAnnotationPresent(GraalvmNativeStorage.class));
|
||||
// IPacket
|
||||
var filterClasses = HintUtils.filterAllClass(clazz -> IPacket.class.isAssignableFrom(clazz));
|
||||
classes.addAll(filterClasses);
|
||||
|
||||
// protocol.xml
|
||||
try{
|
||||
var protocolXml = ClassUtils.getFileFromClassPathToString("protocol.xml");
|
||||
logger.info("found protocol.xml and register hint by this xml");
|
||||
var xmlProtocols = DomUtils.string2Object(protocolXml, XmlProtocols.class);
|
||||
for (var moduleDefinition : xmlProtocols.getModules()) {
|
||||
for (var protocolDefinition : moduleDefinition.getProtocols()) {
|
||||
var clazz = ClassUtils.forName(protocolDefinition.getLocation());
|
||||
classes.add(clazz);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// do nothing
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
HintUtils.registerRelevantClasses(hints, classes);
|
||||
|
||||
var include = "*.xml";
|
||||
|
||||
@@ -43,7 +43,7 @@ public interface IStorageManager {
|
||||
|
||||
Map<Class<?>, IStorage<?, ?>> storageMap();
|
||||
|
||||
void updateStorage(Class<?> clazz, IStorage<?, ?> storageObject);
|
||||
void updateStorage(Class<?> clazz, IStorage<?, ?> storage);
|
||||
|
||||
StorageConfig storageConfig();
|
||||
}
|
||||
@@ -27,16 +27,16 @@ public class StorageInt<K, V> extends StorageObject<K, V> {
|
||||
|
||||
private IntObjectHashMap<V> dataMap;
|
||||
|
||||
public StorageInt(StorageObject<K, V> storageObject) {
|
||||
this.dataMap = new IntObjectHashMap<V>(storageObject.size());
|
||||
this.dataMap.putAll((Map<? extends Integer, ? extends V>) storageObject.getData());
|
||||
super.indexMap = storageObject.indexMap;
|
||||
super.uniqueIndexMap = storageObject.uniqueIndexMap;
|
||||
super.clazz = storageObject.clazz;
|
||||
super.idDef = storageObject.idDef;
|
||||
super.indexDefMap = storageObject.indexDefMap;
|
||||
super.recycle = storageObject.recycle;
|
||||
storageObject.recycleStorage();
|
||||
public StorageInt(StorageObject<K, V> storage) {
|
||||
this.dataMap = new IntObjectHashMap<V>(storage.size());
|
||||
this.dataMap.putAll((Map<? extends Integer, ? extends V>) storage.getData());
|
||||
super.indexMap = storage.indexMap;
|
||||
super.uniqueIndexMap = storage.uniqueIndexMap;
|
||||
super.clazz = storage.clazz;
|
||||
super.idDef = storage.idDef;
|
||||
super.indexDefMap = storage.indexDefMap;
|
||||
super.recycle = storage.recycle;
|
||||
storage.recycleStorage();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,16 +27,16 @@ public class StorageLong<K, V> extends StorageObject<K, V> {
|
||||
|
||||
private LongObjectHashMap<V> dataMap;
|
||||
|
||||
public StorageLong(StorageObject<K, V> storageObject) {
|
||||
this.dataMap = new LongObjectHashMap<V>(storageObject.size());
|
||||
this.dataMap.putAll((Map<? extends Long, ? extends V>) storageObject.getData());
|
||||
super.indexMap = storageObject.indexMap;
|
||||
super.uniqueIndexMap = storageObject.uniqueIndexMap;
|
||||
super.clazz = storageObject.clazz;
|
||||
super.idDef = storageObject.idDef;
|
||||
super.indexDefMap = storageObject.indexDefMap;
|
||||
super.recycle = storageObject.recycle;
|
||||
storageObject.recycleStorage();
|
||||
public StorageLong(StorageObject<K, V> storage) {
|
||||
this.dataMap = new LongObjectHashMap<V>(storage.size());
|
||||
this.dataMap.putAll((Map<? extends Long, ? extends V>) storage.getData());
|
||||
super.indexMap = storage.indexMap;
|
||||
super.uniqueIndexMap = storage.uniqueIndexMap;
|
||||
super.clazz = storage.clazz;
|
||||
super.idDef = storage.idDef;
|
||||
super.indexDefMap = storage.indexDefMap;
|
||||
super.recycle = storage.recycle;
|
||||
storage.recycleStorage();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -83,6 +83,10 @@ public class StorageManager implements IStorageManager {
|
||||
|
||||
// 获取需要被映射的Excel的class类文件
|
||||
var clazzSet = resourceClass();
|
||||
if (CollectionUtils.isEmpty(clazzSet)) {
|
||||
logger.warn("no any storages found, please check your config. If is in graalvm environment, make sure your storage be annotated with @GraalvmNativeStorage and can be scanned by spring @Component.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 通过class类文件扫描excel文件地址
|
||||
for (var resourceClazz : clazzSet) {
|
||||
@@ -126,8 +130,8 @@ public class StorageManager implements IStorageManager {
|
||||
var clazz = definition.getClazz();
|
||||
var resource = definition.getResource();
|
||||
var fileExtName = FileUtils.fileExtName(resource.getFilename());
|
||||
StorageObject<?, ?> storageObject = StorageObject.parse(resource.getInputStream(), clazz, fileExtName);
|
||||
storageMap.putIfAbsent(clazz, storageObject);
|
||||
var storage = StorageObject.parse(resource.getInputStream(), clazz, fileExtName);
|
||||
storageMap.putIfAbsent(clazz, storage);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -155,9 +159,9 @@ public class StorageManager implements IStorageManager {
|
||||
|
||||
Class<?> resourceClazz = (Class<?>) types[1];
|
||||
|
||||
IStorage<?, ?> storageObject = storageMap.get(resourceClazz);
|
||||
IStorage<?, ?> storage = storageMap.get(resourceClazz);
|
||||
|
||||
if (storageObject == null) {
|
||||
if (storage == null) {
|
||||
throw new RuntimeException(StringUtils.format("Static class [resource:{}] does not exist", resourceClazz.getSimpleName()));
|
||||
}
|
||||
|
||||
@@ -172,8 +176,8 @@ public class StorageManager implements IStorageManager {
|
||||
}
|
||||
|
||||
ReflectionUtils.makeAccessible(field);
|
||||
ReflectionUtils.setField(field, bean, storageObject);
|
||||
storageObject.setRecycle(false);
|
||||
ReflectionUtils.setField(field, bean, storage);
|
||||
storage.setRecycle(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -206,8 +210,8 @@ public class StorageManager implements IStorageManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStorage(Class<?> clazz, IStorage<?, ?> storageObject) {
|
||||
storageMap.put(clazz, storageObject);
|
||||
public void updateStorage(Class<?> clazz, IStorage<?, ?> storage) {
|
||||
storageMap.put(clazz, storage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -47,22 +47,22 @@ public class StorageObject<K, V> implements IStorage<K, V> {
|
||||
|
||||
public static StorageObject<?, ?> parse(InputStream inputStream, Class<?> resourceClazz, String suffix) {
|
||||
try {
|
||||
StorageObject<?, ?> storageObject = new StorageObject<>();
|
||||
storageObject.clazz = resourceClazz;
|
||||
var storage = new StorageObject<>();
|
||||
storage.clazz = resourceClazz;
|
||||
var idDef = IdDef.valueOf(resourceClazz);
|
||||
storageObject.idDef = idDef;
|
||||
storageObject.indexDefMap = IndexDef.createResourceIndexes(resourceClazz);
|
||||
storage.idDef = idDef;
|
||||
storage.indexDefMap = IndexDef.createResourceIndexes(resourceClazz);
|
||||
var list = ResourceInterpreter.read(inputStream, resourceClazz, suffix);
|
||||
for (var object : list) {
|
||||
storageObject.put(object);
|
||||
storage.put(object);
|
||||
}
|
||||
var idType = idDef.getField().getType();
|
||||
if (idType == int.class || idType == Integer.class) {
|
||||
return new StorageInt<>(storageObject);
|
||||
return new StorageInt<>(storage);
|
||||
} else if (idType == long.class || idType == Long.class) {
|
||||
return new StorageLong<>(storageObject);
|
||||
return new StorageLong<>(storage);
|
||||
} else {
|
||||
return storageObject;
|
||||
return storage;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
|
||||
Reference in new issue
Block a user