AsmMethodBoost优化

This commit is contained in:
redkale
2023-12-25 08:51:15 +08:00
parent a5fc08a821
commit 7ef195f49e
11 changed files with 45 additions and 39 deletions

View File

@@ -42,18 +42,21 @@ public abstract class AsmMethodBoost<T> {
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<AsmMethodBoost> list) {
return new AsmMethodBoosts(list);
public static AsmMethodBoost create(boolean remote, Collection<AsmMethodBoost> 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<T> {
private final AsmMethodBoost[] items;
public AsmMethodBoosts(Collection<AsmMethodBoost> list) {
super(null);
public AsmMethodBoosts(boolean remote, Collection<AsmMethodBoost> 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;
}

View File

@@ -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<AsmMethodBoost> 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);
}
/**

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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("<name> 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 -> {

View File

@@ -43,8 +43,8 @@ public class CacheAsmMethodBoost extends AsmMethodBoost {
private Map<String, CacheAction> actionMap;
public CacheAsmMethodBoost(Class serviceType) {
super(serviceType);
public CacheAsmMethodBoost(boolean remote, Class serviceType) {
super(remote, serviceType);
}
@Override

View File

@@ -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);
}
/**

View File

@@ -28,8 +28,8 @@ public class LockAsmMethodBoost extends AsmMethodBoost {
private static final List<Class<? extends Annotation>> FILTER_ANN = List.of(Locked.class, DynForLock.class);
public LockAsmMethodBoost(Class serviceType) {
super(serviceType);
public LockAsmMethodBoost(boolean remote, Class serviceType) {
super(remote, serviceType);
}
@Override

View File

@@ -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);
}
/**

View File

@@ -24,8 +24,8 @@ public class MessageAsmMethodBoost extends AsmMethodBoost {
private static final List<Class<? extends Annotation>> FILTER_ANN = List.of(Messaged.class);
public MessageAsmMethodBoost(Class serviceType) {
super(serviceType);
public MessageAsmMethodBoost(boolean remote, Class serviceType) {
super(remote, serviceType);
}
@Override

View File

@@ -50,7 +50,7 @@ public class CacheInstanceTest {
@Test
public void run1() throws Exception {
Class<CacheInstance> 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);