createServletClassFilter();
@@ -571,7 +515,9 @@ public abstract class NodeServer {
dav.addValue("properties", ps);
av = dav;
}
- filter.filter(av, av.getValue("value"), false);
+ if (!av.getBoolValue("ignore", false)) {
+ filter.filter(av, av.getValue("value"), false);
+ }
}
if (list.getBoolValue("autoload", true)) {
String includes = list.getValue("includes", "");
diff --git a/src/org/redkale/boot/watch/AbstractWatchService.java b/src/org/redkale/boot/watch/AbstractWatchService.java
new file mode 100644
index 000000000..05ab2bd80
--- /dev/null
+++ b/src/org/redkale/boot/watch/AbstractWatchService.java
@@ -0,0 +1,17 @@
+/*
+ * 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.watch;
+
+import org.redkale.service.AbstractService;
+import org.redkale.watch.WatchService;
+
+/**
+ *
+ * @author zhangjx
+ */
+public abstract class AbstractWatchService extends AbstractService implements WatchService {
+
+}
diff --git a/src/org/redkale/boot/watch/FilterWatchService.java b/src/org/redkale/boot/watch/FilterWatchService.java
index 88fbf4a65..a4e062216 100644
--- a/src/org/redkale/boot/watch/FilterWatchService.java
+++ b/src/org/redkale/boot/watch/FilterWatchService.java
@@ -5,14 +5,40 @@
*/
package org.redkale.boot.watch;
-import org.redkale.net.http.RestService;
-import org.redkale.watch.WatchService;
+import java.io.IOException;
+import javax.annotation.Resource;
+import org.redkale.boot.Application;
+import org.redkale.net.TransportFactory;
+import org.redkale.net.http.*;
+import org.redkale.service.RetResult;
+import org.redkale.util.Comment;
/**
*
* @author zhangjx
*/
@RestService(name = "filter", catalog = "watch", repair = false)
-public class FilterWatchService implements WatchService {
-
+public class FilterWatchService extends AbstractWatchService {
+
+ @Comment("不存在的Group节点")
+ public static final int RET_NO_GROUP = 1601_0001;
+
+ @Comment("Filter类名不存在")
+ public static final int RET_FILTER_TYPE_ILLEGAL = 1601_0002;
+
+ @Comment("Node节点IP地址已存在")
+ public static final int RET_FILTER_EXISTS = 1601_0003;
+
+ @Resource
+ private Application application;
+
+ @Resource
+ private TransportFactory transportFactory;
+
+ @RestMapping(name = "addfilter", auth = false, comment = "动态增加Filter")
+ public RetResult addFilter(@RestParam(name = "server", comment = "Server节点名, 不指定名称则所有符合条件的Server都会增加Filter") final String serverName,
+ @RestParam(name = "type", comment = "Filter类名") final String filterType) throws IOException {
+ if (filterType == null) return new RetResult(RET_FILTER_TYPE_ILLEGAL, "Filter Type (" + filterType + ") is illegal");
+ return RetResult.success();
+ }
}
diff --git a/src/org/redkale/boot/watch/ServerWatchService.java b/src/org/redkale/boot/watch/ServerWatchService.java
index b2580e316..70a21ea7d 100644
--- a/src/org/redkale/boot/watch/ServerWatchService.java
+++ b/src/org/redkale/boot/watch/ServerWatchService.java
@@ -6,13 +6,12 @@
package org.redkale.boot.watch;
import org.redkale.net.http.RestService;
-import org.redkale.watch.WatchService;
/**
*
* @author zhangjx
*/
@RestService(name = "server", catalog = "watch", repair = false)
-public class ServerWatchService implements WatchService {
+public class ServerWatchService extends AbstractWatchService {
}
diff --git a/src/org/redkale/boot/watch/ServiceWatchService.java b/src/org/redkale/boot/watch/ServiceWatchService.java
index a079b1e9c..45886dcc4 100644
--- a/src/org/redkale/boot/watch/ServiceWatchService.java
+++ b/src/org/redkale/boot/watch/ServiceWatchService.java
@@ -9,7 +9,6 @@ import javax.annotation.Resource;
import org.redkale.boot.Application;
import org.redkale.net.TransportFactory;
import org.redkale.net.http.*;
-import org.redkale.watch.WatchService;
/**
*
@@ -18,7 +17,7 @@ import org.redkale.watch.WatchService;
* @author zhangjx
*/
@RestService(name = "service", catalog = "watch", repair = false)
-public class ServiceWatchService implements WatchService {
+public class ServiceWatchService extends AbstractWatchService {
@Resource
private Application application;
diff --git a/src/org/redkale/boot/watch/ServletWatchService.java b/src/org/redkale/boot/watch/ServletWatchService.java
index 805e94d06..6d787c503 100644
--- a/src/org/redkale/boot/watch/ServletWatchService.java
+++ b/src/org/redkale/boot/watch/ServletWatchService.java
@@ -9,7 +9,6 @@ import javax.annotation.Resource;
import org.redkale.boot.Application;
import org.redkale.net.TransportFactory;
import org.redkale.net.http.*;
-import org.redkale.watch.WatchService;
/**
*
@@ -18,7 +17,7 @@ import org.redkale.watch.WatchService;
* @author zhangjx
*/
@RestService(name = "servlet", catalog = "watch", repair = false)
-public class ServletWatchService implements WatchService {
+public class ServletWatchService extends AbstractWatchService {
@Resource
private Application application;
diff --git a/src/org/redkale/boot/watch/SourceWatchService.java b/src/org/redkale/boot/watch/SourceWatchService.java
new file mode 100644
index 000000000..bc3cba427
--- /dev/null
+++ b/src/org/redkale/boot/watch/SourceWatchService.java
@@ -0,0 +1,26 @@
+/*
+ * 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.watch;
+
+import javax.annotation.Resource;
+import org.redkale.boot.Application;
+import org.redkale.net.TransportFactory;
+import org.redkale.net.http.RestService;
+
+/**
+ *
+ * @author zhangjx
+ */
+@RestService(name = "source", catalog = "watch", repair = false)
+public class SourceWatchService extends AbstractWatchService {
+
+ @Resource
+ private Application application;
+
+ @Resource
+ private TransportFactory transportFactory;
+
+}
diff --git a/src/org/redkale/boot/watch/TransportWatchService.java b/src/org/redkale/boot/watch/TransportWatchService.java
index 0679115a4..9d8ad41b7 100644
--- a/src/org/redkale/boot/watch/TransportWatchService.java
+++ b/src/org/redkale/boot/watch/TransportWatchService.java
@@ -18,23 +18,22 @@ import org.redkale.net.sncp.*;
import org.redkale.service.*;
import org.redkale.util.*;
import org.redkale.util.AnyValue.DefaultAnyValue;
-import org.redkale.watch.WatchService;
/**
*
* @author zhangjx
*/
@RestService(name = "transport", catalog = "watch", repair = false)
-public class TransportWatchService implements WatchService {
+public class TransportWatchService extends AbstractWatchService {
@Comment("不存在的Group节点")
- public static final int RET_NO_GROUP = 1605_0001;
+ public static final int RET_NO_GROUP = 1606_0001;
@Comment("非法的Node节点IP地址")
- public static final int RET_ADDR_ILLEGAL = 1605_0002;
+ public static final int RET_ADDR_ILLEGAL = 1606_0002;
@Comment("Node节点IP地址已存在")
- public static final int RET_ADDR_EXISTS = 1605_0003;
+ public static final int RET_ADDR_EXISTS = 1606_0003;
@Resource
private Application application;
diff --git a/src/org/redkale/net/PrepareServlet.java b/src/org/redkale/net/PrepareServlet.java
index 3af7effa1..b0bca86c9 100644
--- a/src/org/redkale/net/PrepareServlet.java
+++ b/src/org/redkale/net/PrepareServlet.java
@@ -63,6 +63,15 @@ public abstract class PrepareServlet servletClass) {
+ synchronized (lock1) {
+ for (S servlet : new HashSet<>(servlets)) {
+ if (servlet.getClass().equals(servletClass)) return true;
+ }
+ return false;
+ }
+ }
+
protected void putMapping(K key, S servlet) {
synchronized (lock2) {
Map newmappings = new HashMap<>(mappings);
@@ -139,6 +148,15 @@ public abstract class PrepareServlet filterClass.equals(f.getClass()));
}
+ public boolean containsFilter(Class extends Filter> filterClass) {
+ if (this.headFilter == null || filterClass == null) return false;
+ Filter filter = this.headFilter;
+ do {
+ if (filter.getClass().equals(filterClass)) return true;
+ } while ((filter = filter._next) != null);
+ return false;
+ }
+
public Filter removeFilter(Predicate> predicate) {
if (this.headFilter == null || predicate == null) return null;
synchronized (filters) {
diff --git a/src/org/redkale/net/http/HttpServer.java b/src/org/redkale/net/http/HttpServer.java
index 7a26b4f57..dd4851602 100644
--- a/src/org/redkale/net/http/HttpServer.java
+++ b/src/org/redkale/net/http/HttpServer.java
@@ -104,6 +104,18 @@ public class HttpServer extends Server 泛型
+ * @param filterClass HttpFilter类
+ *
+ * @return boolean
+ */
+ public boolean containsHttpFilter(Class filterClass) {
+ return this.prepare.containsFilter(filterClass);
+ }
+
/**
* 添加HttpFilter
*
@@ -159,6 +171,18 @@ public class HttpServer extends Server 泛型
+ * @param servletClass HttpServlet类
+ *
+ * @return boolean
+ */
+ public boolean containsHttpServlet(Class servletClass) {
+ return this.prepare.containsServlet(servletClass);
+ }
+
/**
* 添加WebSocketServlet
*
diff --git a/src/org/redkale/net/sncp/SncpServer.java b/src/org/redkale/net/sncp/SncpServer.java
index 54b9a8282..41936cd6e 100644
--- a/src/org/redkale/net/sncp/SncpServer.java
+++ b/src/org/redkale/net/sncp/SncpServer.java
@@ -62,6 +62,18 @@ public class SncpServer extends Server 泛型
+ * @param filterClass SncpFilter类
+ *
+ * @return SncpFilter
+ */
+ public boolean containsSncpFilter(Class filterClass) {
+ return this.prepare.containsFilter(filterClass);
+ }
+
/**
* 删除SncpServlet
*
@@ -82,6 +94,18 @@ public class SncpServer extends Server 泛型
+ * @param servletClass SncpServlet类
+ *
+ * @return boolean
+ */
+ public boolean containsSncpServlet(Class servletClass) {
+ return this.prepare.containsServlet(servletClass);
+ }
+
@Override
@SuppressWarnings("unchecked")
protected SncpContext createContext() {