diff --git a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmNetHints.java b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmNetHints.java index 5d521716..270204e6 100644 --- a/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmNetHints.java +++ b/boot/src/main/java/com/zfoo/boot/graalvm/GraalvmNetHints.java @@ -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"; diff --git a/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java index 72d4925b..d46fa4c5 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java @@ -43,7 +43,7 @@ public interface IStorageManager { Map, IStorage> storageMap(); - void updateStorage(Class clazz, IStorage storageObject); + void updateStorage(Class clazz, IStorage storage); StorageConfig storageConfig(); } diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageInt.java b/storage/src/main/java/com/zfoo/storage/manager/StorageInt.java index 17f1c5c3..d04631cc 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageInt.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageInt.java @@ -27,16 +27,16 @@ public class StorageInt extends StorageObject { private IntObjectHashMap dataMap; - public StorageInt(StorageObject storageObject) { - this.dataMap = new IntObjectHashMap(storageObject.size()); - this.dataMap.putAll((Map) 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 storage) { + this.dataMap = new IntObjectHashMap(storage.size()); + this.dataMap.putAll((Map) 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 diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageLong.java b/storage/src/main/java/com/zfoo/storage/manager/StorageLong.java index e6ae1e93..66c46045 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageLong.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageLong.java @@ -27,16 +27,16 @@ public class StorageLong extends StorageObject { private LongObjectHashMap dataMap; - public StorageLong(StorageObject storageObject) { - this.dataMap = new LongObjectHashMap(storageObject.size()); - this.dataMap.putAll((Map) 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 storage) { + this.dataMap = new LongObjectHashMap(storage.size()); + this.dataMap.putAll((Map) 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 diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java index c06ea58b..a83b1380 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java @@ -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 diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageObject.java b/storage/src/main/java/com/zfoo/storage/manager/StorageObject.java index ff34ae02..cc4a0fb4 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageObject.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageObject.java @@ -47,22 +47,22 @@ public class StorageObject implements IStorage { 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);