]> jfr.im git - irc/rizon/moo.git/commitdiff
Report errors in scheduled futures.
authorOrillion <redacted>
Sun, 8 May 2016 18:42:40 +0000 (20:42 +0200)
committerOrillion <redacted>
Sun, 8 May 2016 19:01:31 +0000 (21:01 +0200)
moo/src/main/java/net/rizon/moo/FutureExceptionListener.java [new file with mode: 0644]
moo/src/main/java/net/rizon/moo/Moo.java
moo/src/main/java/net/rizon/moo/MooModule.java

diff --git a/moo/src/main/java/net/rizon/moo/FutureExceptionListener.java b/moo/src/main/java/net/rizon/moo/FutureExceptionListener.java
new file mode 100644 (file)
index 0000000..2c2e03b
--- /dev/null
@@ -0,0 +1,32 @@
+package net.rizon.moo;
+
+import com.google.inject.Inject;
+import io.netty.util.concurrent.Future;
+import io.netty.util.concurrent.FutureListener;
+import org.slf4j.Logger;
+
+/**
+ * Reports any errors when a future operation is completed and is not completed
+ * successfully or canceled.
+ * <p>
+ * @author Orillion {@literal <orillion@rizon.net>}
+ */
+public class FutureExceptionListener<T> implements FutureListener<T>
+{
+       @Inject
+       private static Logger logger;
+
+       @Override
+       public void operationComplete(Future<T> future) throws Exception
+       {
+               if (future.isSuccess() || future.isCancelled())
+               {
+                       return;
+               }
+
+               Throwable t = future.cause();
+
+               logger.error("Scheduled operation failed: " + t.toString(), t);
+       }
+
+}
index 3f1c63cd2144008d250975077129c74581453ac2..b5047f3f6814629300dacd06f361990c993938b4 100644 (file)
@@ -232,7 +232,11 @@ public class Moo
        
        public static ScheduledFuture schedule(Runnable r, long t, TimeUnit unit)
        {
-               return moo.group.schedule(r, t, unit);
+               ScheduledFuture future = moo.group.schedule(r, t, unit);
+
+               future.addListener(Moo.injector.getInstance(FutureExceptionListener.class));
+
+               return future;
        }
 
        public void buildInjector()
index eae52de78561554370ac5dee7017f939bb98cef6..9fc0dd940095f7cee5629c89964113bc6d5acf70 100644 (file)
@@ -6,7 +6,6 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.matcher.Matchers;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.util.Providers;
 import net.rizon.moo.conf.Config;
 import net.rizon.moo.events.EventListener;
 import net.rizon.moo.injectors.logger.LogTypeListener;
@@ -40,6 +39,7 @@ public class MooModule extends AbstractModule
                bind(ServerManager.class).toInstance(serverManager);
                bind(DatabaseTimer.class).toInstance(new DatabaseTimer());
                bind(PluginManager.class).toInstance(pluginManager);
+               bind(FutureExceptionListener.class);
 
                bindListener(Matchers.any(), new LogTypeListener());