I think that we should be clear, in Javadoc, about whether this new method
is synchronous/blocking or not.

(I could say the same about quite a few existing methods as well, but let's
at least start to be clear about new methods from now.)

On Tue, Jan 26, 2016 at 1:31 AM, Matt Sicker <[email protected]> wrote:

> I like it!
>
> On 25 January 2016 at 18:23, Ralph Goers <[email protected]>
> wrote:
>
>> Then the method name would be terminate?  I could live with that.  I also
>> like the fact that when something goes wrong with it then it would be
>> interminable ;-)
>>
>> Ralph
>>
>> On Jan 25, 2016, at 5:18 PM, Matt Sicker <[email protected]> wrote:
>>
>> How about Terminable? It's even a real word to boot.
>>
>> On 25 January 2016 at 18:15, Ralph Goers <[email protected]>
>> wrote:
>>
>>> Yes, well - Serializable actually sounds like it should be a real word.
>>> Shutdownable doesn’t - in fact, my mail editor just split it into two words
>>> to “help” me. I take a different view. A class that declares it implements
>>> an interface isn’t “capable” of anything - it just implements the
>>> interface. The interface name is what tells you that the implementing class
>>> is able to do something, which is why you have Comparable instead of just
>>> Compare, Cloneable instead of just Clone,  or Closeable instead of just
>>> Close. Would you want Stop instead of Stoppable?  I view “able” as just a
>>> shorthand way of saying “Capable”, but unfortunately that just doesn’t
>>> sound right with Shutdown (at least to me).
>>>
>>> Here are some “able” alternatives - presumably each would have a
>>> corresponding method name instead of shutdown:
>>> Terminateable.
>>> Completeable.
>>> Concludeable.
>>> Haltable.
>>> Dismissable.
>>> Expireable.
>>>
>>> I suppose we could also use Stoppable but that seems odd since stop is
>>> part of Lifecycle.
>>>
>>> Got a preference?
>>>
>>> Ralph
>>>
>>>
>>>
>>> On Jan 25, 2016, at 4:35 PM, Gary Gregory <[email protected]>
>>> wrote:
>>>
>>> I see some interfaces with "*Capable*" in the name here and there in the
>>> FOSS world (but not in the JRE) so I am a little more comfortable with it.
>>>
>>> I still see plain old "Shutdown" as simpler.
>>>
>>> I think I've boiled down my feel for this name to the fact that the
>>> Capable postfix is redundant since a class implementing any interface is
>>> "capable" of that functionality. IOW we have Serializable vs.
>>> SerializationCabable, which means the same thing.
>>>
>>> Gary
>>>
>>> On Mon, Jan 25, 2016 at 7:27 AM, Ralph Goers <[email protected]
>>> > wrote:
>>>
>>>> What does it feel weird to you?  To be honest, I originally named the
>>>> interface ‘Shutdown” and then changed it since it really is about
>>>> implementing a behavior and “Shutdown” alone doesn’t really describe that.
>>>>
>>>> Ralph
>>>>
>>>> On Jan 24, 2016, at 11:09 PM, Gary Gregory <[email protected]>
>>>> wrote:
>>>>
>>>> On Sun, Jan 24, 2016 at 10:07 PM, Gary Gregory <[email protected]>
>>>>  wrote:
>>>>
>>>>> On Sun, Jan 24, 2016 at 1:54 PM, Ralph Goers <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Yes, Shutdownable is too weird.
>>>>>>
>>>>>
>>>>> How about calling it simply "Shutdown" then? FooCapable feels weird to
>>>>> me.
>>>>>
>>>>> Can anyone think of other (one-method or not) optional feature-like
>>>>> interfaces in the JRE or other code base?
>>>>>
>>>>
>>>> hm... ShutdownService?
>>>>
>>>> Gary
>>>>
>>>>
>>>>>
>>>>> Gary
>>>>>
>>>>> Closeable would imply there is a close method, not a shutdown method.
>>>>>> I have my doubts about the try-with-resources use case here.  Virtually 
>>>>>> all
>>>>>> usages are probably going to be to disable automatic shutdown and then 
>>>>>> the
>>>>>> user placing the shutdown call somewhere they can control, which probably
>>>>>> will have nothing to do with initialization of logging.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Jan 24, 2016, at 2:43 PM, Gary Gregory <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> Resending, got a error from my phone...
>>>>>> ---------- Forwarded message ----------
>>>>>> From: "Gary Gregory" <[email protected]>
>>>>>> Date: Jan 24, 2016 1:41 PM
>>>>>> Subject: Re: logging-log4j2 git commit: LOG4J2-124 - Add shutdown
>>>>>> methods to LogManager
>>>>>> To: <[email protected]>
>>>>>> Cc:
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> Any reason not use the usual -able postfix instead of
>>>>>> ShutdownCapable: Shutdownable sounds too weird? What about reusing plain
>>>>>> old Closeable? That means you could use the context in a 
>>>>>> try-with-resources
>>>>>> block, a bonus.
>>>>>>
>>>>>> Gary
>>>>>> On Jan 24, 2016 10:18 AM, <[email protected]> wrote:
>>>>>>
>>>>>>> Repository: logging-log4j2
>>>>>>> Updated Branches:
>>>>>>>   refs/heads/master 7d3aac4b9 -> 2df3f0e72
>>>>>>>
>>>>>>>
>>>>>>> LOG4J2-124 - Add shutdown methods to LogManager
>>>>>>>
>>>>>>>
>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>>>> Commit:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2df3f0e7
>>>>>>> Tree:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2df3f0e7
>>>>>>> Diff:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2df3f0e7
>>>>>>>
>>>>>>> Branch: refs/heads/master
>>>>>>> Commit: 2df3f0e7262c90e3fe1700f053eebf18491650d9
>>>>>>> Parents: 7d3aac4
>>>>>>> Author: Ralph Goers <[email protected]>
>>>>>>> Authored: Sun Jan 24 11:18:41 2016 -0700
>>>>>>> Committer: Ralph Goers <[email protected]>
>>>>>>> Committed: Sun Jan 24 11:18:41 2016 -0700
>>>>>>>
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>>  .../org/apache/logging/log4j/LogManager.java    | 62
>>>>>>> ++++++++++++++++++++
>>>>>>>  .../logging/log4j/spi/ShutdownCapable.java      | 17 ++++++
>>>>>>>  .../apache/logging/log4j/LogManagerTest.java    |  7 +++
>>>>>>>  .../logging/log4j/core/LoggerContext.java       |  8 ++-
>>>>>>>  4 files changed, 93 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> diff --git
>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>> index f10e5a8..64c6ee5 100644
>>>>>>> ---
>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>> +++
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>> @@ -27,6 +27,7 @@ import
>>>>>>> org.apache.logging.log4j.simple.SimpleLoggerContextFactory;
>>>>>>>  import org.apache.logging.log4j.spi.LoggerContext;
>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextFactory;
>>>>>>>  import org.apache.logging.log4j.spi.Provider;
>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable;
>>>>>>>  import org.apache.logging.log4j.status.StatusLogger;
>>>>>>>  import org.apache.logging.log4j.util.LoaderUtil;
>>>>>>>  import org.apache.logging.log4j.util.PropertiesUtil;
>>>>>>> @@ -285,6 +286,67 @@ public class LogManager {
>>>>>>>      }
>>>>>>>
>>>>>>>      /**
>>>>>>> +     * Shutdown using the default LoggerContext.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    public static void shutdown() {
>>>>>>> +        shutdown(getContext());
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Shutdown the logging system if the logging system supports
>>>>>>> it.
>>>>>>> +     * @param currentContext if true the LoggerContext for the
>>>>>>> caller of this method will be used.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    public static void shutdown(boolean currentContext) {
>>>>>>> +        shutdown(getContext(currentContext));
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Shutdown the logging system if the logging system supports
>>>>>>> it.
>>>>>>> +     * @param loader The ClassLoader for the context. If null the
>>>>>>> context will attempt to determine the appropriate
>>>>>>> +     *            ClassLoader.
>>>>>>> +     * @param currentContext if false the LoggerContext appropriate
>>>>>>> for the caller of this method will be used.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    public static void shutdown(final ClassLoader loader, final
>>>>>>> boolean currentContext) {
>>>>>>> +        shutdown(getContext(loader, currentContext));
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Shutdown the logging system if the logging system supports
>>>>>>> it.
>>>>>>> +     * @param context the LoggerContext.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    public static void shutdown(LoggerContext context) {
>>>>>>> +        if (context != null && context instanceof ShutdownCapable) {
>>>>>>> +            ((ShutdownCapable) context).shutdown();
>>>>>>> +        }
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Shutdown the logging system if the logging system supports
>>>>>>> it.
>>>>>>> +     * @param fqcn The fully qualified class name of the Class that
>>>>>>> this method is a member of.
>>>>>>> +     * @param currentContext if false the LoggerContext appropriate
>>>>>>> for the caller of this method will be used.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    protected static void shutdown(final String fqcn, final boolean
>>>>>>> currentContext) {
>>>>>>> +        shutdown(getContext(fqcn, currentContext));
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Shutdown the logging system if the logging system supports
>>>>>>> it.
>>>>>>> +     * @param fqcn The fully qualified class name of the Class that
>>>>>>> this method is a member of.
>>>>>>> +     * @param loader The ClassLoader for the context. If null the
>>>>>>> context will attempt to determine the appropriate
>>>>>>> +     *            ClassLoader.
>>>>>>> +     * @param currentContext if false the LoggerContext appropriate
>>>>>>> for the caller of this method will be used.
>>>>>>> +     * @since 2.6
>>>>>>> +     */
>>>>>>> +    protected static void shutdown(final String fqcn, final
>>>>>>> ClassLoader loader, final boolean currentContext) {
>>>>>>> +        shutdown(getContext(fqcn, loader, currentContext));
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    /**
>>>>>>>       * Returns the current LoggerContextFactory.
>>>>>>>       *
>>>>>>>       * @return The LoggerContextFactory.
>>>>>>>
>>>>>>>
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> diff --git
>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>> new file mode 100644
>>>>>>> index 0000000..a46ef60
>>>>>>> --- /dev/null
>>>>>>> +++
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>> @@ -0,0 +1,17 @@
>>>>>>> +/*
>>>>>>> + * Copyright (c) 2016 Nextiva, Inc. to Present.
>>>>>>> + * All rights reserved.
>>>>>>> + */
>>>>>>> +package org.apache.logging.log4j.spi;
>>>>>>> +
>>>>>>> +/**
>>>>>>> + * Interface to be implemented by LoggerContext's that provide a
>>>>>>> shutdown method.
>>>>>>> + * @since 2.6
>>>>>>> + */
>>>>>>> +public interface ShutdownCapable {
>>>>>>> +
>>>>>>> +    /**
>>>>>>> +     * Requests that the logging implementation shut down.
>>>>>>> +     */
>>>>>>> +    void shutdown();
>>>>>>> +}
>>>>>>>
>>>>>>>
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> diff --git
>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>> index 48f0eea..596a9f2 100644
>>>>>>> ---
>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>> +++
>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>> @@ -17,6 +17,7 @@
>>>>>>>  package org.apache.logging.log4j;
>>>>>>>
>>>>>>>  import org.apache.logging.log4j.message.ParameterizedMessageFactory;
>>>>>>> +import org.apache.logging.log4j.spi.LoggerContext;
>>>>>>>  import org.junit.Test;
>>>>>>>
>>>>>>>  import static org.junit.Assert.*;
>>>>>>> @@ -53,4 +54,10 @@ public class LogManagerTest {
>>>>>>>          assertNotNull("No Logger returned", logger);
>>>>>>>          assertTrue("Incorrect Logger name: " +
>>>>>>> logger.getName(),LogManagerTest.class.getName().equals(logger.getName()));
>>>>>>>      }
>>>>>>> +
>>>>>>> +    @Test
>>>>>>> +    public void testShutdown() {
>>>>>>> +        LoggerContext loggerContext = LogManager.getContext(false);
>>>>>>> +        LogManager.shutdown(loggerContext);
>>>>>>> +    }
>>>>>>>  }
>>>>>>>
>>>>>>>
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> diff --git
>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>> index 42efbb5..fcdfc16 100644
>>>>>>> ---
>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>> +++
>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>> @@ -45,6 +45,7 @@ import
>>>>>>> org.apache.logging.log4j.message.MessageFactory;
>>>>>>>  import org.apache.logging.log4j.spi.AbstractLogger;
>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextFactory;
>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextKey;
>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable;
>>>>>>>
>>>>>>>  import static
>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*;
>>>>>>>
>>>>>>> @@ -54,7 +55,7 @@ import static
>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*;
>>>>>>>   * filters, etc and will be atomically updated whenever a
>>>>>>> reconfigure occurs.
>>>>>>>   */
>>>>>>>  public class LoggerContext extends AbstractLifeCycle implements
>>>>>>> org.apache.logging.log4j.spi.LoggerContext,
>>>>>>> -        ConfigurationListener {
>>>>>>> +        ShutdownCapable, ConfigurationListener {
>>>>>>>
>>>>>>>      /**
>>>>>>>       * Property name of the property change event fired if the
>>>>>>> configuration is changed.
>>>>>>> @@ -278,6 +279,11 @@ public class LoggerContext extends
>>>>>>> AbstractLifeCycle implements org.apache.loggi
>>>>>>>      }
>>>>>>>
>>>>>>>      @Override
>>>>>>> +    public void shutdown() {
>>>>>>> +        stop();
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    @Override
>>>>>>>      public void stop() {
>>>>>>>          LOGGER.debug("Stopping LoggerContext[name={}, {}]...",
>>>>>>> getName(), this);
>>>>>>>          configLock.lock();
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> E-Mail: [email protected] | [email protected]
>>>>> <[email protected]>
>>>>> Java Persistence with Hibernate, Second Edition
>>>>> <http://www.manning.com/bauer3/>
>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>> Blog: http://garygregory.wordpress.com
>>>>> Home: http://garygregory.com/
>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: [email protected] | [email protected]
>>>> <[email protected]>
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> E-Mail: [email protected] | [email protected]
>>> Java Persistence with Hibernate, Second Edition
>>> <http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <[email protected]>
>>
>>
>>
>
>
> --
> Matt Sicker <[email protected]>
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
[email protected]
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to