From 7ef195f49e01b9f103541ab7caca3dac761871cd Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 25 Dec 2023 08:51:15 +0800 Subject: [PATCH] =?UTF-8?q?AsmMethodBoost=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/redkale/asm/AsmMethodBoost.java | 21 ++++++++++-------- .../java/org/redkale/boot/Application.java | 11 +++++----- .../java/org/redkale/boot/ModuleEngine.java | 3 ++- .../java/org/redkale/boot/NodeHttpServer.java | 2 +- .../java/org/redkale/boot/NodeServer.java | 22 +++++++++---------- .../cache/spi/CacheAsmMethodBoost.java | 4 ++-- .../redkale/cache/spi/CacheModuleEngine.java | 6 +++-- .../redkale/lock/spi/LockAsmMethodBoost.java | 4 ++-- .../redkale/lock/spi/LockModuleEngine.java | 5 +++-- .../redkale/mq/spi/MessageAsmMethodBoost.java | 4 ++-- .../redkale/test/cache/CacheInstanceTest.java | 2 +- 11 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/redkale/asm/AsmMethodBoost.java b/src/main/java/org/redkale/asm/AsmMethodBoost.java index 44c543f1a..b4dce3278 100644 --- a/src/main/java/org/redkale/asm/AsmMethodBoost.java +++ b/src/main/java/org/redkale/asm/AsmMethodBoost.java @@ -42,18 +42,21 @@ public abstract class AsmMethodBoost { protected final AtomicInteger fieldIndex = new AtomicInteger(); + protected final boolean remote; + protected final Class serviceType; - protected AsmMethodBoost(Class serviceType) { + protected AsmMethodBoost(boolean remote, Class serviceType) { + this.remote = remote; this.serviceType = serviceType; } - public static AsmMethodBoost create(Collection list) { - return new AsmMethodBoosts(list); + public static AsmMethodBoost create(boolean remote, Collection list) { + return new AsmMethodBoosts(remote, list); } - public static AsmMethodBoost create(AsmMethodBoost... items) { - return new AsmMethodBoosts(items); + public static AsmMethodBoost create(boolean remote, AsmMethodBoost... items) { + return new AsmMethodBoosts(remote, items); } /** @@ -243,13 +246,13 @@ public abstract class AsmMethodBoost { private final AsmMethodBoost[] items; - public AsmMethodBoosts(Collection list) { - super(null); + public AsmMethodBoosts(boolean remote, Collection list) { + super(remote, null); this.items = list.toArray(new AsmMethodBoost[list.size()]); } - public AsmMethodBoosts(AsmMethodBoost... items) { - super(null); + public AsmMethodBoosts(boolean remote, AsmMethodBoost... items) { + super(remote, null); this.items = items; } diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index 1b31c9227..969699be7 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -5,8 +5,6 @@ */ package org.redkale.boot; -import org.redkale.mq.spi.MessageModuleEngine; -import org.redkale.mq.spi.MessageAgent; import java.io.*; import java.lang.reflect.*; import java.net.*; @@ -35,7 +33,8 @@ import org.redkale.inject.ResourceEvent; import org.redkale.inject.ResourceFactory; import org.redkale.inject.ResourceTypeLoader; import org.redkale.lock.spi.LockModuleEngine; -import org.redkale.mq.*; +import org.redkale.mq.spi.MessageAgent; +import org.redkale.mq.spi.MessageModuleEngine; import org.redkale.net.*; import org.redkale.net.http.*; import org.redkale.net.sncp.*; @@ -846,10 +845,10 @@ public final class Application { } } - AsmMethodBoost createAsmMethodBoost(Class serviceClass) { + AsmMethodBoost createAsmMethodBoost(boolean remote, Class serviceClass) { List list = null; for (ModuleEngine item : moduleEngines) { - AsmMethodBoost boost = item.createAsmMethodBoost(serviceClass); + AsmMethodBoost boost = item.createAsmMethodBoost(remote, serviceClass); if (boost != null) { if (list == null) { list = new ArrayList<>(); @@ -860,7 +859,7 @@ public final class Application { if (list == null) { return null; } - return list.size() == 1 ? list.get(0) : AsmMethodBoost.create(list); + return list.size() == 1 ? list.get(0) : AsmMethodBoost.create(remote, list); } /** diff --git a/src/main/java/org/redkale/boot/ModuleEngine.java b/src/main/java/org/redkale/boot/ModuleEngine.java index 9df31fb5d..b59fbf512 100644 --- a/src/main/java/org/redkale/boot/ModuleEngine.java +++ b/src/main/java/org/redkale/boot/ModuleEngine.java @@ -58,11 +58,12 @@ public abstract class ModuleEngine { /** * 动态扩展类的方法 * + * @param remote 是否远程模式 * @param serviceClass 类 * * @return 方法动态扩展器 */ - public AsmMethodBoost createAsmMethodBoost(Class serviceClass) { + public AsmMethodBoost createAsmMethodBoost(boolean remote, Class serviceClass) { return null; } diff --git a/src/main/java/org/redkale/boot/NodeHttpServer.java b/src/main/java/org/redkale/boot/NodeHttpServer.java index 2a9f95db0..0f33d1ce7 100644 --- a/src/main/java/org/redkale/boot/NodeHttpServer.java +++ b/src/main/java/org/redkale/boot/NodeHttpServer.java @@ -171,7 +171,7 @@ public class NodeHttpServer extends NodeServer { } catch (Exception ex) { logger.log(Level.WARNING, "WebSocketServlet getMessageAgent error", ex); } - AsmMethodBoost methodBoost = application.createAsmMethodBoost(WebSocketNodeService.class); + AsmMethodBoost methodBoost = application.createAsmMethodBoost(false, WebSocketNodeService.class); nodeService = Sncp.createLocalService(serverClassLoader, resourceName, WebSocketNodeService.class, methodBoost, application.getResourceFactory(), application.getSncpRpcGroups(), sncpClient, messageAgent, (String) null, (AnyValue) null); regFactory.register(resourceName, WebSocketNode.class, nodeService); diff --git a/src/main/java/org/redkale/boot/NodeServer.java b/src/main/java/org/redkale/boot/NodeServer.java index c6e0ffcbe..feb51806c 100644 --- a/src/main/java/org/redkale/boot/NodeServer.java +++ b/src/main/java/org/redkale/boot/NodeServer.java @@ -5,7 +5,6 @@ */ package org.redkale.boot; -import org.redkale.mq.spi.MessageAgent; import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -25,7 +24,7 @@ import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.cluster.ClusterAgent; import org.redkale.inject.ResourceFactory; import org.redkale.inject.ResourceTypeLoader; -import org.redkale.mq.*; +import org.redkale.mq.spi.MessageAgent; import org.redkale.net.*; import org.redkale.net.Filter; import org.redkale.net.client.ClientAddress; @@ -265,7 +264,7 @@ public abstract class NodeServer { if (groups.isEmpty() && isSNCP() && NodeServer.this.sncpGroup != null) { groups.add(NodeServer.this.sncpGroup); } - AsmMethodBoost methodBoost = application.createAsmMethodBoost(WebSocketNodeService.class); + AsmMethodBoost methodBoost = application.createAsmMethodBoost(false, WebSocketNodeService.class); nodeService = Sncp.createLocalService(serverClassLoader, resourceName, WebSocketNodeService.class, methodBoost, application.getResourceFactory(), application.getSncpRpcGroups(), sncpClient, null, (String) null, (AnyValue) null); (isSNCP() ? appResFactory : resourceFactory).register(resourceName, WebSocketNode.class, nodeService); @@ -332,7 +331,7 @@ public abstract class NodeServer { if (Modifier.isFinal(resServiceType.getModifiers()) || Sncp.isComponent(resServiceType)) { service = (Service) resServiceType.getConstructor().newInstance(); } else { - AsmMethodBoost methodBoost = application.createAsmMethodBoost(resServiceType); + AsmMethodBoost methodBoost = application.createAsmMethodBoost(false, resServiceType); service = Sncp.createLocalService(serverClassLoader, resourceName, resServiceType, methodBoost, appResFactory, application.getSncpRpcGroups(), sncpClient, null, null, null); } @@ -385,7 +384,7 @@ public abstract class NodeServer { if (entry.getName().contains(Resource.PARENT_NAME)) { throw new RedkaleException(" value cannot contains '" + Resource.PARENT_NAME + "' in " + entry.getProperty()); } - if (!entry.isEmptyGroup() && !entry.isRemote() && rpcGroups.containsGroup(entry.getGroup())) { + if (!entry.isEmptyGroup() && !entry.isRemote() && !rpcGroups.containsGroup(entry.getGroup())) { throw new RedkaleException("Not found group(" + entry.getGroup() + ")"); } Service oldOther = resourceFactory.find(entry.getName(), serviceImplClass); @@ -424,11 +423,11 @@ public abstract class NodeServer { } service = serviceImplClass.getDeclaredConstructor().newInstance(); } else if (ws || localMode) { //本地模式 - AsmMethodBoost methodBoost = application.createAsmMethodBoost(serviceImplClass); + AsmMethodBoost methodBoost = application.createAsmMethodBoost(false, serviceImplClass); service = Sncp.createLocalService(serverClassLoader, resourceName, serviceImplClass, methodBoost, appResourceFactory, rpcGroups, this.sncpClient, agent, group, entry.getProperty()); } else { - AsmMethodBoost methodBoost = application.createAsmMethodBoost(serviceImplClass); + AsmMethodBoost methodBoost = application.createAsmMethodBoost(true, serviceImplClass); service = Sncp.createRemoteService(serverClassLoader, resourceName, serviceImplClass, methodBoost, appResourceFactory, rpcGroups, this.sncpClient, agent, group, entry.getProperty()); } @@ -482,10 +481,11 @@ public abstract class NodeServer { new ArrayList<>(localServices).forEach(y -> { resourceFactory.inject(Sncp.getResourceName(y), y, NodeServer.this); }); - new ArrayList<>(remoteServices).forEach(y -> { - resourceFactory.inject(Sncp.getResourceName(y), y, NodeServer.this); - calcMaxLength(y); - }); + //远程模式不可inject, 里面存在@Resource.required=true依赖 +// new ArrayList<>(remoteServices).forEach(y -> { +// resourceFactory.inject(Sncp.getResourceName(y), y, NodeServer.this); +// calcMaxLength(y); +// }); if (sb != null) { remoteServices.forEach(y -> { diff --git a/src/main/java/org/redkale/cache/spi/CacheAsmMethodBoost.java b/src/main/java/org/redkale/cache/spi/CacheAsmMethodBoost.java index 7ca48d9ea..e163fc86e 100644 --- a/src/main/java/org/redkale/cache/spi/CacheAsmMethodBoost.java +++ b/src/main/java/org/redkale/cache/spi/CacheAsmMethodBoost.java @@ -43,8 +43,8 @@ public class CacheAsmMethodBoost extends AsmMethodBoost { private Map actionMap; - public CacheAsmMethodBoost(Class serviceType) { - super(serviceType); + public CacheAsmMethodBoost(boolean remote, Class serviceType) { + super(remote, serviceType); } @Override diff --git a/src/main/java/org/redkale/cache/spi/CacheModuleEngine.java b/src/main/java/org/redkale/cache/spi/CacheModuleEngine.java index 1b578b16c..f40065b5e 100644 --- a/src/main/java/org/redkale/cache/spi/CacheModuleEngine.java +++ b/src/main/java/org/redkale/cache/spi/CacheModuleEngine.java @@ -52,12 +52,14 @@ public class CacheModuleEngine extends ModuleEngine { /** * 动态扩展类的方法 * + * @param remote 是否远程模式 * @param serviceClass 类 * * @return 方法动态扩展器 */ - public AsmMethodBoost createAsmMethodBoost(Class serviceClass) { - return new CacheAsmMethodBoost(serviceClass); + @Override + public AsmMethodBoost createAsmMethodBoost(boolean remote, Class serviceClass) { + return new CacheAsmMethodBoost(remote, serviceClass); } /** diff --git a/src/main/java/org/redkale/lock/spi/LockAsmMethodBoost.java b/src/main/java/org/redkale/lock/spi/LockAsmMethodBoost.java index 5030ba461..a7b12b006 100644 --- a/src/main/java/org/redkale/lock/spi/LockAsmMethodBoost.java +++ b/src/main/java/org/redkale/lock/spi/LockAsmMethodBoost.java @@ -28,8 +28,8 @@ public class LockAsmMethodBoost extends AsmMethodBoost { private static final List> FILTER_ANN = List.of(Locked.class, DynForLock.class); - public LockAsmMethodBoost(Class serviceType) { - super(serviceType); + public LockAsmMethodBoost(boolean remote, Class serviceType) { + super(remote, serviceType); } @Override diff --git a/src/main/java/org/redkale/lock/spi/LockModuleEngine.java b/src/main/java/org/redkale/lock/spi/LockModuleEngine.java index 440b3de77..f9246b63f 100644 --- a/src/main/java/org/redkale/lock/spi/LockModuleEngine.java +++ b/src/main/java/org/redkale/lock/spi/LockModuleEngine.java @@ -52,12 +52,13 @@ public class LockModuleEngine extends ModuleEngine { /** * 动态扩展类的方法 * + * @param remote 是否远程模式 * @param serviceClass 类 * * @return 方法动态扩展器 */ - public AsmMethodBoost createAsmMethodBoost(Class serviceClass) { - return new LockAsmMethodBoost(serviceClass); + public AsmMethodBoost createAsmMethodBoost(boolean remote, Class serviceClass) { + return new LockAsmMethodBoost(remote, serviceClass); } /** diff --git a/src/main/java/org/redkale/mq/spi/MessageAsmMethodBoost.java b/src/main/java/org/redkale/mq/spi/MessageAsmMethodBoost.java index 67e59027b..8e087e180 100644 --- a/src/main/java/org/redkale/mq/spi/MessageAsmMethodBoost.java +++ b/src/main/java/org/redkale/mq/spi/MessageAsmMethodBoost.java @@ -24,8 +24,8 @@ public class MessageAsmMethodBoost extends AsmMethodBoost { private static final List> FILTER_ANN = List.of(Messaged.class); - public MessageAsmMethodBoost(Class serviceType) { - super(serviceType); + public MessageAsmMethodBoost(boolean remote, Class serviceType) { + super(remote, serviceType); } @Override diff --git a/src/test/java/org/redkale/test/cache/CacheInstanceTest.java b/src/test/java/org/redkale/test/cache/CacheInstanceTest.java index 860409cdc..bb1c22bb9 100644 --- a/src/test/java/org/redkale/test/cache/CacheInstanceTest.java +++ b/src/test/java/org/redkale/test/cache/CacheInstanceTest.java @@ -50,7 +50,7 @@ public class CacheInstanceTest { @Test public void run1() throws Exception { Class serviceClass = CacheInstance.class; - CacheAsmMethodBoost boost = new CacheAsmMethodBoost(serviceClass); + CacheAsmMethodBoost boost = new CacheAsmMethodBoost(false, serviceClass); SncpRpcGroups grous = new SncpRpcGroups(); AsyncGroup iGroup = AsyncGroup.create("", Utility.newScheduledExecutor(1), 0, 0); SncpClient client = new SncpClient("", iGroup, 0, new InetSocketAddress("127.0.0.1", 8080), new ClientAddress(), "TCP", 1, 16);