From 894ea65a35e27c6d3daff305bc6abb7e8a4ef62e Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 3 Feb 2023 22:10:42 +0800 Subject: [PATCH] Filter.isNonBlocking --- .../org/redkale/annotation/NonBlocking.java | 2 +- .../org/redkale/net/DispatcherServlet.java | 18 +----------------- src/main/java/org/redkale/net/Filter.java | 8 ++++++-- src/main/java/org/redkale/net/Response.java | 7 +++++++ 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/redkale/annotation/NonBlocking.java b/src/main/java/org/redkale/annotation/NonBlocking.java index 2fdf29dc3..84ccd92da 100644 --- a/src/main/java/org/redkale/annotation/NonBlocking.java +++ b/src/main/java/org/redkale/annotation/NonBlocking.java @@ -6,7 +6,7 @@ package org.redkale.annotation; import java.lang.annotation.*; /** - * 非阻塞模式标记, 标记在Service类和方法、Filter类、HttpServlet类上
+ * 非阻塞模式标记, 标记在Service类和方法、HttpServlet类上
* 一般情况下,没有显注此注解的方法视为阻塞时, 以下两种情况除外:
* 1、返回类型是CompletableFuture
* 2、返回类型是void且参数存在CompletionHandler类型
diff --git a/src/main/java/org/redkale/net/DispatcherServlet.java b/src/main/java/org/redkale/net/DispatcherServlet.java index cc66d8c2c..e21623de8 100644 --- a/src/main/java/org/redkale/net/DispatcherServlet.java +++ b/src/main/java/org/redkale/net/DispatcherServlet.java @@ -12,7 +12,6 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.Predicate; import java.util.logging.Level; import java.util.stream.Stream; -import org.redkale.annotation.NonBlocking; import org.redkale.boot.Application; import org.redkale.util.*; @@ -45,8 +44,6 @@ public abstract class DispatcherServlet mappings = new HashMap<>(); - private volatile boolean allFilterAsync = true; - private final List> filters = new ArrayList<>(); protected final ReentrantLock filtersLock = new ReentrantLock(); @@ -210,18 +207,12 @@ public abstract class DispatcherServlet> T removeFilter(Class filterClass) { return removeFilter(f -> filterClass.equals(f.getClass())); } @@ -275,14 +266,6 @@ public abstract class DispatcherServlet @@ -33,12 +33,16 @@ public abstract class Filter, P extends public abstract void doFilter(R request, P response) throws IOException; + public abstract boolean isNonBlocking(); + public void destroy(C context, AnyValue config) { } @Override public int compareTo(Object o) { - if (!(o instanceof Filter)) return 1; + if (!(o instanceof Filter)) { + return 1; + } Priority p1 = this.getClass().getAnnotation(Priority.class); Priority p2 = o.getClass().getAnnotation(Priority.class); return (p2 == null ? 0 : p2.value()) - (p1 == null ? 0 : p1.value()); diff --git a/src/main/java/org/redkale/net/Response.java b/src/main/java/org/redkale/net/Response.java index c3ce05eab..84ef082df 100644 --- a/src/main/java/org/redkale/net/Response.java +++ b/src/main/java/org/redkale/net/Response.java @@ -39,6 +39,8 @@ public abstract class Response> { private volatile boolean inited = true; + protected boolean inNonBlocking = true; + protected Object output; //输出的结果对象 protected BiConsumer> recycleListener; @@ -127,6 +129,7 @@ public abstract class Response> { protected void prepare() { inited = true; + inNonBlocking = true; request.prepare(); } @@ -151,6 +154,10 @@ public abstract class Response> { return true; } + protected boolean inNonBlocking() { + return inNonBlocking; + } + protected void refuseAlive() { this.request.keepAlive = false; }