移除RestDyncListener
This commit is contained in:
@@ -116,7 +116,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Application启动的监听事件,可配置多个节点
|
Application启动的监听事件,可配置多个节点
|
||||||
value: 类名,必须是ApplicationListener或RestDyncListener的子类
|
value: 类名,必须是ApplicationListener的子类
|
||||||
-->
|
-->
|
||||||
<listener value="org.redkalex.xxx.XXXApplicationListener"/>
|
<listener value="org.redkalex.xxx.XXXApplicationListener"/>
|
||||||
|
|
||||||
|
|||||||
@@ -175,8 +175,6 @@ public final class Application {
|
|||||||
//监听事件
|
//监听事件
|
||||||
private final List<ApplicationListener> listeners = new CopyOnWriteArrayList<>();
|
private final List<ApplicationListener> listeners = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
final List<RestDyncListener> restListeners = new CopyOnWriteArrayList<>();
|
|
||||||
|
|
||||||
//服务启动时间
|
//服务启动时间
|
||||||
private final long startTime = System.currentTimeMillis();
|
private final long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
@@ -735,13 +733,6 @@ public final class Application {
|
|||||||
final String listenClass = conf.getValue("value", "");
|
final String listenClass = conf.getValue("value", "");
|
||||||
if (listenClass.isEmpty()) continue;
|
if (listenClass.isEmpty()) continue;
|
||||||
Class clazz = classLoader.loadClass(listenClass);
|
Class clazz = classLoader.loadClass(listenClass);
|
||||||
if (RestDyncListener.class.isAssignableFrom(clazz)) {
|
|
||||||
RestDyncListener listener = (RestDyncListener) clazz.getDeclaredConstructor().newInstance();
|
|
||||||
resourceFactory.inject(listener);
|
|
||||||
listener.init(this, config);
|
|
||||||
this.restListeners.add(listener);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!ApplicationListener.class.isAssignableFrom(clazz)) continue;
|
if (!ApplicationListener.class.isAssignableFrom(clazz)) continue;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
ApplicationListener listener = (ApplicationListener) clazz.getDeclaredConstructor().newInstance();
|
ApplicationListener listener = (ApplicationListener) clazz.getDeclaredConstructor().newInstance();
|
||||||
@@ -919,8 +910,8 @@ public final class Application {
|
|||||||
//if (!singletonrun) signalHandle();
|
//if (!singletonrun) signalHandle();
|
||||||
//if (!singletonrun) clearPersistData();
|
//if (!singletonrun) clearPersistData();
|
||||||
logger.info(this.getClass().getSimpleName() + " started in " + (System.currentTimeMillis() - startTime) + " ms\r\n");
|
logger.info(this.getClass().getSimpleName() + " started in " + (System.currentTimeMillis() - startTime) + " ms\r\n");
|
||||||
for (RestDyncListener listener : this.restListeners) {
|
for (ApplicationListener listener : this.listeners) {
|
||||||
listener.postApplicationStarted(this);
|
listener.postStart(this);
|
||||||
}
|
}
|
||||||
if (!singletonrun) this.serversLatch.await();
|
if (!singletonrun) this.serversLatch.await();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,14 @@ public interface ApplicationListener {
|
|||||||
default void preStart(Application application) {
|
default void preStart(Application application) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application 在运行start后调用
|
||||||
|
*
|
||||||
|
* @param application Application
|
||||||
|
*/
|
||||||
|
default void postStart(Application application) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application 在运行shutdown前调用
|
* Application 在运行shutdown前调用
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ public class NodeHttpServer extends NodeServer {
|
|||||||
}
|
}
|
||||||
restedObjects.add(service); //避免重复创建Rest对象
|
restedObjects.add(service); //避免重复创建Rest对象
|
||||||
}
|
}
|
||||||
HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix, application.restListeners);
|
HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix);
|
||||||
if (servlet == null) return; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
if (servlet == null) return; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
||||||
String prefix2 = prefix;
|
String prefix2 = prefix;
|
||||||
WebServlet ws = servlet.getClass().getAnnotation(WebServlet.class);
|
WebServlet ws = servlet.getClass().getAnnotation(WebServlet.class);
|
||||||
|
|||||||
@@ -238,12 +238,11 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
* @param userType 用户数据类型
|
* @param userType 用户数据类型
|
||||||
* @param baseServletType RestServlet基类
|
* @param baseServletType RestServlet基类
|
||||||
* @param prefix url前缀
|
* @param prefix url前缀
|
||||||
* @param listeners RestDyncListener列表
|
|
||||||
*
|
*
|
||||||
* @return RestServlet
|
* @return RestServlet
|
||||||
*/
|
*/
|
||||||
public <S extends Service, T extends HttpServlet> T addRestServlet(final ClassLoader classLoader, final S service, final Class userType, final Class<T> baseServletType, final String prefix, final List<RestDyncListener> listeners) {
|
public <S extends Service, T extends HttpServlet> T addRestServlet(final ClassLoader classLoader, final S service, final Class userType, final Class<T> baseServletType, final String prefix) {
|
||||||
return addRestServlet(classLoader, null, service, userType, baseServletType, prefix, listeners);
|
return addRestServlet(classLoader, null, service, userType, baseServletType, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -257,13 +256,11 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
* @param userType 用户数据类型
|
* @param userType 用户数据类型
|
||||||
* @param baseServletType RestServlet基类
|
* @param baseServletType RestServlet基类
|
||||||
* @param prefix url前缀
|
* @param prefix url前缀
|
||||||
* @param listeners RestDyncListener列表
|
|
||||||
*
|
*
|
||||||
* @return RestServlet
|
* @return RestServlet
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <S extends Service, T extends HttpServlet> T addRestServlet(final ClassLoader classLoader, final String name, final S service,
|
public <S extends Service, T extends HttpServlet> T addRestServlet(final ClassLoader classLoader, final String name, final S service, final Class userType, final Class<T> baseServletType, final String prefix) {
|
||||||
final Class userType, final Class<T> baseServletType, final String prefix, final List<RestDyncListener> listeners) {
|
|
||||||
T servlet = null;
|
T servlet = null;
|
||||||
final boolean sncp = Sncp.isSncpDyn(service);
|
final boolean sncp = Sncp.isSncpDyn(service);
|
||||||
final String resname = name == null ? (sncp ? Sncp.getResourceName(service) : "") : name;
|
final String resname = name == null ? (sncp ? Sncp.getResourceName(service) : "") : name;
|
||||||
@@ -284,7 +281,7 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
final boolean first = servlet == null;
|
final boolean first = servlet == null;
|
||||||
if (servlet == null) servlet = Rest.createRestServlet(classLoader, userType, baseServletType, serviceType, listeners);
|
if (servlet == null) servlet = Rest.createRestServlet(classLoader, userType, baseServletType, serviceType);
|
||||||
if (servlet == null) return null; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
if (servlet == null) return null; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null
|
||||||
try { //若提供动态变更Service服务功能,则改Rest服务无法做出相应更新
|
try { //若提供动态变更Service服务功能,则改Rest服务无法做出相应更新
|
||||||
Field field = servlet.getClass().getDeclaredField(Rest.REST_SERVICE_FIELD_NAME);
|
Field field = servlet.getClass().getDeclaredField(Rest.REST_SERVICE_FIELD_NAME);
|
||||||
|
|||||||
@@ -741,8 +741,7 @@ public final class Rest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends HttpServlet> T createRestServlet(final ClassLoader classLoader, final Class userType0, final Class<T> baseServletType,
|
public static <T extends HttpServlet> T createRestServlet(final ClassLoader classLoader, final Class userType0, final Class<T> baseServletType, final Class<? extends Service> serviceType) {
|
||||||
final Class<? extends Service> serviceType, final List<RestDyncListener> listeners) {
|
|
||||||
if (baseServletType == null || serviceType == null) throw new RuntimeException(" Servlet or Service is null Class on createRestServlet");
|
if (baseServletType == null || serviceType == null) throw new RuntimeException(" Servlet or Service is null Class on createRestServlet");
|
||||||
if (!HttpServlet.class.isAssignableFrom(baseServletType)) throw new RuntimeException(baseServletType + " is not HttpServlet Class on createRestServlet");
|
if (!HttpServlet.class.isAssignableFrom(baseServletType)) throw new RuntimeException(baseServletType + " is not HttpServlet Class on createRestServlet");
|
||||||
int mod = baseServletType.getModifiers();
|
int mod = baseServletType.getModifiers();
|
||||||
@@ -1950,11 +1949,6 @@ public final class Rest {
|
|||||||
cw2.visitEnd();
|
cw2.visitEnd();
|
||||||
newLoader.addClass((newDynName + "$" + entry.newActionClassName).replace('/', '.'), cw2.toByteArray());
|
newLoader.addClass((newDynName + "$" + entry.newActionClassName).replace('/', '.'), cw2.toByteArray());
|
||||||
}
|
}
|
||||||
if (listeners != null && !listeners.isEmpty()) {
|
|
||||||
for (RestDyncListener listener : listeners) {
|
|
||||||
listener.invoke(classLoader, userType, serviceType, method, entry.mappingurl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // end for each
|
} // end for each
|
||||||
|
|
||||||
// HashMap<String, InnerActionEntry> _createRestInnerActionEntry() {
|
// HashMap<String, InnerActionEntry> _createRestInnerActionEntry() {
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.net.http;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import org.redkale.boot.Application;
|
|
||||||
import org.redkale.service.Service;
|
|
||||||
import org.redkale.util.AnyValue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Application进程启动后动态创建RestServlet时调用 <br>
|
|
||||||
* 只能通过application.xml配置
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* 详情见: https://redkale.org
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
* @since 2.2.0
|
|
||||||
*/
|
|
||||||
public interface RestDyncListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化方法
|
|
||||||
*
|
|
||||||
* @param application Application
|
|
||||||
* @param config 配置参数
|
|
||||||
*/
|
|
||||||
default void init(Application application, AnyValue config) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Application 初始化完所有Server后调用
|
|
||||||
*
|
|
||||||
* @param application Application
|
|
||||||
*/
|
|
||||||
default void postApplicationStarted(Application application) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态生成RestMapping方法后调用
|
|
||||||
*
|
|
||||||
* @param classLoader ClassLoader
|
|
||||||
* @param baseServletType Rest的Servlet基类
|
|
||||||
* @param serviceType Service类
|
|
||||||
* @param method Service的RestMapping方法
|
|
||||||
* @param mappingurl HttpMapping对应的url
|
|
||||||
*/
|
|
||||||
public void invoke(final ClassLoader classLoader, final Class baseServletType,
|
|
||||||
final Class<? extends Service> serviceType, final Method method, final String mappingurl);
|
|
||||||
}
|
|
||||||
@@ -23,8 +23,8 @@ public class _DynHelloRestServlet1 extends SimpleRestServlet {
|
|||||||
HelloService service = new HelloService();
|
HelloService service = new HelloService();
|
||||||
HttpServer server = new HttpServer();
|
HttpServer server = new HttpServer();
|
||||||
|
|
||||||
System.out.println(server.addRestServlet(null, service, null, SimpleRestServlet.class, "/pipes", null));
|
System.out.println(server.addRestServlet(null, service, null, SimpleRestServlet.class, "/pipes"));
|
||||||
System.out.println(server.addRestServlet(null, new HelloService(3), null, SimpleRestServlet.class, "/pipes", null));
|
System.out.println(server.addRestServlet(null, new HelloService(3), null, SimpleRestServlet.class, "/pipes"));
|
||||||
|
|
||||||
DefaultAnyValue conf = DefaultAnyValue.create("port", "" + port);
|
DefaultAnyValue conf = DefaultAnyValue.create("port", "" + port);
|
||||||
server.init(conf);
|
server.init(conf);
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ABMainService implements Service {
|
|||||||
HttpServer server = new HttpServer();
|
HttpServer server = new HttpServer();
|
||||||
server.getLogger().setLevel(Level.WARNING);
|
server.getLogger().setLevel(Level.WARNING);
|
||||||
|
|
||||||
server.addRestServlet(null, service, null, HttpServlet.class, "/pipes", null);
|
server.addRestServlet(null, service, null, HttpServlet.class, "/pipes");
|
||||||
|
|
||||||
resFactory.inject(cservice);
|
resFactory.inject(cservice);
|
||||||
resFactory.inject(bcservice);
|
resFactory.inject(bcservice);
|
||||||
@@ -114,7 +114,7 @@ public class ABMainService implements Service {
|
|||||||
HttpServer server = new HttpServer();
|
HttpServer server = new HttpServer();
|
||||||
server.getLogger().setLevel(Level.WARNING);
|
server.getLogger().setLevel(Level.WARNING);
|
||||||
|
|
||||||
server.addRestServlet(null, service, null, HttpServlet.class, "/pipes", null);
|
server.addRestServlet(null, service, null, HttpServlet.class, "/pipes");
|
||||||
|
|
||||||
server.init(DefaultAnyValue.create("port", "" + abport));
|
server.init(DefaultAnyValue.create("port", "" + abport));
|
||||||
server.start();
|
server.start();
|
||||||
|
|||||||
Reference in New Issue
Block a user