You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/06/08 16:23:37 UTC
[dubbo] branch 3.0 updated: [3.0]Cleanup EventDispatcher mechanism
(#7677)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new db41d2a [3.0]Cleanup EventDispatcher mechanism (#7677)
db41d2a is described below
commit db41d2a5f4cebe1ebc88edd6c2e42ecd446a784d
Author: Wu Zhiguo <wz...@gmail.com>
AuthorDate: Wed Jun 9 00:23:17 2021 +0800
[3.0]Cleanup EventDispatcher mechanism (#7677)
---
.../org/apache/dubbo/common/logger/Logger.java | 2 +-
.../threadpool/event/ThreadPoolExhaustedEvent.java | 11 +-
.../event/ThreadPoolExhaustedListener.java} | 17 +--
.../threadpool/support/AbortPolicyWithReport.java | 32 ++--
.../dubbo/event/AbstractEventDispatcher.java | 168 ---------------------
.../dubbo/event/ConditionalEventListener.java | 35 -----
.../apache/dubbo/event/DirectEventDispatcher.java | 31 ----
.../main/java/org/apache/dubbo/event/Event.java | 49 ------
.../org/apache/dubbo/event/EventDispatcher.java | 66 --------
.../java/org/apache/dubbo/event/EventListener.java | 120 ---------------
.../java/org/apache/dubbo/event/GenericEvent.java | 34 -----
.../apache/dubbo/event/GenericEventListener.java | 130 ----------------
.../java/org/apache/dubbo/event/Listenable.java | 131 ----------------
.../dubbo/event/ParallelEventDispatcher.java | 33 ----
.../org.apache.dubbo.event.EventDispatcher | 2 -
.../ThreadPoolExhaustedEventListenerTest.java | 21 +--
.../event/ThreadPoolExhaustedEventTest.java | 6 +-
.../support/AbortPolicyWithReportTest.java | 30 ++++
.../apache/dubbo/event/AbstractEventListener.java | 40 -----
.../dubbo/event/ConditionalEventListenerTest.java | 77 ----------
.../dubbo/event/DirectEventDispatcherTest.java | 153 -------------------
.../org/apache/dubbo/event/EchoEventListener.java | 32 ----
.../org/apache/dubbo/event/EchoEventListener2.java | 60 --------
.../apache/dubbo/event/EventDispatcherTest.java | 45 ------
.../org/apache/dubbo/event/EventListenerTest.java | 44 ------
.../dubbo/event/GenericEventListenerTest.java | 77 ----------
.../org/apache/dubbo/event/GenericEventTest.java | 41 -----
.../dubbo/event/ParallelEventDispatcherTest.java | 59 --------
.../org/apache/dubbo/config/DubboShutdownHook.java | 18 +--
.../org/apache/dubbo/config/ReferenceConfig.java | 20 ---
.../org/apache/dubbo/config/ServiceConfig.java | 19 ---
.../config/event/DubboServiceDestroyedEvent.java | 32 ----
.../event/DubboShutdownHookRegisteredEvent.java | 46 ------
.../event/DubboShutdownHookUnregisteredEvent.java | 45 ------
.../event/ReferenceConfigDestroyedEvent.java | 41 -----
.../event/ReferenceConfigInitializedEvent.java | 48 ------
.../config/event/ServiceConfigExportedEvent.java | 36 -----
.../config/event/ServiceConfigUnexportedEvent.java | 36 -----
.../event/listener/LoggingEventListener.java | 51 -------
.../internal/org.apache.dubbo.event.EventListener | 1 -
.../PublishingServiceDefinitionListenerTest.java | 90 -----------
dubbo-distribution/dubbo-all/pom.xml | 11 --
dubbo-distribution/dubbo-core-spi/pom.xml | 11 --
.../client/FileSystemServiceDiscovery.java | 9 +-
.../dubbo/registry/client/ServiceDiscovery.java | 72 +++------
.../event/ServiceDiscoveryDestroyedEvent.java | 33 ----
.../event/ServiceDiscoveryDestroyingEvent.java | 33 ----
.../client/event/ServiceDiscoveryEvent.java | 67 --------
.../event/ServiceDiscoveryExceptionEvent.java | 48 ------
.../event/ServiceDiscoveryInitializedEvent.java | 33 ----
.../event/ServiceDiscoveryInitializingEvent.java | 33 ----
.../client/event/ServiceInstanceEvent.java | 47 ------
.../client/event/ServiceInstancesChangedEvent.java | 5 +-
.../listener/ServiceInstancesChangedListener.java | 26 ++--
.../internal/org.apache.dubbo.event.EventListener | 1 -
.../registry/client/InMemoryServiceDiscovery.java | 4 +-
.../zookeeper/ZookeeperServiceDiscovery.java | 8 +-
.../zookeeper/ZookeeperServiceDiscoveryTest.java | 2 -
58 files changed, 107 insertions(+), 2365 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/Logger.java b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/Logger.java
index 874ab56..c505326 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/Logger.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/Logger.java
@@ -142,7 +142,7 @@ public interface Logger {
/**
* Is debug logging currently enabled?
- *
+ *
* @return true if debug is enabled
*/
boolean isDebugEnabled();
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java
index e29c8a3..c470be7 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java
@@ -16,19 +16,14 @@
*/
package org.apache.dubbo.common.threadpool.event;
-import org.apache.dubbo.event.Event;
-
/**
- * An {@link Event Dubbo event} when the Dubbo thread pool is exhausted.
- *
- * @see Event
+ * An Event when the Dubbo thread pool is exhausted.
*/
-public class ThreadPoolExhaustedEvent extends Event {
+public class ThreadPoolExhaustedEvent {
final String msg;
- public ThreadPoolExhaustedEvent(Object source, String msg) {
- super(source);
+ public ThreadPoolExhaustedEvent(String msg) {
this.msg = msg;
}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEvent.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedListener.java
similarity index 73%
rename from dubbo-common/src/test/java/org/apache/dubbo/event/EchoEvent.java
rename to dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedListener.java
index a8f808e..822b69f 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEvent.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedListener.java
@@ -14,16 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.event;
+package org.apache.dubbo.common.threadpool.event;
-/**
- * Echo {@link Event}
- *
- * @since 2.7.5
- */
-class EchoEvent extends Event {
+public interface ThreadPoolExhaustedListener {
- public EchoEvent(Object source) {
- super(source);
- }
+ /**
+ * Notify when the thread pool is exhausted.
+ * {@link org.apache.dubbo.common.threadpool.support.AbortPolicyWithReport}
+ */
+ void onEvent(ThreadPoolExhaustedEvent event);
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
index 49fdd89..a515175 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java
@@ -20,14 +20,16 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.threadpool.event.ThreadPoolExhaustedEvent;
+import org.apache.dubbo.common.threadpool.event.ThreadPoolExhaustedListener;
+import org.apache.dubbo.common.utils.ConcurrentHashSet;
import org.apache.dubbo.common.utils.JVMUtil;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.event.EventDispatcher;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
@@ -65,6 +67,8 @@ public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy {
private static final String USER_HOME = System.getProperty("user.home");
+ private final Set<ThreadPoolExhaustedListener> listeners = new ConcurrentHashSet<>();
+
public AbortPolicyWithReport(String threadName, URL url) {
this.threadName = threadName;
this.url = url;
@@ -73,25 +77,33 @@ public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
String msg = String.format("Thread pool is EXHAUSTED!" +
- " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: "
- + "%d)," +
- " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s), in %s://%s:%d!",
- threadName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(),
- e.getLargestPoolSize(),
- e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating(),
- url.getProtocol(), url.getIp(), url.getPort());
+ " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d)," +
+ " Task: %d (completed: %d)," +
+ " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s), in %s://%s:%d!",
+ threadName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(),
+ e.getLargestPoolSize(),
+ e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating(),
+ url.getProtocol(), url.getIp(), url.getPort());
logger.warn(msg);
dumpJStack();
dispatchThreadPoolExhaustedEvent(msg);
throw new RejectedExecutionException(msg);
}
+ public void addThreadPoolExhaustedEventListener(ThreadPoolExhaustedListener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeThreadPoolExhaustedEventListener(ThreadPoolExhaustedListener listener) {
+ listeners.remove(listener);
+ }
+
/**
* dispatch ThreadPoolExhaustedEvent
* @param msg
*/
public void dispatchThreadPoolExhaustedEvent(String msg) {
- EventDispatcher.getDefaultExtension().dispatch(new ThreadPoolExhaustedEvent(this, msg));
+ listeners.forEach(listener -> listener.onEvent(new ThreadPoolExhaustedEvent(msg)));
}
private void dumpJStack() {
@@ -124,7 +136,7 @@ public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy {
String dateStr = sdf.format(new Date());
//try-with-resources
try (FileOutputStream jStackStream = new FileOutputStream(
- new File(dumpPath, "Dubbo_JStack.log" + "." + dateStr))) {
+ new File(dumpPath, "Dubbo_JStack.log" + "." + dateStr))) {
JVMUtil.jstack(jStackStream);
} catch (Throwable t) {
logger.error("dump jStack error", t);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/AbstractEventDispatcher.java b/dubbo-common/src/main/java/org/apache/dubbo/event/AbstractEventDispatcher.java
deleted file mode 100644
index 68009a1..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/AbstractEventDispatcher.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.apache.dubbo.common.extension.ExtensionLoader;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executor;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
-import static java.util.Collections.sort;
-import static java.util.Collections.unmodifiableList;
-import static org.apache.dubbo.event.EventListener.findEventType;
-
-/**
- * The abstract {@link EventDispatcher} providers the common implementation.
- *
- * @see EventDispatcher
- * @see Listenable
- * @see ServiceLoader
- * @see EventListener
- * @see Event
- * @since 2.7.5
- */
-public abstract class AbstractEventDispatcher implements EventDispatcher {
-
- private final Object mutex = new Object();
-
- private final ConcurrentMap<Class<? extends Event>, List<EventListener>> listenersCache = new ConcurrentHashMap<>();
-
- private final Executor executor;
-
- /**
- * Constructor with an instance of {@link Executor}
- *
- * @param executor {@link Executor}
- * @throws NullPointerException <code>executor</code> is <code>null</code>
- */
- protected AbstractEventDispatcher(Executor executor) {
- if (executor == null) {
- throw new NullPointerException("executor must not be null");
- }
- this.executor = executor;
- this.loadEventListenerInstances();
- }
-
- @Override
- public void addEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {
- Listenable.assertListener(listener);
- doInListener(listener, listeners -> {
- addIfAbsent(listeners, listener);
- });
- }
-
- @Override
- public void removeEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {
- Listenable.assertListener(listener);
- doInListener(listener, listeners -> listeners.remove(listener));
- }
-
- @Override
- public List<EventListener<?>> getAllEventListeners() {
- List<EventListener<?>> listeners = new LinkedList<>();
-
- sortedListeners().forEach(listener -> {
- addIfAbsent(listeners, listener);
- });
-
- return unmodifiableList(listeners);
- }
-
- protected Stream<EventListener> sortedListeners() {
- return sortedListeners(e -> true);
- }
-
- protected Stream<EventListener> sortedListeners(Predicate<Map.Entry<Class<? extends Event>, List<EventListener>>> predicate) {
- return listenersCache
- .entrySet()
- .stream()
- .filter(predicate)
- .map(Map.Entry::getValue)
- .flatMap(Collection::stream)
- .sorted();
- }
-
- private <E> void addIfAbsent(Collection<E> collection, E element) {
- if (!collection.contains(element)) {
- collection.add(element);
- }
- }
-
- @Override
- public void dispatch(Event event) {
-
- Executor executor = getExecutor();
-
- // execute in sequential or parallel execution model
- executor.execute(() -> {
- sortedListeners(entry -> entry.getKey().isAssignableFrom(event.getClass()))
- .forEach(listener -> {
- if (listener instanceof ConditionalEventListener) {
- ConditionalEventListener predicateEventListener = (ConditionalEventListener) listener;
- if (!predicateEventListener.accept(event)) { // No accept
- return;
- }
- }
- // Handle the event
- listener.onEvent(event);
- });
- });
- }
-
- /**
- * @return the non-null {@link Executor}
- */
- @Override
- public final Executor getExecutor() {
- return executor;
- }
-
- protected void doInListener(EventListener<?> listener, Consumer<Collection<EventListener>> consumer) {
- Class<? extends Event> eventType = findEventType(listener);
- if (eventType != null) {
- synchronized (mutex) {
- List<EventListener> listeners = listenersCache.computeIfAbsent(eventType, e -> new LinkedList<>());
- // consume
- consumer.accept(listeners);
- // sort
- sort(listeners);
- }
- }
- }
-
- /**
- * Default, load the instances of {@link EventListener event listeners} by {@link ServiceLoader}
- * <p>
- * It could be override by the sub-class
- *
- * @see EventListener
- * @see ServiceLoader#load(Class)
- */
- protected void loadEventListenerInstances() {
- ExtensionLoader<EventListener> loader = ExtensionLoader.getExtensionLoader(EventListener.class);
- loader.getSupportedExtensionInstances().forEach(this::addEventListener);
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/ConditionalEventListener.java b/dubbo-common/src/main/java/org/apache/dubbo/event/ConditionalEventListener.java
deleted file mode 100644
index c504511..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/ConditionalEventListener.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-/**
- * An {@link EventListener} extending the the conditional feature that {@link #accept(Event) decides} some
- * {@link Event event} is handled or not by current listener.
- *
- * @see EventListener
- * @since 2.7.5
- */
-public interface ConditionalEventListener<E extends Event> extends EventListener<E> {
-
- /**
- * Accept the event is handled or not by current listener
- *
- * @param event {@link Event event}
- * @return if handled, return <code>true</code>, or <code>false</code>
- */
- boolean accept(E event);
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/DirectEventDispatcher.java b/dubbo-common/src/main/java/org/apache/dubbo/event/DirectEventDispatcher.java
deleted file mode 100644
index de14ef2..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/DirectEventDispatcher.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-/**
- * Direct {@link EventDispatcher} implementation uses current thread execution model
- *
- * @see EventDispatcher
- * @since 2.7.5
- */
-public final class DirectEventDispatcher extends AbstractEventDispatcher {
- public static final String NAME = "direct";
-
- public DirectEventDispatcher() {
- super(DIRECT_EXECUTOR);
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/Event.java b/dubbo-common/src/main/java/org/apache/dubbo/event/Event.java
deleted file mode 100644
index 184c2c9..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/Event.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.util.EventObject;
-
-/**
- * An event object of Dubbo is based on the Java standard {@link EventObject event}
- *
- * @since 2.7.5
- */
-public abstract class Event extends EventObject {
-
- private static final long serialVersionUID = -1704315605423947137L;
-
- /**
- * The timestamp of event occurs
- */
- private final long timestamp;
-
- /**
- * Constructs a prototypical Event.
- *
- * @param source The object on which the Event initially occurred.
- * @throws IllegalArgumentException if source is null.
- */
- public Event(Object source) {
- super(source);
- this.timestamp = System.currentTimeMillis();
- }
-
- public long getTimestamp() {
- return timestamp;
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/EventDispatcher.java b/dubbo-common/src/main/java/org/apache/dubbo/event/EventDispatcher.java
deleted file mode 100644
index f6f2631..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/EventDispatcher.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.common.extension.SPI;
-
-import java.util.concurrent.Executor;
-
-/**
- * {@link Event Dubbo Event} Dispatcher
- *
- * @see Event
- * @see EventListener
- * @see DirectEventDispatcher
- * @since 2.7.5
- */
-@SPI(DirectEventDispatcher.NAME)
-public interface EventDispatcher extends Listenable<EventListener<?>> {
-
- /**
- * Direct {@link Executor} uses sequential execution model
- */
- Executor DIRECT_EXECUTOR = Runnable::run;
-
- /**
- * Dispatch a Dubbo event to the registered {@link EventListener Dubbo event listeners}
- *
- * @param event a {@link Event Dubbo event}
- */
- void dispatch(Event event);
-
- /**
- * The {@link Executor} to dispatch a {@link Event Dubbo event}
- *
- * @return default implementation directly invoke {@link Runnable#run()} method, rather than multiple-threaded
- * {@link Executor}. If the return value is <code>null</code>, the behavior is same as default.
- * @see #DIRECT_EXECUTOR
- */
- default Executor getExecutor() {
- return DIRECT_EXECUTOR;
- }
-
- /**
- * The default extension of {@link EventDispatcher} is loaded by {@link ExtensionLoader}
- *
- * @return the default extension of {@link EventDispatcher}
- */
- static EventDispatcher getDefaultExtension() {
- return ExtensionLoader.getExtensionLoader(EventDispatcher.class).getDefaultExtension();
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/EventListener.java b/dubbo-common/src/main/java/org/apache/dubbo/event/EventListener.java
deleted file mode 100644
index 4ca275d..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/EventListener.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.common.lang.Prioritized;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Objects;
-
-import static org.apache.dubbo.common.utils.ReflectUtils.findParameterizedTypes;
-
-/**
- * The {@link Event Dubbo Event} Listener that is based on Java standard {@link java.util.EventListener} interface supports
- * the generic {@link Event}.
- * <p>
- * The {@link #onEvent(Event) handle method} will be notified when the matched-type {@link Event Dubbo Event} is
- * published, whose priority could be changed by {@link #getPriority()} method.
- *
- * @param <E> the concrete class of {@link Event Dubbo Event}
- * @see Event
- * @see java.util.EventListener
- * @since 2.7.5
- */
-@SPI
-@FunctionalInterface
-public interface EventListener<E extends Event> extends java.util.EventListener, Prioritized {
-
- /**
- * Handle a {@link Event Dubbo Event} when it's be published
- *
- * @param event a {@link Event Dubbo Event}
- */
- void onEvent(E event);
-
- /**
- * The priority of {@link EventListener current listener}.
- *
- * @return the value is more greater, the priority is more lower.
- * {@link Integer#MIN_VALUE} indicates the highest priority. The default value is {@link Integer#MAX_VALUE}.
- * The comparison rule , refer to {@link #compareTo}.
- */
- @Override
- default int getPriority() {
- return NORMAL_PRIORITY;
- }
-
- /**
- * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}
- *
- * @param listener the {@link Class class} of {@link EventListener Dubbo event listener}
- * @return <code>null</code> if not found
- */
- static Class<? extends Event> findEventType(EventListener<?> listener) {
- return findEventType(listener.getClass());
- }
-
- /**
- * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}
- *
- * @param listenerClass the {@link Class class} of {@link EventListener Dubbo event listener}
- * @return <code>null</code> if not found
- */
- static Class<? extends Event> findEventType(Class<?> listenerClass) {
- Class<? extends Event> eventType = null;
-
- if (listenerClass != null && EventListener.class.isAssignableFrom(listenerClass)) {
- eventType = findParameterizedTypes(listenerClass)
- .stream()
- .map(EventListener::findEventType)
- .filter(Objects::nonNull)
- .findAny()
- .orElse((Class) findEventType(listenerClass.getSuperclass()));
- }
-
- return eventType;
- }
-
- /**
- * Find the type {@link Event Dubbo event} from the specified {@link ParameterizedType} presents
- * a class of {@link EventListener Dubbo event listener}
- *
- * @param parameterizedType the {@link ParameterizedType} presents a class of {@link EventListener Dubbo event listener}
- * @return <code>null</code> if not found
- */
- static Class<? extends Event> findEventType(ParameterizedType parameterizedType) {
- Class<? extends Event> eventType = null;
-
- Type rawType = parameterizedType.getRawType();
- if ((rawType instanceof Class) && EventListener.class.isAssignableFrom((Class) rawType)) {
- Type[] typeArguments = parameterizedType.getActualTypeArguments();
- for (Type typeArgument : typeArguments) {
- if (typeArgument instanceof Class) {
- Class argumentClass = (Class) typeArgument;
- if (Event.class.isAssignableFrom(argumentClass)) {
- eventType = argumentClass;
- break;
- }
- }
- }
- }
-
- return eventType;
- }
-}
\ No newline at end of file
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEvent.java b/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEvent.java
deleted file mode 100644
index 7711baa..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-/**
- * Generic {@link Event Dubbo event}
- *
- * @param <S> the type of event source
- * @since 2.7.5
- */
-public class GenericEvent<S> extends Event {
-
- public GenericEvent(S source) {
- super(source);
- }
-
- public S getSource() {
- return (S) super.getSource();
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEventListener.java b/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEventListener.java
deleted file mode 100644
index 57bbd0a..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/GenericEventListener.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.apache.dubbo.common.function.ThrowableConsumer;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import static java.util.Collections.emptySet;
-import static java.util.stream.Stream.of;
-import static org.apache.dubbo.common.function.ThrowableFunction.execute;
-
-/**
- * An abstract class of {@link EventListener} for Generic events, the sub class could add more {@link Event event}
- * handle methods, rather than only binds the {@link EventListener#onEvent(Event)} method that is declared to be
- * <code>final</code> the implementation can't override. It's notable that all {@link Event event} handle methods must
- * meet following conditions:
- * <ul>
- * <li>not {@link #onEvent(Event)} method</li>
- * <li><code>public</code> accessibility</li>
- * <li><code>void</code> return type</li>
- * <li>no {@link Exception exception} declaration</li>
- * <li>only one {@link Event} type argument</li>
- * </ul>
- *
- * @see Event
- * @see EventListener
- * @since 2.7.5
- */
-public abstract class GenericEventListener implements EventListener<Event> {
-
- private final Method onEventMethod;
-
- private final Map<Class<?>, Set<Method>> handleEventMethods;
-
- protected GenericEventListener() {
- this.onEventMethod = findOnEventMethod();
- this.handleEventMethods = findHandleEventMethods();
- }
-
- private Method findOnEventMethod() {
- return execute(getClass(), listenerClass -> listenerClass.getMethod("onEvent", Event.class));
- }
-
- private Map<Class<?>, Set<Method>> findHandleEventMethods() {
- // Event class for key, the eventMethods' Set as value
- Map<Class<?>, Set<Method>> eventMethods = new HashMap<>();
- of(getClass().getMethods())
- .filter(this::isHandleEventMethod)
- .forEach(method -> {
- Class<?> paramType = method.getParameterTypes()[0];
- Set<Method> methods = eventMethods.computeIfAbsent(paramType, key -> new LinkedHashSet<>());
- methods.add(method);
- });
- return eventMethods;
- }
-
- public final void onEvent(Event event) {
- Class<?> eventClass = event.getClass();
- handleEventMethods.getOrDefault(eventClass, emptySet()).forEach(method -> {
- ThrowableConsumer.execute(method, m -> {
- m.invoke(this, event);
- });
- });
- }
-
- /**
- * The {@link Event event} handle methods must meet following conditions:
- * <ul>
- * <li>not {@link #onEvent(Event)} method</li>
- * <li><code>public</code> accessibility</li>
- * <li><code>void</code> return type</li>
- * <li>no {@link Exception exception} declaration</li>
- * <li>only one {@link Event} type argument</li>
- * </ul>
- *
- * @param method
- * @return
- */
- private boolean isHandleEventMethod(Method method) {
-
- if (onEventMethod.equals(method)) { // not {@link #onEvent(Event)} method
- return false;
- }
-
- if (!Modifier.isPublic(method.getModifiers())) { // not public
- return false;
- }
-
- if (!void.class.equals(method.getReturnType())) { // void return type
- return false;
- }
-
- Class[] exceptionTypes = method.getExceptionTypes();
-
- if (exceptionTypes.length > 0) { // no exception declaration
- return false;
- }
-
- Class[] paramTypes = method.getParameterTypes();
- if (paramTypes.length != 1) { // not only one argument
- return false;
- }
-
- if (!Event.class.isAssignableFrom(paramTypes[0])) { // not Event type argument
- return false;
- }
-
- return true;
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/Listenable.java b/dubbo-common/src/main/java/org/apache/dubbo/event/Listenable.java
deleted file mode 100644
index c61e211..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/Listenable.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static java.util.stream.StreamSupport.stream;
-
-/**
- * Dubbo Event Listenable
- *
- * @see EventDispatcher
- * @since 2.7.5
- */
-public interface Listenable<E extends EventListener<?>> {
-
- /**
- * Add a {@link EventListener Dubbo event listener}
- *
- * @param listener a {@link EventListener Dubbo event listener}
- * If current {@link EventListener} is existed, return <code>false</code>
- * @throws NullPointerException if <code>listener</code> argument is <code>null</code>
- * @throws IllegalArgumentException if <code>listener</code> argument is not concrete instance
- */
- void addEventListener(E listener) throws NullPointerException, IllegalArgumentException;
-
- /**
- * Add one or more {@link EventListener Dubbo event listeners}
- *
- * @param listener a {@link EventListener Dubbo event listener}
- * @param others an optional {@link EventListener Dubbo event listeners}
- * @throws NullPointerException if one of arguments is <code>null</code>
- * @throws IllegalArgumentException if one of arguments argument is not concrete instance
- */
- default void addEventListeners(E listener, E... others) throws NullPointerException,
- IllegalArgumentException {
- List<E> listeners = new ArrayList<>(1 + others.length);
- listeners.add(listener);
- listeners.addAll(Arrays.asList(others));
- addEventListeners(listeners);
- }
-
- /**
- * Add multiple {@link EventListener Dubbo event listeners}
- *
- * @param listeners the {@link EventListener Dubbo event listeners}
- * @throws NullPointerException if <code>listeners</code> argument is <code>null</code>
- * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance
- */
- default void addEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {
- stream(listeners.spliterator(), false).forEach(this::addEventListener);
- }
-
- /**
- * Remove a {@link EventListener Dubbo event listener}
- *
- * @param listener a {@link EventListener Dubbo event listener}
- * @return If remove successfully, return <code>true</code>.
- * If current {@link EventListener} is existed, return <code>false</code>
- * @throws NullPointerException if <code>listener</code> argument is <code>null</code>
- */
- void removeEventListener(E listener) throws NullPointerException, IllegalArgumentException;
-
- /**
- * Remove a {@link EventListener Dubbo event listener}
- *
- * @param listeners the {@link EventListener Dubbo event listeners}
- * @return If remove successfully, return <code>true</code>.
- * If current {@link EventListener} is existed, return <code>false</code>
- * @throws NullPointerException if <code>listener</code> argument is <code>null</code>
- * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance
- */
- default void removeEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {
- stream(listeners.spliterator(), false).forEach(this::removeEventListener);
- }
-
- /**
- * Remove all {@link EventListener Dubbo event listeners}
- *
- * @return a amount of removed listeners
- */
- default void removeAllEventListeners() {
- removeEventListeners(getAllEventListeners());
- }
-
- /**
- * Get all registered {@link EventListener Dubbo event listeners}
- *
- * @return non-null read-only ordered {@link EventListener Dubbo event listeners}
- * @see EventListener#getPriority()
- */
- List<E> getAllEventListeners();
-
-
- /**
- * Assets the listener is valid or not
- *
- * @param listener the instance of {@link EventListener}
- * @throws NullPointerException
- */
- static void assertListener(EventListener<?> listener) throws NullPointerException {
- if (listener == null) {
- throw new NullPointerException("The listener must not be null.");
- }
-
- Class<?> listenerClass = listener.getClass();
-
- int modifiers = listenerClass.getModifiers();
-
- if (Modifier.isAbstract(modifiers) || Modifier.isInterface(modifiers)) {
- throw new IllegalArgumentException("The listener must be concrete class");
- }
- }
-}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/event/ParallelEventDispatcher.java b/dubbo-common/src/main/java/org/apache/dubbo/event/ParallelEventDispatcher.java
deleted file mode 100644
index 7a7e725..0000000
--- a/dubbo-common/src/main/java/org/apache/dubbo/event/ParallelEventDispatcher.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.util.concurrent.ForkJoinPool;
-
-/**
- * Parallel {@link EventDispatcher} implementation uses {@link ForkJoinPool#commonPool() JDK common thread pool}
- *
- * @see ForkJoinPool#commonPool()
- * @since 2.7.5
- */
-public class ParallelEventDispatcher extends AbstractEventDispatcher {
- public static final String NAME = "parallel";
-
- public ParallelEventDispatcher() {
- super(ForkJoinPool.commonPool());
- }
-}
diff --git a/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher b/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher
deleted file mode 100644
index ecd54ed..0000000
--- a/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher
+++ /dev/null
@@ -1,2 +0,0 @@
-direct=org.apache.dubbo.event.DirectEventDispatcher
-parallel=org.apache.dubbo.event.ParallelEventDispatcher
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventListenerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventListenerTest.java
index 3d57269..dc2b32d 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventListenerTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventListenerTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.dubbo.common.threadpool.event;
-import org.apache.dubbo.event.*;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -28,32 +26,23 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
*/
public class ThreadPoolExhaustedEventListenerTest {
- private EventDispatcher eventDispatcher;
- private ThreadPoolExhaustedEventListenerTest.MyGenericEventListener listener;
+ private MyListener listener;
@BeforeEach
public void init() {
- this.listener = new ThreadPoolExhaustedEventListenerTest.MyGenericEventListener();
- this.eventDispatcher = EventDispatcher.getDefaultExtension();
- this.eventDispatcher.addEventListener(listener);
- }
-
- @AfterEach
- public void destroy() {
- this.eventDispatcher.removeAllEventListeners();
+ this.listener = new MyListener();
}
@Test
public void testOnEvent() {
String msg = "Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-127.0.0.1:12345, Pool Size: 1 (active: 0, core: 1, max: 1, largest: 1), Task: 6 (completed: 6), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://127.0.0.1:12345!, dubbo version: 2.7.3, current host: 127.0.0.1";
- ThreadPoolExhaustedEvent exhaustedEvent = new ThreadPoolExhaustedEvent(this, msg);
- eventDispatcher.dispatch(exhaustedEvent);
+ ThreadPoolExhaustedEvent exhaustedEvent = new ThreadPoolExhaustedEvent(msg);
+ listener.onEvent(exhaustedEvent);
assertEquals(exhaustedEvent, listener.getThreadPoolExhaustedEvent());
- assertEquals(this, listener.getThreadPoolExhaustedEvent().getSource());
}
- class MyGenericEventListener implements EventListener<ThreadPoolExhaustedEvent> {
+ static class MyListener implements ThreadPoolExhaustedListener {
private ThreadPoolExhaustedEvent threadPoolExhaustedEvent;
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventTest.java
index 72a751d..492c4b8 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEventTest.java
@@ -19,7 +19,6 @@ package org.apache.dubbo.common.threadpool.event;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* {@link ThreadPoolExhaustedEvent} Test
@@ -28,12 +27,9 @@ public class ThreadPoolExhaustedEventTest {
@Test
public void test() {
- long timestamp = System.currentTimeMillis();
String msg = "Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-127.0.0.1:12345, Pool Size: 1 (active: 0, core: 1, max: 1, largest: 1), Task: 6 (completed: 6), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://127.0.0.1:12345!, dubbo version: 2.7.3, current host: 127.0.0.1";
- ThreadPoolExhaustedEvent event = new ThreadPoolExhaustedEvent(this, msg);
+ ThreadPoolExhaustedEvent event = new ThreadPoolExhaustedEvent(msg);
- assertEquals(this, event.getSource());
assertEquals(msg, event.getMsg());
- assertTrue(event.getTimestamp() >= timestamp);
}
}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
index 4add905..122b54a 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
@@ -17,6 +17,8 @@
package org.apache.dubbo.common.threadpool.support;
import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.threadpool.event.ThreadPoolExhaustedEvent;
+import org.apache.dubbo.common.threadpool.event.ThreadPoolExhaustedListener;
import org.junit.jupiter.api.Test;
@@ -25,6 +27,8 @@ import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
public class AbortPolicyWithReportTest {
@Test
public void jStackDumpTest() throws InterruptedException {
@@ -96,4 +100,30 @@ public class AbortPolicyWithReportTest {
Thread.sleep(1000);
}
+
+ @Test
+ public void test_dispatchThreadPoolExhaustedEvent() {
+ URL url = URL.valueOf("dubbo://admin:hello1234@10.20.130.230:20880/context/path?dump.directory=/tmp&version=1.0.0&application=morgan&noValue=");
+ AbortPolicyWithReport abortPolicyWithReport = new AbortPolicyWithReport("Test", url);
+ String msg = "Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-127.0.0.1:12345, Pool Size: 1 (active: 0, core: 1, max: 1, largest: 1), Task: 6 (completed: 6), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://127.0.0.1:12345!, dubbo version: 2.7.3, current host: 127.0.0.1";
+ MyListener listener = new MyListener();
+ abortPolicyWithReport.addThreadPoolExhaustedEventListener(listener);
+ abortPolicyWithReport.dispatchThreadPoolExhaustedEvent(msg);
+
+ assertEquals(listener.getThreadPoolExhaustedEvent().getMsg(), msg);
+ }
+
+ static class MyListener implements ThreadPoolExhaustedListener {
+
+ private ThreadPoolExhaustedEvent threadPoolExhaustedEvent;
+
+ @Override
+ public void onEvent(ThreadPoolExhaustedEvent event) {
+ this.threadPoolExhaustedEvent = event;
+ }
+
+ public ThreadPoolExhaustedEvent getThreadPoolExhaustedEvent() {
+ return threadPoolExhaustedEvent;
+ }
+ }
}
\ No newline at end of file
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/AbstractEventListener.java b/dubbo-common/src/test/java/org/apache/dubbo/event/AbstractEventListener.java
deleted file mode 100644
index 692b3b6..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/AbstractEventListener.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-public abstract class AbstractEventListener<E extends Event> implements EventListener<E> {
-
- private final AtomicInteger eventOccurs = new AtomicInteger(0);
-
- @Override
- public final void onEvent(E event) {
- eventOccurs.getAndIncrement();
- handleEvent(event);
- }
-
- protected abstract void handleEvent(E event);
-
- public int getEventOccurs() {
- return eventOccurs.get();
- }
-
- protected void println(String message) {
- System.out.printf("[%s] %s\n", Thread.currentThread().getName(), message);
- }
-}
\ No newline at end of file
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/ConditionalEventListenerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/ConditionalEventListenerTest.java
deleted file mode 100644
index 65838d8..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/ConditionalEventListenerTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-
-/**
- * {@link ConditionalEventListener} test
- *
- * @since 2.7.5
- */
-public class ConditionalEventListenerTest {
-
- private final EventDispatcher eventDispatcher = EventDispatcher.getDefaultExtension();
-
- @BeforeEach
- public void init() {
- eventDispatcher.removeAllEventListeners();
- }
-
- @Test
- public void testOnEvent() {
-
- OnlyHelloWorldEventListener listener = new OnlyHelloWorldEventListener();
-
- eventDispatcher.addEventListener(listener);
-
- eventDispatcher.dispatch(new EchoEvent("1"));
-
- assertNull(listener.getSource());
-
- eventDispatcher.dispatch(new EchoEvent("Hello,World"));
-
- assertEquals("Hello,World", listener.getSource());
-
- // fix EventDispatcherTest.testDefaultMethods may contain OnlyHelloWorldEventListener
- // ( ConditionalEventListenerTest and EventDispatcherTest are running together in one suite case )
- eventDispatcher.removeAllEventListeners();
- }
-
- static class OnlyHelloWorldEventListener implements ConditionalEventListener<EchoEvent> {
-
- private String source;
-
- @Override
- public boolean accept(EchoEvent event) {
- return "Hello,World".equals(event.getSource());
- }
-
- @Override
- public void onEvent(EchoEvent event) {
- source = (String) event.getSource();
- }
-
- public String getSource() {
- return source;
- }
- }
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/DirectEventDispatcherTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/DirectEventDispatcherTest.java
deleted file mode 100644
index 35b98b6..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/DirectEventDispatcherTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link DirectEventDispatcher} Test
- *
- * @since 2.7.5
- */
-public class DirectEventDispatcherTest {
-
- private DirectEventDispatcher dispatcher;
-
- private EchoEventListener echoEventListener;
-
- private EchoEventListener2 echoEventListener2;
-
- @BeforeEach
- public void init() {
- dispatcher = new DirectEventDispatcher();
- echoEventListener = new EchoEventListener();
- echoEventListener2 = new EchoEventListener2();
- }
-
- @AfterEach
- public void destroy() {
- dispatcher.removeAllEventListeners();
- }
-
- @Test
- public void testGetExecutor() {
- assertNotNull(dispatcher.getExecutor());
- }
-
- @Test
- public void testGetAllListeners() {
- assertTrue(dispatcher.getAllEventListeners().isEmpty());
- }
-
- @Test
- public void testSingleListener() {
- // add two listeners
- dispatcher.addEventListener(echoEventListener);
- dispatcher.addEventListener(echoEventListener2);
- assertEquals(asList(echoEventListener2, echoEventListener), dispatcher.getAllEventListeners());
-
- // add a duplicated listener
- dispatcher.addEventListener(echoEventListener);
- assertEquals(asList(echoEventListener2, echoEventListener), dispatcher.getAllEventListeners());
-
- // remove
- dispatcher.removeEventListener(echoEventListener);
- assertEquals(asList(echoEventListener2), dispatcher.getAllEventListeners());
-
- dispatcher.removeEventListener(echoEventListener2);
- assertEquals(emptyList(), dispatcher.getAllEventListeners());
- }
-
- @Test
- public void testMultipleListeners() {
-
- // add two listeners
- dispatcher.addEventListeners(echoEventListener, echoEventListener2);
- assertEquals(asList(echoEventListener2, echoEventListener), dispatcher.getAllEventListeners());
-
- // remove all listeners
- dispatcher.removeAllEventListeners();
- assertEquals(emptyList(), dispatcher.getAllEventListeners());
-
- // add the duplicated listeners
- dispatcher.addEventListeners(echoEventListener, echoEventListener, echoEventListener2);
- assertEquals(asList(echoEventListener2, echoEventListener), dispatcher.getAllEventListeners());
-
- // remove all listeners
- dispatcher.removeAllEventListeners();
- assertEquals(emptyList(), dispatcher.getAllEventListeners());
-
- dispatcher.addEventListeners(asList(echoEventListener, echoEventListener, echoEventListener2));
- assertEquals(asList(echoEventListener2, echoEventListener), dispatcher.getAllEventListeners());
-
- dispatcher.removeEventListeners(asList(echoEventListener, echoEventListener, echoEventListener2));
- assertEquals(emptyList(), dispatcher.getAllEventListeners());
- }
-
- @Test
- public void testDispatchEvent() {
-
- dispatcher.addEventListener(echoEventListener);
-
- // dispatch a Event
- dispatcher.dispatch(new Event("Test") {
- });
-
- // no-op occurs
- assertEquals(0, echoEventListener.getEventOccurs());
-
- // dispatch a EchoEvent
- dispatcher.dispatch(new EchoEvent("Hello,World"));
-
- // event has been handled
- assertEquals(1, echoEventListener.getEventOccurs());
-
- dispatcher.addEventListener(echoEventListener2);
-
- // reset the listeners
- init();
- dispatcher.addEventListeners(echoEventListener, echoEventListener2);
-
- // dispatch a Event
- dispatcher.dispatch(new Event("Test") {
- });
-
- // echoEventListener will be not triggered + 0
- // echoEventListener2 will be triggered + 1
- assertEquals(0, echoEventListener.getEventOccurs());
- assertEquals(1, echoEventListener2.getEventOccurs());
-
- // dispatch a EchoEvent
- // echoEventListener and echoEventListener2 are triggered both (+1)
- dispatcher.dispatch(new EchoEvent("Hello,World"));
- assertEquals(1, echoEventListener.getEventOccurs());
- assertEquals(2, echoEventListener2.getEventOccurs());
-
- // both +1
- dispatcher.dispatch(new EchoEvent("2019"));
- assertEquals(2, echoEventListener.getEventOccurs());
- assertEquals(3, echoEventListener2.getEventOccurs());
- }
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener.java b/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener.java
deleted file mode 100644
index 136cd7d..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.io.Serializable;
-
-/**
- * {@link EchoEvent} {@link EventListener}
- *
- * @since 2.7.5
- */
-public class EchoEventListener extends AbstractEventListener<EchoEvent> implements Serializable {
-
- @Override
- public void handleEvent(EchoEvent event) {
- println("EchoEventListener : " + event);
- }
-}
\ No newline at end of file
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener2.java b/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener2.java
deleted file mode 100644
index 0d27802..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/EchoEventListener2.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import java.io.Serializable;
-import java.util.Objects;
-import java.util.Vector;
-
-/**
- * {@link EchoEvent} {@link EventListener} 2
- *
- * @since 2.7.5
- */
-public class EchoEventListener2 extends Vector<EventListener<Event>> implements Serializable, EventListener<Event> {
-
- private AbstractEventListener<Event> delegate = new AbstractEventListener<Event>() {
- @Override
- protected void handleEvent(Event event) {
- println("EchoEventListener2 : " + event);
- }
- };
-
- @Override
- public void onEvent(Event event) {
- delegate.onEvent(event);
- }
-
- @Override
- public int getPriority() {
- return -1;
- }
-
- public int getEventOccurs() {
- return delegate.getEventOccurs();
- }
-
- @Override
- public boolean equals(Object o) {
- return this.getClass().equals(o.getClass());
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(this.getClass());
- }
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/EventDispatcherTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/EventDispatcherTest.java
deleted file mode 100644
index 4fcc667..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/EventDispatcherTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.Test;
-
-import static org.apache.dubbo.event.EventDispatcher.DIRECT_EXECUTOR;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link EventDispatcher} Test
- *
- * @see DirectEventDispatcher
- * @since 2.7.5
- */
-public class EventDispatcherTest {
-
- private EventDispatcher defaultInstance = EventDispatcher.getDefaultExtension();
-
- @Test
- public void testDefaultInstance() {
- assertEquals(DirectEventDispatcher.class, defaultInstance.getClass());
- }
-
- @Test
- public void testDefaultMethods() {
- assertEquals(DIRECT_EXECUTOR, defaultInstance.getExecutor());
- assertTrue(defaultInstance.getAllEventListeners().isEmpty());
- }
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/EventListenerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/EventListenerTest.java
deleted file mode 100644
index c54e354..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/EventListenerTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.Test;
-
-import static org.apache.dubbo.event.EventListener.findEventType;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link EventListener} Test
- *
- * @since 2.7.5
- */
-public class EventListenerTest {
-
- @Test
- public void testFindEventHierarchicalTypes() {
- assertEquals(EchoEvent.class, findEventType(new EchoEventListener()));
- assertEquals(Event.class, findEventType(new EchoEventListener2()));
-
- assertEquals(EchoEvent.class, findEventType(EchoEventListener.class));
- assertEquals(Event.class, findEventType(EchoEventListener2.class));
- }
-
- @Test
- public void testOnEvent() {
- }
-
-}
\ No newline at end of file
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventListenerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventListenerTest.java
deleted file mode 100644
index 738de97..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventListenerTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link GenericEventListener} Test
- *
- * @since 2.7.5
- */
-public class GenericEventListenerTest {
-
- private EventDispatcher eventDispatcher;
-
- private MyGenericEventListener listener;
-
- @BeforeEach
- public void init() {
- this.listener = new MyGenericEventListener();
- this.eventDispatcher = EventDispatcher.getDefaultExtension();
- this.eventDispatcher.addEventListener(listener);
- }
-
- @AfterEach
- public void destroy() {
- this.eventDispatcher.removeAllEventListeners();
- }
-
- @Test
- public void testOnEvent() {
- String value = "Hello,World";
- EchoEvent echoEvent = new EchoEvent(value);
- eventDispatcher.dispatch(echoEvent);
- assertEquals(echoEvent, listener.getEchoEvent());
- assertEquals(value, listener.getEchoEvent().getSource());
- }
-
- class MyGenericEventListener extends GenericEventListener {
-
- private EchoEvent echoEvent;
-
- public void onEvent(EchoEvent echoEvent) {
- this.echoEvent = echoEvent;
- }
-
- public void event(EchoEvent echoEvent) {
- assertEquals("Hello,World", echoEvent.getSource());
- }
-
- public void event(EchoEvent echoEvent, Object arg) {
- this.echoEvent = echoEvent;
- }
-
- public EchoEvent getEchoEvent() {
- return echoEvent;
- }
- }
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventTest.java
deleted file mode 100644
index d0b01bf..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/GenericEventTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link GenericEvent} Test
- *
- * @since 2.7.5
- */
-public class GenericEventTest {
-
- @Test
- public void test() {
-
- long timestamp = System.currentTimeMillis();
- GenericEvent<String> event = new GenericEvent("Hello,World");
-
- assertEquals("Hello,World", event.getSource());
- assertTrue(event.getTimestamp() >= timestamp);
- }
-
-}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/event/ParallelEventDispatcherTest.java b/dubbo-common/src/test/java/org/apache/dubbo/event/ParallelEventDispatcherTest.java
deleted file mode 100644
index 49293a6..0000000
--- a/dubbo-common/src/test/java/org/apache/dubbo/event/ParallelEventDispatcherTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.event;
-
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.concurrent.ForkJoinPool;
-import java.util.concurrent.TimeUnit;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link ParallelEventDispatcher} Test
- *
- * @since 2.7.5
- */
-public class ParallelEventDispatcherTest {
-
- private EventDispatcher eventDispatcher;
-
- private AbstractEventListener listener;
-
- @BeforeEach
- public void init() {
- eventDispatcher = new ParallelEventDispatcher();
- listener = new EchoEventListener();
- eventDispatcher.addEventListener(listener);
- }
-
- @Test
- public void testDispatchEvent() throws InterruptedException {
- eventDispatcher.dispatch(new EchoEvent("Hello,World"));
- ForkJoinPool.commonPool().awaitTermination(1, TimeUnit.SECONDS);
- // event has been handled
- assertEquals(1, listener.getEventOccurs());
- }
-
- @AfterAll
- public static void destroy() {
- ForkJoinPool.commonPool().shutdown();
- }
-
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
index 8e55c76..792ffa0 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@ -19,11 +19,6 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.lang.ShutdownHookCallbacks;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.config.event.DubboServiceDestroyedEvent;
-import org.apache.dubbo.config.event.DubboShutdownHookRegisteredEvent;
-import org.apache.dubbo.config.event.DubboShutdownHookUnregisteredEvent;
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.event.EventDispatcher;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -51,8 +46,6 @@ public class DubboShutdownHook extends Thread {
*/
private static final AtomicBoolean destroyed = new AtomicBoolean(false);
- private final EventDispatcher eventDispatcher = EventDispatcher.getDefaultExtension();
-
private DubboShutdownHook(String name) {
super(name);
}
@@ -91,7 +84,6 @@ public class DubboShutdownHook extends Thread {
if (registered.compareAndSet(false, true)) {
DubboShutdownHook dubboShutdownHook = getDubboShutdownHook();
Runtime.getRuntime().addShutdownHook(dubboShutdownHook);
- dispatch(new DubboShutdownHookRegisteredEvent(dubboShutdownHook));
}
}
@@ -102,7 +94,6 @@ public class DubboShutdownHook extends Thread {
if (registered.compareAndSet(true, false)) {
DubboShutdownHook dubboShutdownHook = getDubboShutdownHook();
Runtime.getRuntime().removeShutdownHook(dubboShutdownHook);
- dispatch(new DubboShutdownHookUnregisteredEvent(dubboShutdownHook));
}
}
@@ -110,12 +101,9 @@ public class DubboShutdownHook extends Thread {
* Destroy all the resources, including registries and protocols.
*/
public void doDestroy() {
- // dispatch the DubboDestroyedEvent @since 2.7.5
- dispatch(new DubboServiceDestroyedEvent(this));
- }
-
- private void dispatch(Event event) {
- eventDispatcher.dispatch(event);
+ if (logger.isInfoEnabled()) {
+ logger.info("Dubbo Service has been destroyed.");
+ }
}
public boolean getRegistered() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index c01efd2..7b0ae17 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -31,12 +31,8 @@ import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
-import org.apache.dubbo.config.event.ReferenceConfigDestroyedEvent;
-import org.apache.dubbo.config.event.ReferenceConfigInitializedEvent;
import org.apache.dubbo.config.support.Parameter;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.event.EventDispatcher;
import org.apache.dubbo.registry.client.metadata.MetadataUtils;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
@@ -225,9 +221,6 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
}
invoker = null;
ref = null;
-
- // dispatch a ReferenceConfigDestroyedEvent since 2.7.4
- dispatch(new ReferenceConfigDestroyedEvent(this));
}
protected synchronized void init() {
@@ -341,9 +334,6 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
initialized = true;
checkInvokerAvailable();
-
- // dispatch a ReferenceConfigInitializedEvent since 2.7.4
- dispatch(new ReferenceConfigInitializedEvent(this, invoker));
}
@SuppressWarnings({"unchecked", "rawtypes", "deprecation"})
@@ -552,16 +542,6 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
return isJvmRefer;
}
- /**
- * Dispatch an {@link Event event}
- *
- * @param event an {@link Event event}
- * @since 2.7.5
- */
- protected void dispatch(Event event) {
- EventDispatcher.getDefaultExtension().dispatch(event);
- }
-
public DubboBootstrap getBootstrap() {
return bootstrap;
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 982b4b0..a18416b 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -31,13 +31,9 @@ import org.apache.dubbo.common.utils.NamedThreadFactory;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
-import org.apache.dubbo.config.event.ServiceConfigExportedEvent;
-import org.apache.dubbo.config.event.ServiceConfigUnexportedEvent;
import org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker;
import org.apache.dubbo.config.support.Parameter;
import org.apache.dubbo.config.utils.ConfigValidationUtils;
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.event.EventDispatcher;
import org.apache.dubbo.metadata.MetadataService;
import org.apache.dubbo.metadata.ServiceNameMapping;
import org.apache.dubbo.metadata.ServiceNameMappingHandler;
@@ -179,9 +175,6 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
exporters.clear();
}
unexported = true;
-
- // dispatch a ServiceConfigUnExportedEvent since 2.7.4
- dispatch(new ServiceConfigUnexportedEvent(this));
}
public synchronized void export() {
@@ -230,8 +223,6 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
ServiceNameMapping serviceNameMapping = ServiceNameMapping.getExtension(parameters != null ? parameters.get(MAPPING_KEY) : null);
ServiceNameMappingHandler.map(serviceNameMapping, url);
});
- // dispatch a ServiceConfigExportedEvent since 2.7.4
- dispatch(new ServiceConfigExportedEvent(this));
}
private void checkAndUpdateSubConfigs() {
@@ -735,16 +726,6 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
configPostProcessors.forEach(component -> component.postProcessServiceConfig(this));
}
- /**
- * Dispatch an {@link Event event}
- *
- * @param event an {@link Event event}
- * @since 2.7.5
- */
- private void dispatch(Event event) {
- EventDispatcher.getDefaultExtension().dispatch(event);
- }
-
public DubboBootstrap getBootstrap() {
return bootstrap;
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboServiceDestroyedEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboServiceDestroyedEvent.java
deleted file mode 100644
index 3db52f6..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboServiceDestroyedEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.event.Event;
-
-/**
- * An {@link Event Dubbo event} when the Dubbo service is about to be destroyed.
- *
- * @see Event
- * @since 2.7.5
- */
-public class DubboServiceDestroyedEvent extends Event {
-
- public DubboServiceDestroyedEvent(Object source) {
- super(source);
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookRegisteredEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookRegisteredEvent.java
deleted file mode 100644
index 00c188a..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookRegisteredEvent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.DubboShutdownHook;
-import org.apache.dubbo.event.Event;
-
-/**
- * An event raised when the {@link DubboShutdownHook} {@link Runtime#addShutdownHook(Thread) registered} on
- * {@link ApplicationShutdownHooks JVM ShutdownHooks}
- *
- * @see DubboShutdownHook
- * @see ApplicationShutdownHooks
- * @since 2.7.5
- */
-public class DubboShutdownHookRegisteredEvent extends Event {
-
- /**
- * Constructs a prototypical Event.
- *
- * @param dubboShutdownHook The object on which the Event initially occurred.
- * @throws IllegalArgumentException if source is null.
- */
- public DubboShutdownHookRegisteredEvent(DubboShutdownHook dubboShutdownHook) {
- super(dubboShutdownHook);
- }
-
- public DubboShutdownHook getDubboShutdownHook() {
- return (DubboShutdownHook) getSource();
- }
-
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookUnregisteredEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookUnregisteredEvent.java
deleted file mode 100644
index f4644e5..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/DubboShutdownHookUnregisteredEvent.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.DubboShutdownHook;
-import org.apache.dubbo.event.Event;
-
-/**
- * An event raised when the {@link DubboShutdownHook} {@link Runtime#removeShutdownHook(Thread) unregistered} on
- * {@link ApplicationShutdownHooks JVM ShutdownHooks}
- *
- * @see DubboShutdownHook
- * @see ApplicationShutdownHooks
- * @since 2.7.5
- */
-public class DubboShutdownHookUnregisteredEvent extends Event {
-
- /**
- * Constructs a prototypical Event.
- *
- * @param dubboShutdownHook The object on which the Event initially occurred.
- * @throws IllegalArgumentException if source is null.
- */
- public DubboShutdownHookUnregisteredEvent(DubboShutdownHook dubboShutdownHook) {
- super(dubboShutdownHook);
- }
-
- public DubboShutdownHook getDubboShutdownHook() {
- return (DubboShutdownHook) getSource();
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigDestroyedEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigDestroyedEvent.java
deleted file mode 100644
index 456693b..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigDestroyedEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.event.Event;
-
-/**
- * The {@link ReferenceConfig Dubbo service ReferenceConfig} destroyed {@link Event event}
- *
- * @see Reference
- * @see ReferenceConfig#destroy()
- * @see Event
- * @since 2.7.5
- */
-public class ReferenceConfigDestroyedEvent extends Event {
-
- public ReferenceConfigDestroyedEvent(ReferenceConfig referenceConfig) {
- super(referenceConfig);
- }
-
- public ReferenceConfig getReferenceConfig() {
- return (ReferenceConfig) getSource();
- }
-
-}
\ No newline at end of file
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigInitializedEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigInitializedEvent.java
deleted file mode 100644
index 1302d3f..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ReferenceConfigInitializedEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.rpc.Invoker;
-
-/**
- * The {@link ReferenceConfig Dubbo service ReferenceConfig} initialized {@link Event event}
- *
- * @see Reference
- * @see ReferenceConfig#get()
- * @see Event
- * @since 2.7.5
- */
-public class ReferenceConfigInitializedEvent extends Event {
-
- private final Invoker<?> invoker;
-
- public ReferenceConfigInitializedEvent(ReferenceConfig referenceConfig, Invoker<?> invoker) {
- super(referenceConfig);
- this.invoker = invoker;
- }
-
- public ReferenceConfig getReferenceConfig() {
- return (ReferenceConfig) getSource();
- }
-
- public Invoker<?> getInvoker() {
- return invoker;
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigExportedEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigExportedEvent.java
deleted file mode 100644
index 9d1730e..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigExportedEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.event.Event;
-
-/**
- * {@link ServiceConfig} event post-{@link ServiceConfig#export() export}
- *
- * @since 2.7.5
- */
-public class ServiceConfigExportedEvent extends Event {
-
- public ServiceConfigExportedEvent(ServiceConfig source) {
- super(source);
- }
-
- public ServiceConfig getServiceConfig() {
- return (ServiceConfig) getSource();
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigUnexportedEvent.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigUnexportedEvent.java
deleted file mode 100644
index 7e9f8e9..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/ServiceConfigUnexportedEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event;
-
-import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.event.Event;
-
-/**
- * {@link ServiceConfig} event post-{@link ServiceConfig#unexport() unexport}
- *
- * @since 2.7.5
- */
-public class ServiceConfigUnexportedEvent extends Event {
-
- public ServiceConfigUnexportedEvent(ServiceConfig source) {
- super(source);
- }
-
- public ServiceConfig getServiceConfig() {
- return (ServiceConfig) getSource();
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/LoggingEventListener.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/LoggingEventListener.java
deleted file mode 100644
index 19be72e..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/LoggingEventListener.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event.listener;
-
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.config.event.DubboServiceDestroyedEvent;
-import org.apache.dubbo.config.event.ServiceConfigExportedEvent;
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.event.GenericEventListener;
-
-import static java.lang.String.format;
-
-/**
- * A listener for logging the {@link Event Dubbo event}
- *
- * @see ServiceConfigExportedEvent
- * @since 2.7.5
- */
-public class LoggingEventListener extends GenericEventListener {
-
- private static final String NAME = "Dubbo Service";
-
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- public void onEvent(DubboServiceDestroyedEvent event) {
- if (logger.isInfoEnabled()) {
- logger.info(NAME + " has been destroyed.");
- }
- }
-
- private void debug(String pattern, Object... args) {
- if (logger.isDebugEnabled()) {
- logger.debug(format(pattern, args));
- }
- }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener b/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
deleted file mode 100644
index 3d90c3b..0000000
--- a/dubbo-config/dubbo-config-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
+++ /dev/null
@@ -1 +0,0 @@
-config-logging=org.apache.dubbo.config.event.listener.LoggingEventListener
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java
deleted file mode 100644
index ae41b4d..0000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.config.event.listener;
-
-import org.apache.dubbo.common.utils.NetUtils;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ProtocolConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.config.ServiceConfig;
-import org.apache.dubbo.config.bootstrap.DubboBootstrap;
-import org.apache.dubbo.config.bootstrap.EchoService;
-import org.apache.dubbo.config.bootstrap.EchoServiceImpl;
-import org.apache.dubbo.config.context.ConfigManager;
-import org.apache.dubbo.config.event.ServiceConfigExportedEvent;
-import org.apache.dubbo.metadata.WritableMetadataService;
-import org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder;
-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import com.google.gson.Gson;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.Random;
-
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link PublishingServiceDefinitionListener} Test-Cases
- *
- * @since 2.7.8
- */
-public class PublishingServiceDefinitionListenerTest {
-
- private WritableMetadataService writableMetadataService;
-
- @BeforeEach
- public void init() {
- DubboBootstrap.reset();
- String metadataType = DEFAULT_METADATA_STORAGE_TYPE;
- ConfigManager configManager = ApplicationModel.getConfigManager();
- ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-provider");
- applicationConfig.setMetadataType(metadataType);
- configManager.setApplication(applicationConfig);
- this.writableMetadataService = WritableMetadataService.getDefaultExtension();
- }
-
- @AfterEach
- public void reset() {
- DubboBootstrap.reset();
- }
-
- /**
- * Test {@link ServiceConfigExportedEvent} arising
- */
- @Test
- public void testOnServiceConfigExportedEvent() {
- ProtocolConfig protocolConfig = new ProtocolConfig("dubbo");
- protocolConfig.setPort(NetUtils.getAvailablePort(20880 + new Random().nextInt(10000)));
-
- ServiceConfig<EchoService> serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterface(EchoService.class);
- serviceConfig.setProtocol(protocolConfig);
- serviceConfig.setRef(new EchoServiceImpl());
- serviceConfig.setRegistry(new RegistryConfig("N/A"));
- serviceConfig.export();
-
- String serviceDefinition = writableMetadataService.getServiceDefinition(EchoService.class.getName());
-
- ServiceDefinition serviceDefinitionBuild = ServiceDefinitionBuilder.build(serviceConfig.getInterfaceClass());
-
- assertEquals(serviceDefinition, new Gson().toJson(serviceDefinitionBuild));
- }
-}
diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml
index 3be4bd5..2953239 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -609,12 +609,6 @@
META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
</resource>
</transformer>
- <!-- @since 2.7.5 -->
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher
- </resource>
- </transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
@@ -655,11 +649,6 @@
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
- </resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>
META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
</resource>
diff --git a/dubbo-distribution/dubbo-core-spi/pom.xml b/dubbo-distribution/dubbo-core-spi/pom.xml
index ad06e62..7e9ee1d 100644
--- a/dubbo-distribution/dubbo-core-spi/pom.xml
+++ b/dubbo-distribution/dubbo-core-spi/pom.xml
@@ -299,12 +299,6 @@
META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
</resource>
</transformer>
- <!-- @since 2.7.5 -->
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher
- </resource>
- </transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataServiceExporter
@@ -345,11 +339,6 @@
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
- </resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>
META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
</resource>
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java
index 1482a9d..af8cac4 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java
@@ -23,8 +23,6 @@ import org.apache.dubbo.common.lang.ShutdownHookCallbacks;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.event.EventListener;
-import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;
import com.alibaba.fastjson.JSON;
import org.apache.commons.io.FileUtils;
@@ -54,7 +52,7 @@ import static org.apache.dubbo.common.config.configcenter.file.FileSystemDynamic
* @see FileSystemDynamicConfiguration
* @since 2.7.5
*/
-public class FileSystemServiceDiscovery implements ServiceDiscovery, EventListener<ServiceInstancesChangedEvent> {
+public class FileSystemServiceDiscovery implements ServiceDiscovery {
private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -65,11 +63,6 @@ public class FileSystemServiceDiscovery implements ServiceDiscovery, EventListen
private ServiceInstance serviceInstance;
@Override
- public void onEvent(ServiceInstancesChangedEvent event) {
-
- }
-
- @Override
public void initialize(URL registryURL) throws Exception {
dynamicConfiguration = createDynamicConfiguration(registryURL);
registerDubboShutdownHook();
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
index 90ca135..c6b1783 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
@@ -21,8 +21,6 @@ import org.apache.dubbo.common.extension.SPI;
import org.apache.dubbo.common.lang.Prioritized;
import org.apache.dubbo.common.utils.Page;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.event.EventDispatcher;
-import org.apache.dubbo.event.EventListener;
import org.apache.dubbo.registry.NotifyListener;
import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;
import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;
@@ -37,7 +35,6 @@ import java.util.stream.Stream;
import static java.util.Collections.unmodifiableList;
import static java.util.Collections.unmodifiableMap;
import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_DELAY_NOTIFICATION_KEY;
-import static org.apache.dubbo.event.EventDispatcher.getDefaultExtension;
/**
* The common operations of Service Discovery
@@ -196,13 +193,30 @@ public interface ServiceDiscovery extends Prioritized {
return unmodifiableMap(instances);
}
+ default void dispatchServiceInstancesChangedEvent(String serviceName) {
+ dispatchServiceInstancesChangedEvent(serviceName, getInstances(serviceName));
+ }
+
+ default void dispatchServiceInstancesChangedEvent(String serviceName, String... otherServiceNames) {
+ dispatchServiceInstancesChangedEvent(serviceName, getInstances(serviceName));
+ if (otherServiceNames != null) {
+ Stream.of(otherServiceNames)
+ .filter(StringUtils::isNotEmpty)
+ .forEach(this::dispatchServiceInstancesChangedEvent);
+ }
+ }
+
+ default void dispatchServiceInstancesChangedEvent(String serviceName, List<ServiceInstance> serviceInstances) {
+ dispatchServiceInstancesChangedEvent(new ServiceInstancesChangedEvent(serviceName, serviceInstances));
+ }
+
+ default void dispatchServiceInstancesChangedEvent(ServiceInstancesChangedEvent event) {}
+
/**
* Add an instance of {@link ServiceInstancesChangedListener} for specified service
* <p>
- * Default, current method will be invoked by {@link ServiceDiscoveryRegistry#subscribe(URL, NotifyListener)
- * the ServiceDiscoveryRegistry on the subscription}, and it's mandatory to
- * {@link EventDispatcher#addEventListener(EventListener) add} the {@link ServiceInstancesChangedListener} argument
- * into {@link EventDispatcher} whether the subclass implements same approach or not, thus this method is used to
+ * Default, Current method will be invoked by {@link ServiceDiscoveryRegistry#subscribe(URL, NotifyListener)
+ * the ServiceDiscoveryRegistry on the subscription}, this method is used to
* trigger or adapt the vendor's change notification mechanism typically, like Zookeeper Watcher,
* Nacos EventListener. If the registry observes the change, It's suggested that the implementation could invoke
* {@link #dispatchServiceInstancesChangedEvent(String)} method or variants
@@ -210,7 +224,6 @@ public interface ServiceDiscovery extends Prioritized {
* @param listener an instance of {@link ServiceInstancesChangedListener}
* @throws NullPointerException
* @throws IllegalArgumentException
- * @see EventDispatcher
*/
default void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener)
throws NullPointerException, IllegalArgumentException {
@@ -230,49 +243,6 @@ public interface ServiceDiscovery extends Prioritized {
return new ServiceInstancesChangedListener(serviceNames, this);
}
- /**
- * Dispatch the {@link ServiceInstancesChangedEvent}
- *
- * @param serviceName the name of service whose service instances have been changed
- */
- default void dispatchServiceInstancesChangedEvent(String serviceName) {
- dispatchServiceInstancesChangedEvent(serviceName, getInstances(serviceName));
- }
-
- /**
- * Dispatch the {@link ServiceInstancesChangedEvent}
- *
- * @param serviceName the name of service whose service instances have been changed
- * @param otherServiceNames the names of other services
- */
- default void dispatchServiceInstancesChangedEvent(String serviceName, String... otherServiceNames) {
- dispatchServiceInstancesChangedEvent(serviceName, getInstances(serviceName));
- if (otherServiceNames != null) {
- Stream.of(otherServiceNames)
- .filter(StringUtils::isNotEmpty)
- .forEach(this::dispatchServiceInstancesChangedEvent);
- }
- }
-
- /**
- * Dispatch the {@link ServiceInstancesChangedEvent}
- *
- * @param serviceName the name of service whose service instances have been changed
- * @param serviceInstances the service instances have been changed
- */
- default void dispatchServiceInstancesChangedEvent(String serviceName, List<ServiceInstance> serviceInstances) {
- dispatchServiceInstancesChangedEvent(new ServiceInstancesChangedEvent(serviceName, serviceInstances));
- }
-
- /**
- * Dispatch the {@link ServiceInstancesChangedEvent}
- *
- * @param event the {@link ServiceInstancesChangedEvent}
- */
- default void dispatchServiceInstancesChangedEvent(ServiceInstancesChangedEvent event) {
- getDefaultExtension().dispatch(event);
- }
-
// ==================================================================================== //
// String getKey(URL exportedURL);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyedEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyedEvent.java
deleted file mode 100644
index 9b7a548..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyedEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An event raised after the {@link ServiceDiscovery Service Discovery} destroyed.
- *
- * @see ServiceDiscovery#destroy()
- * @since 2.7.5
- */
-public class ServiceDiscoveryDestroyedEvent extends ServiceDiscoveryEvent {
-
- public ServiceDiscoveryDestroyedEvent(ServiceDiscovery source, ServiceDiscovery original) {
- super(source, original);
- }
-
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyingEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyingEvent.java
deleted file mode 100644
index ff937ff..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryDestroyingEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An event raised when the {@link ServiceDiscovery Service Discovery} is destroying.
- *
- * @see ServiceDiscovery#destroy()
- * @since 2.7.5
- */
-public class ServiceDiscoveryDestroyingEvent extends ServiceDiscoveryEvent {
-
- public ServiceDiscoveryDestroyingEvent(ServiceDiscovery source, ServiceDiscovery original) {
- super(source, original);
- }
-
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryEvent.java
deleted file mode 100644
index d312bbb..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryEvent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An abstract {@link Event} class for {@link ServiceDiscovery}
- *
- * @see Event
- * @see ServiceDiscovery
- * @since 2.7.5
- */
-public abstract class ServiceDiscoveryEvent extends Event {
-
- private final ServiceDiscovery original;
-
- /**
- * Constructs a prototypical Event.
- *
- * @param source The object on which the Event initially occurred.
- * @param original The original {@link ServiceDiscovery}
- * @throws IllegalArgumentException if source is null.
- */
- public ServiceDiscoveryEvent(ServiceDiscovery source, ServiceDiscovery original) {
- super(source);
- this.original = original;
- }
-
- @Override
- public ServiceDiscovery getSource() {
- return (ServiceDiscovery) super.getSource();
- }
-
- /**
- * Get the {@link ServiceDiscovery} on which the Event initially occurred.
- *
- * @return {@link ServiceDiscovery} instance
- */
- public final ServiceDiscovery getServiceDiscovery() {
- return getSource();
- }
-
- /**
- * Get the original {@link ServiceDiscovery}
- *
- * @return the original {@link ServiceDiscovery}
- */
- public final ServiceDiscovery getOriginal() {
- return original;
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryExceptionEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryExceptionEvent.java
deleted file mode 100644
index 543a784..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryExceptionEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An event raised when the {@link ServiceDiscovery Service Discovery} met with some exception
- *
- * @see ServiceDiscovery
- * @see org.apache.dubbo.event.Event
- * @since 2.7.5
- */
-public class ServiceDiscoveryExceptionEvent extends ServiceDiscoveryEvent {
-
- private final Throwable cause;
-
- public ServiceDiscoveryExceptionEvent(ServiceDiscovery source, ServiceDiscovery original, Throwable cause) {
- super(source, original);
- if (cause == null) {
- throw new NullPointerException("The cause of Exception must not null");
- }
- this.cause = cause;
- }
-
- /**
- * The cause of {@link Throwable}
- *
- * @return non-nul
- */
- public Throwable getCause() {
- return cause;
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializedEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializedEvent.java
deleted file mode 100644
index 769b8d7..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializedEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An event raised after the {@link ServiceDiscovery Service Discovery} initialized
- *
- * @see ServiceDiscovery#initialize(URL)
- * @since 2.7.5
- */
-public class ServiceDiscoveryInitializedEvent extends ServiceDiscoveryEvent {
-
- public ServiceDiscoveryInitializedEvent(ServiceDiscovery source, ServiceDiscovery original) {
- super(source, original);
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializingEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializingEvent.java
deleted file mode 100644
index 3f5039a..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceDiscoveryInitializingEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.registry.client.ServiceDiscovery;
-
-/**
- * An event raised when the {@link ServiceDiscovery Service Discovery} is initializing.
- *
- * @see ServiceDiscovery#initialize(URL)
- * @since 2.7.5
- */
-public class ServiceDiscoveryInitializingEvent extends ServiceDiscoveryEvent {
-
- public ServiceDiscoveryInitializingEvent(ServiceDiscovery source, ServiceDiscovery original) {
- super(source, original);
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstanceEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstanceEvent.java
deleted file mode 100644
index 941a5c8..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstanceEvent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.registry.client.event;
-
-import org.apache.dubbo.event.Event;
-import org.apache.dubbo.registry.client.ServiceInstance;
-
-/**
- * The {@link Event Dubbo event} for {@link ServiceInstance an service instance}
- *
- * @since 2.7.5
- */
-public abstract class ServiceInstanceEvent extends Event {
-
- private final ServiceInstance serviceInstance;
-
- /**
- * @param serviceInstance {@link ServiceInstance an service instance}
- */
- public ServiceInstanceEvent(Object source, ServiceInstance serviceInstance) {
- super(source);
- this.serviceInstance = serviceInstance;
- }
-
- /**
- * Get current {@link ServiceInstance service instance}
- *
- * @return current {@link ServiceInstance service instance}
- */
- public ServiceInstance getServiceInstance() {
- return serviceInstance;
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstancesChangedEvent.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstancesChangedEvent.java
index 47ec972..2053bf4 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstancesChangedEvent.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/ServiceInstancesChangedEvent.java
@@ -16,7 +16,6 @@
*/
package org.apache.dubbo.registry.client.event;
-import org.apache.dubbo.event.Event;
import org.apache.dubbo.registry.client.ServiceInstance;
import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;
@@ -31,7 +30,7 @@ import static java.util.Collections.unmodifiableList;
* @see ServiceInstancesChangedListener
* @since 2.7.5
*/
-public class ServiceInstancesChangedEvent extends Event {
+public class ServiceInstancesChangedEvent {
private final String serviceName;
@@ -43,13 +42,11 @@ public class ServiceInstancesChangedEvent extends Event {
* @throws IllegalArgumentException if source is null.
*/
public ServiceInstancesChangedEvent(String serviceName, List<ServiceInstance> serviceInstances) {
- super(serviceName);
this.serviceName = serviceName;
this.serviceInstances = unmodifiableList(serviceInstances);
}
protected ServiceInstancesChangedEvent() {
- super("");
this.serviceInstances = Collections.emptyList();
this.serviceName = "";
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 77019cf..38a887f 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -22,8 +22,6 @@ import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
import org.apache.dubbo.common.utils.CollectionUtils;
-import org.apache.dubbo.event.ConditionalEventListener;
-import org.apache.dubbo.event.EventListener;
import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.MetadataInfo.ServiceInfo;
import org.apache.dubbo.metadata.MetadataService;
@@ -60,12 +58,12 @@ import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getExportedServicesRevision;
/**
- * The Service Discovery Changed {@link EventListener Event Listener}
+ * The Service Discovery Changed Listener
*
* @see ServiceInstancesChangedEvent
* @since 2.7.5
*/
-public class ServiceInstancesChangedListener implements ConditionalEventListener<ServiceInstancesChangedEvent> {
+public class ServiceInstancesChangedListener {
private static final Logger logger = LoggerFactory.getLogger(ServiceInstancesChangedListener.class);
@@ -102,10 +100,7 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
* @param event {@link ServiceInstancesChangedEvent}
*/
public synchronized void onEvent(ServiceInstancesChangedEvent event) {
- if (destroyed.get()) {
- return;
- }
- if (this.isRetryAndExpired(event)) {
+ if (destroyed.get() || this.isRetryAndExpired(event) || !accept(event)) {
return;
}
@@ -158,20 +153,17 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
localServiceToRevisions.forEach((serviceInfo, revisions) -> {
String protocol = serviceInfo.getProtocol();
- Map<Set<String>, Object> revisionsToUrls = protocolRevisionsToUrls.computeIfAbsent(protocol, k -> {
- return new HashMap<>();
- });
+ Map<Set<String>, Object> revisionsToUrls = protocolRevisionsToUrls.computeIfAbsent(protocol, k -> new HashMap<>());
Object urls = revisionsToUrls.get(revisions);
- if (urls != null) {
- newServiceUrls.put(serviceInfo.getMatchKey(), urls);
- } else {
+ if (urls == null) {
urls = getServiceUrlsCache(revisionToInstances, revisions, protocol);
revisionsToUrls.put(revisions, urls);
- newServiceUrls.put(serviceInfo.getMatchKey(), urls);
}
+
+ newServiceUrls.put(serviceInfo.getMatchKey(), urls);
});
- this.serviceUrls = newServiceUrls;
+ this.serviceUrls = newServiceUrls;
this.notifyAddressChanged();
}
@@ -233,7 +225,7 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
* @param event {@link ServiceInstancesChangedEvent event}
* @return If service name matches, return <code>true</code>, or <code>false</code>
*/
- public final boolean accept(ServiceInstancesChangedEvent event) {
+ private boolean accept(ServiceInstancesChangedEvent event) {
return serviceNames.contains(event.getServiceName());
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
deleted file mode 100644
index d856dd2..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
+++ /dev/null
@@ -1 +0,0 @@
-registry-logging=org.apache.dubbo.registry.client.event.listener.LoggingEventListener
\ No newline at end of file
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/InMemoryServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/InMemoryServiceDiscovery.java
index 20eeed3..172d917 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/InMemoryServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/InMemoryServiceDiscovery.java
@@ -19,7 +19,7 @@ package org.apache.dubbo.registry.client;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.DefaultPage;
import org.apache.dubbo.common.utils.Page;
-import org.apache.dubbo.event.EventDispatcher;
+import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;
import java.util.ArrayList;
import java.util.HashMap;
@@ -38,8 +38,6 @@ import static java.util.Collections.emptyList;
*/
public class InMemoryServiceDiscovery implements ServiceDiscovery {
- private final EventDispatcher dispatcher = EventDispatcher.getDefaultExtension();
-
private Map<String, List<ServiceInstance>> repository = new HashMap<>();
private ServiceInstance serviceInstance;
diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
index 14ff81c..723a7ad 100644
--- a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
@@ -110,9 +110,7 @@ public class ZookeeperServiceDiscovery extends AbstractServiceDiscovery {
}
public void unregister(ServiceInstance serviceInstance) throws RuntimeException {
- doInServiceRegistry(serviceDiscovery -> {
- serviceDiscovery.unregisterService(build(serviceInstance));
- });
+ doInServiceRegistry(serviceDiscovery -> serviceDiscovery.unregisterService(build(serviceInstance)));
}
@Override
@@ -188,9 +186,7 @@ public class ZookeeperServiceDiscovery extends AbstractServiceDiscovery {
}
private void doInServiceRegistry(ThrowableConsumer<org.apache.curator.x.discovery.ServiceDiscovery> consumer) {
- ThrowableConsumer.execute(serviceDiscovery, s -> {
- consumer.accept(s);
- });
+ ThrowableConsumer.execute(serviceDiscovery, s -> consumer.accept(s));
}
private <R> R doInServiceDiscovery(ThrowableFunction<org.apache.curator.x.discovery.ServiceDiscovery, R> function) {
diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
index d311728..ae067cc 100644
--- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
+++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
@@ -19,7 +19,6 @@ package org.apache.dubbo.registry.zookeeper;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.NetUtils;
import org.apache.dubbo.common.utils.Page;
-import org.apache.dubbo.event.EventDispatcher;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
import org.apache.dubbo.registry.client.ServiceInstance;
@@ -63,7 +62,6 @@ public class ZookeeperServiceDiscoveryTest {
@BeforeEach
public void init() throws Exception {
- EventDispatcher.getDefaultExtension().removeAllEventListeners();
zkServerPort = getAvailablePort();
zkServer = new TestingServer(zkServerPort, true);
zkServer.start();