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] > <mailto:[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] >> <mailto:[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] >> <mailto:[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] >>> <mailto:[email protected]>> wrote: >>> >>> On Sun, Jan 24, 2016 at 10:07 PM, Gary Gregory <[email protected] >>> <mailto:[email protected]>> wrote: >>> On Sun, Jan 24, 2016 at 1:54 PM, Ralph Goers <[email protected] >>> <mailto:[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] >>>> <mailto:[email protected]>> wrote: >>>> >>>> Resending, got a error from my phone... >>>> >>>> ---------- Forwarded message ---------- >>>> From: "Gary Gregory" <[email protected] >>>> <mailto:[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] <mailto:[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] <mailto:[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 >>>> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo> >>>> Commit: >>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2df3f0e7 >>>> <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 >>>> <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 >>>> <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] <mailto:[email protected]>> >>>> Authored: Sun Jan 24 11:18:41 2016 -0700 >>>> Committer: Ralph Goers <[email protected] <mailto:[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 >>>> >>>> <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 >>>> >>>> <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 >>>> >>>> <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 >>>> >>>> <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] <mailto:[email protected]> | >>> [email protected] <mailto:[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 <http://garygregory.wordpress.com/> >>> Home: http://garygregory.com/ <http://garygregory.com/> >>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >>> >>> >>> -- >>> E-Mail: [email protected] <mailto:[email protected]> | >>> [email protected] <mailto:[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 <http://garygregory.wordpress.com/> >>> Home: http://garygregory.com/ <http://garygregory.com/> >>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >> >> >> >> -- >> E-Mail: [email protected] <mailto:[email protected]> | >> [email protected] <mailto:[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 <http://garygregory.wordpress.com/> >> Home: http://garygregory.com/ <http://garygregory.com/> >> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> > > > > -- > Matt Sicker <[email protected] <mailto:[email protected]>>
