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]>

Reply via email to