From 9c9da42129ceca6334662cc783f952e0eaadf627 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 18 Aug 2016 15:58:25 +1000 Subject: [PATCH 1/2] Fixes #851 - MBeanContainer no longer unregisters MBeans when "stopped". MBeanContainer now implements Destroyable, so calling Server.destroy() unregisters the MBeans. --- .../src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jetty-jmx/src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java b/jetty-jmx/src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java index 32fc5c53781..823dd5145ef 100644 --- a/jetty-jmx/src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java +++ b/jetty-jmx/src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java @@ -34,6 +34,7 @@ import javax.management.ObjectName; import org.eclipse.jetty.util.component.Container; import org.eclipse.jetty.util.component.ContainerLifeCycle; +import org.eclipse.jetty.util.component.Destroyable; import org.eclipse.jetty.util.component.Dumpable; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -41,7 +42,7 @@ import org.eclipse.jetty.util.log.Logger; /** * Container class for the MBean instances */ -public class MBeanContainer implements Container.InheritedListener, Dumpable +public class MBeanContainer implements Container.InheritedListener, Dumpable, Destroyable { private final static Logger LOG = Log.getLogger(MBeanContainer.class.getName()); private final static ConcurrentMap __unique = new ConcurrentHashMap(); @@ -268,6 +269,7 @@ public class MBeanContainer implements Container.InheritedListener, Dumpable return ContainerLifeCycle.dump(this); } + @Override public void destroy() { for (ObjectName oname : _beans.values()) From b70f0fdf15615e5ee735525e8eed32a4cf4ca718 Mon Sep 17 00:00:00 2001 From: Grzegorz Grzybek Date: Fri, 26 Aug 2016 10:44:23 +0200 Subject: [PATCH 2/2] Issue #868 - Use static Throwables without backtrace/stackTrace Signed-off-by: Grzegorz Grzybek --- .../continuation/ContinuationThrowable.java | 7 ++- .../eclipse/jetty/util/BlockingCallback.java | 6 +-- .../eclipse/jetty/util/ConstantThrowable.java | 43 +++++++++++++++++++ .../eclipse/jetty/util/FutureCallback.java | 2 +- .../org/eclipse/jetty/util/FuturePromise.java | 2 +- .../jetty/util/SharedBlockingCallback.java | 31 +++---------- 6 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java diff --git a/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java b/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java index e32717cabec..a6be363f136 100644 --- a/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java +++ b/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java @@ -43,4 +43,9 @@ package org.eclipse.jetty.continuation; *

*/ public class ContinuationThrowable extends Error -{} +{ + public ContinuationThrowable() + { + super(null, null, false, false); + } +} diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/BlockingCallback.java b/jetty-util/src/main/java/org/eclipse/jetty/util/BlockingCallback.java index 8601d8e9d16..74b77ffff9e 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/BlockingCallback.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/BlockingCallback.java @@ -36,11 +36,7 @@ public class BlockingCallback implements Callback { private static final Logger LOG = Log.getLogger(BlockingCallback.class); - private static Throwable SUCCEEDED=new Throwable() - { - @Override - public String toString() { return "SUCCEEDED"; } - }; + private static Throwable SUCCEEDED = new ConstantThrowable("SUCCEEDED"); private final CountDownLatch _latch = new CountDownLatch(1); private final AtomicReference _state = new AtomicReference<>(); diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java b/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java new file mode 100644 index 00000000000..b368c90f909 --- /dev/null +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java @@ -0,0 +1,43 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util; + +/** + * A {@link Throwable} that may be used in static contexts. It uses Java 7 + * constructor that prevents setting stackTrace inside exception object. + */ +public class ConstantThrowable extends Throwable { + + private String name; + + public ConstantThrowable() { + this(null); + } + + public ConstantThrowable(String name) { + super(null, null, false, false); + this.name = name; + } + + @Override + public String toString() { + return name; + } + +} diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java b/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java index 247535cb284..72ea4828a53 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class FutureCallback implements Future,Callback { - private static Throwable COMPLETED=new Throwable(); + private static Throwable COMPLETED=new ConstantThrowable(); private final AtomicBoolean _done=new AtomicBoolean(false); private final CountDownLatch _latch=new CountDownLatch(1); private Throwable _cause; diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java b/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java index 09a770b2a0a..a471407f86c 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class FuturePromise implements Future,Promise { - private static Throwable COMPLETED=new Throwable(); + private static Throwable COMPLETED=new ConstantThrowable(); private final AtomicBoolean _done=new AtomicBoolean(false); private final CountDownLatch _latch=new CountDownLatch(1); private Throwable _cause; diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java b/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java index 5b4e5a312eb..feebed87dcd 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java @@ -54,33 +54,12 @@ public class SharedBlockingCallback final Condition _idle = _lock.newCondition(); final Condition _complete = _lock.newCondition(); - - private static Throwable IDLE = new Throwable() - { - @Override - public String toString() - { - return "IDLE"; - } - }; - private static Throwable SUCCEEDED = new Throwable() - { - @Override - public String toString() - { - return "SUCCEEDED"; - } - }; - - private static Throwable FAILED = new Throwable() - { - @Override - public String toString() - { - return "FAILED"; - } - }; + private static Throwable IDLE = new ConstantThrowable("IDLE"); + + private static Throwable SUCCEEDED = new ConstantThrowable("SUCCEEDED"); + + private static Throwable FAILED = new ConstantThrowable("FAILED"); Blocker _blocker;