diff --git a/src/org/redkale/boot/Application.java b/src/org/redkale/boot/Application.java index 9537a50cb..c9bfd3628 100644 --- a/src/org/redkale/boot/Application.java +++ b/src/org/redkale/boot/Application.java @@ -135,6 +135,9 @@ public final class Application { //Server启动的计数器,用于确保所有Server都启动完后再进行下一步处理 private final CountDownLatch serversLatch; + //根ClassLoader + private final NodeClassLoader classLoader; + private Application(final AnyValue config) { this(false, config); } @@ -264,6 +267,8 @@ public final class Application { } } this.transportFactory = new TransportFactory(transportExec, transportPool, transportGroup); + this.classLoader = new NodeClassLoader(Thread.currentThread().getContextClassLoader()); + Thread.currentThread().setContextClassLoader(this.classLoader); } public ResourceFactory getResourceFactory() { @@ -274,9 +279,10 @@ public final class Application { return transportFactory; } -// public WatchFactory getWatchFactory() { -// return watchFactory; -// } + public NodeClassLoader getNodeClassLoader() { + return classLoader; + } + public List getNodeServers() { return new ArrayList<>(servers); } diff --git a/src/org/redkale/boot/NodeClassLoader.java b/src/org/redkale/boot/NodeClassLoader.java new file mode 100644 index 000000000..433f78c97 --- /dev/null +++ b/src/org/redkale/boot/NodeClassLoader.java @@ -0,0 +1,28 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.boot; + +import java.net.*; + +/** + * + * @author zhangjx + */ +public class NodeClassLoader extends URLClassLoader { + + public NodeClassLoader(ClassLoader parent) { + super(new URL[0], parent); + } + + public Class loadClass(String name, byte[] b) { + return defineClass(name, b, 0, b.length); + } + + @Override + public void addURL(URL url) { + super.addURL(url); + } +} diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index 4fef10dc7..525ba837d 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -53,6 +53,9 @@ public abstract class NodeServer { //当前Server对象 protected final Server server; + //ClassLoader + protected final NodeClassLoader classLoader; + //当前Server的SNCP协议的组 protected String sncpGroup = null; @@ -86,6 +89,8 @@ public abstract class NodeServer { this.resourceFactory = application.getResourceFactory().createChild(); this.server = server; this.logger = Logger.getLogger(this.getClass().getSimpleName()); + this.classLoader = new NodeClassLoader(Thread.currentThread().getContextClassLoader()); + Thread.currentThread().setContextClassLoader(this.classLoader); } protected Consumer getExecutor() throws Exception { @@ -592,6 +597,10 @@ public abstract class NodeServer { return resourceFactory; } + public NodeClassLoader getNodeClassLoader() { + return classLoader; + } + public InetSocketAddress getSncpAddress() { return sncpAddress; }