Use AbstractManager.close() instead of deprecated release().

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1ba19a0b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1ba19a0b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1ba19a0b

Branch: refs/heads/LOG4J2-1553
Commit: 1ba19a0b72fbdda59200ad008cb3b8509ecda7df
Parents: b73c589
Author: Gary Gregory <ggreg...@apache.org>
Authored: Sun Aug 28 12:52:14 2016 -0700
Committer: Gary Gregory <ggreg...@apache.org>
Committed: Sun Aug 28 12:52:14 2016 -0700

----------------------------------------------------------------------
 .../log4j/core/appender/AbstractManager.java    |  32 +-
 .../appender/AbstractOutputStreamAppender.java  |   2 +-
 .../core/appender/AbstractWriterAppender.java   |   2 +-
 .../appender/db/AbstractDatabaseAppender.java   |   4 +-
 .../appender/db/AbstractDatabaseManager.java    |   2 +-
 .../log4j/core/appender/mom/JmsAppender.java    |   2 +-
 .../log4j/core/appender/mom/JmsManager.java     |   2 +-
 .../appender/mom/jeromq/JeroMqAppender.java     | 362 +++++++++----------
 .../core/appender/mom/kafka/KafkaAppender.java  |   2 +-
 .../logging/log4j/core/lookup/JndiLookup.java   |   2 +-
 .../log4j/core/net/server/JmsServer.java        |   2 +-
 .../core/selector/JndiContextSelector.java      |   2 +-
 .../appender/MemoryMappedFileManagerTest.java   |   4 +-
 .../db/AbstractDatabaseAppenderTest.java        |  10 +-
 .../db/jdbc/AbstractJdbcAppenderTest.java       |   2 +-
 .../db/jpa/AbstractJpaAppenderTest.java         |   2 +-
 .../log4j/core/appender/mom/JmsAppenderIT.java  |   2 +-
 .../rolling/OnStartupTriggeringPolicyTest.java  |   2 +-
 .../log4j/flume/appender/FlumeAppender.java     |   2 +-
 .../appender/NoSqlDatabaseManagerTest.java      |  12 +-
 .../log4j/perf/jmh/JdbcAppenderBenchmark.java   |   4 +-
 .../log4j/perf/jmh/JpaAppenderBenchmark.java    |   4 +-
 22 files changed, 235 insertions(+), 225 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
index 4d7fc69..9e78df5 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
@@ -59,6 +59,24 @@ public abstract class AbstractManager {
     }
 
     /**
+     * Called to signify that this Manager is no longer required by an 
Appender.
+     */
+    public void close() {
+        LOCK.lock();
+        try {
+            --count;
+            if (count <= 0) {
+                MAP.remove(name);
+                LOGGER.debug("Shutting down {} {}", 
this.getClass().getSimpleName(), getName());
+                releaseSub();
+            }
+        } finally {
+            LOCK.unlock();
+        }
+    }
+
+
+    /**
      * Retrieves a Manager if it has been previously created or creates a new 
Manager.
      * @param name The name of the Manager to retrieve.
      * @param factory The Factory to use to create the Manager.
@@ -133,19 +151,11 @@ public abstract class AbstractManager {
 
     /**
      * Called to signify that this Manager is no longer required by an 
Appender.
+     * @deprecated Use {@link #close()}.
      */
+    @Deprecated
     public void release() {
-        LOCK.lock();
-        try {
-            --count;
-            if (count <= 0) {
-                MAP.remove(name);
-                LOGGER.debug("Shutting down {} {}", 
this.getClass().getSimpleName(), getName());
-                releaseSub();
-            }
-        } finally {
-            LOCK.unlock();
-        }
+        close();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
index 67e835a..3e14d84 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
@@ -108,7 +108,7 @@ public abstract class AbstractOutputStreamAppender<M 
extends OutputStreamManager
     @Override
     public void stop() {
         super.stop();
-        manager.release();
+        manager.close();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
index 18152fd..4e2b835 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
@@ -117,6 +117,6 @@ public abstract class AbstractWriterAppender<M extends 
WriterManager> extends Ab
     @Override
     public void stop() {
         super.stop();
-        manager.release();
+        manager.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
index 326d47f..959df1f 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
@@ -93,7 +93,7 @@ public abstract class AbstractDatabaseAppender<T extends 
AbstractDatabaseManager
     public final void stop() {
         super.stop();
         if (this.getManager() != null) {
-            this.getManager().release();
+            this.getManager().close();
         }
     }
 
@@ -130,7 +130,7 @@ public abstract class AbstractDatabaseAppender<T extends 
AbstractDatabaseManager
                 manager.startup();
             }
             this.manager = manager;
-            old.release();
+            old.close();
         } finally {
             this.writeLock.unlock();
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
index c3682dc..4457008 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
@@ -78,7 +78,7 @@ public abstract class AbstractDatabaseManager extends 
AbstractManager implements
     protected abstract void shutdownInternal() throws Exception;
 
     /**
-     * This method is called from the {@link #release()} method when the 
appender is stopped or the appender's manager
+     * This method is called from the {@link #close()} method when the 
appender is stopped or the appender's manager
      * is replaced. If it has not already been called, it calls {@link 
#shutdownInternal()} and catches any exceptions
      * it might throw.
      */

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java
index 7484ca1..b470a38 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java
@@ -70,7 +70,7 @@ public class JmsAppender extends AbstractAppender {
 
     @Override
     public void stop() {
-        this.manager.release();
+        this.manager.close();
         super.stop();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
index 7cf1637..1df23ec 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
@@ -132,7 +132,7 @@ public class JmsManager extends AbstractManager {
             this.connection.close();
         } catch (final JMSException ignored) {
         }
-        this.jndiManager.release();
+        this.jndiManager.close();
     }
 
     private static class JmsConfiguration {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.java
index 9f2fa41..064ed2c 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.java
@@ -1,181 +1,181 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-
-package org.apache.logging.log4j.core.appender.mom.jeromq;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.Filter;
-import org.apache.logging.log4j.core.Layout;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.appender.AbstractAppender;
-import org.apache.logging.log4j.core.config.Node;
-import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import 
org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
-import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.util.Strings;
-
-/**
- * Sends log events to one or more ZeroMQ (JeroMQ) endpoints.
- * <p>
- * Requires the JeroMQ jar (LGPL as of 0.3.5)
- * </p>
- */
-// TODO
-// Some methods are synchronized because a ZMQ.Socket is not thread-safe
-// Using a ThreadLocal for the publisher hangs tests on shutdown. There must be
-// some issue on threads owning certain resources as opposed to others.
-@Plugin(name = "JeroMQ", category = Node.CATEGORY, elementType = 
Appender.ELEMENT_TYPE, printObject = true)
-public final class JeroMqAppender extends AbstractAppender {
-
-    private static final int DEFAULT_BACKLOG = 100;
-
-    private static final int DEFAULT_IVL = 100;
-
-    private static final int DEFAULT_RCV_HWM = 1000;
-
-    private static final int DEFAULT_SND_HWM = 1000;
-
-    private final JeroMqManager manager;
-    private final List<String> endpoints;
-    private int sendRcFalse;
-    private int sendRcTrue;
-
-    private JeroMqAppender(final String name, final Filter filter, final 
Layout<? extends Serializable> layout,
-            final boolean ignoreExceptions, final List<String> endpoints, 
final long affinity, final long backlog,
-            final boolean delayAttachOnConnect, final byte[] identity, final 
boolean ipv4Only, final long linger,
-            final long maxMsgSize, final long rcvHwm, final long 
receiveBufferSize, final int receiveTimeOut,
-            final long reconnectIVL, final long reconnectIVLMax, final long 
sendBufferSize, final int sendTimeOut,
-            final long sndHWM, final int tcpKeepAlive, final long 
tcpKeepAliveCount, final long tcpKeepAliveIdle,
-            final long tcpKeepAliveInterval, final boolean xpubVerbose) {
-        super(name, filter, layout, ignoreExceptions);
-        this.manager = JeroMqManager.getJeroMqManager(name, affinity, backlog, 
delayAttachOnConnect, identity, ipv4Only,
-            linger, maxMsgSize, rcvHwm, receiveBufferSize, receiveTimeOut, 
reconnectIVL, reconnectIVLMax,
-            sendBufferSize, sendTimeOut, sndHWM, tcpKeepAlive, 
tcpKeepAliveCount, tcpKeepAliveIdle,
-            tcpKeepAliveInterval, xpubVerbose, endpoints);
-        this.endpoints = endpoints;
-    }
-
-    // The ZMQ.Socket class has other set methods that we do not cover because
-    // they throw unsupported operation exceptions.
-    @PluginFactory
-    public static JeroMqAppender createAppender(
-            // @formatter:off
-            @Required(message = "No name provided for JeroMqAppender") 
@PluginAttribute("name") final String name,
-            @PluginElement("Layout") Layout<?> layout,
-            @PluginElement("Filter") final Filter filter,
-            @PluginElement("Properties") final Property[] properties,
-            // Super attributes
-            @PluginAttribute("ignoreExceptions") final boolean 
ignoreExceptions,
-            // ZMQ attributes; defaults picked from zmq.Options.
-            @PluginAttribute(value = "affinity", defaultLong = 0) final long 
affinity,
-            @PluginAttribute(value = "backlog", defaultLong = DEFAULT_BACKLOG) 
final long backlog,
-            @PluginAttribute(value = "delayAttachOnConnect", defaultBoolean = 
false) final boolean delayAttachOnConnect,
-            @PluginAttribute(value = "identity") final byte[] identity,
-            @PluginAttribute(value = "ipv4Only", defaultBoolean = true) final 
boolean ipv4Only,
-            @PluginAttribute(value = "linger", defaultLong = -1) final long 
linger,
-            @PluginAttribute(value = "maxMsgSize", defaultLong = -1) final 
long maxMsgSize,
-            @PluginAttribute(value = "rcvHwm", defaultLong = DEFAULT_RCV_HWM) 
final long rcvHwm,
-            @PluginAttribute(value = "receiveBufferSize", defaultLong = 0) 
final long receiveBufferSize,
-            @PluginAttribute(value = "receiveTimeOut", defaultLong = -1) final 
int receiveTimeOut,
-            @PluginAttribute(value = "reconnectIVL", defaultLong = 
DEFAULT_IVL) final long reconnectIVL,
-            @PluginAttribute(value = "reconnectIVLMax", defaultLong = 0) final 
long reconnectIVLMax,
-            @PluginAttribute(value = "sendBufferSize", defaultLong = 0) final 
long sendBufferSize,
-            @PluginAttribute(value = "sendTimeOut", defaultLong = -1) final 
int sendTimeOut,
-            @PluginAttribute(value = "sndHwm", defaultLong = DEFAULT_SND_HWM) 
final long sndHwm,
-            @PluginAttribute(value = "tcpKeepAlive", defaultInt = -1) final 
int tcpKeepAlive,
-            @PluginAttribute(value = "tcpKeepAliveCount", defaultLong = -1) 
final long tcpKeepAliveCount,
-            @PluginAttribute(value = "tcpKeepAliveIdle", defaultLong = -1) 
final long tcpKeepAliveIdle,
-            @PluginAttribute(value = "tcpKeepAliveInterval", defaultLong = -1) 
final long tcpKeepAliveInterval,
-            @PluginAttribute(value = "xpubVerbose", defaultBoolean = false) 
final boolean xpubVerbose
-            // @formatter:on
-    ) {
-        if (layout == null) {
-            layout = PatternLayout.createDefaultLayout();
-        }
-        List<String> endpoints;
-        if (properties == null) {
-            endpoints = new ArrayList<>(0);
-        } else {
-            endpoints = new ArrayList<>(properties.length);
-            for (final Property property : properties) {
-                if ("endpoint".equalsIgnoreCase(property.getName())) {
-                    final String value = property.getValue();
-                    if (Strings.isNotEmpty(value)) {
-                        endpoints.add(value);
-                    }
-                }
-            }
-        }
-        LOGGER.debug("Creating JeroMqAppender with name={}, filter={}, 
layout={}, ignoreExceptions={}, endpoints={}",
-                name, filter, layout, ignoreExceptions, endpoints);
-        return new JeroMqAppender(name, filter, layout, ignoreExceptions, 
endpoints, affinity, backlog,
-                delayAttachOnConnect, identity, ipv4Only, linger, maxMsgSize, 
rcvHwm, receiveBufferSize,
-                receiveTimeOut, reconnectIVL, reconnectIVLMax, sendBufferSize, 
sendTimeOut, sndHwm, tcpKeepAlive,
-                tcpKeepAliveCount, tcpKeepAliveIdle, tcpKeepAliveInterval, 
xpubVerbose);
-    }
-
-    @Override
-    public synchronized void append(final LogEvent event) {
-        final Layout<? extends Serializable> layout = getLayout();
-        final byte[] formattedMessage = layout.toByteArray(event);
-        if (manager.send(getLayout().toByteArray(event))) {
-            sendRcTrue++;
-        } else {
-            sendRcFalse++;
-            LOGGER.error("Appender {} could not send message {} to JeroMQ {}", 
getName(), sendRcFalse, formattedMessage);
-        }
-    }
-
-    @Override
-    public void stop() {
-        manager.release();
-        super.stop();
-    }
-
-    // not public, handy for testing
-    int getSendRcFalse() {
-        return sendRcFalse;
-    }
-
-    // not public, handy for testing
-    int getSendRcTrue() {
-        return sendRcTrue;
-    }
-
-    // not public, handy for testing
-    void resetSendRcs() {
-        sendRcTrue = sendRcFalse = 0;
-    }
-
-    @Override
-    public String toString() {
-        return "JeroMqAppender{" +
-            "name=" + getName() +
-            ", state=" + getState() +
-            ", manager=" + manager +
-            ", endpoints=" + endpoints +
-            '}';
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+
+package org.apache.logging.log4j.core.appender.mom.jeromq;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import 
org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.util.Strings;
+
+/**
+ * Sends log events to one or more ZeroMQ (JeroMQ) endpoints.
+ * <p>
+ * Requires the JeroMQ jar (LGPL as of 0.3.5)
+ * </p>
+ */
+// TODO
+// Some methods are synchronized because a ZMQ.Socket is not thread-safe
+// Using a ThreadLocal for the publisher hangs tests on shutdown. There must be
+// some issue on threads owning certain resources as opposed to others.
+@Plugin(name = "JeroMQ", category = Node.CATEGORY, elementType = 
Appender.ELEMENT_TYPE, printObject = true)
+public final class JeroMqAppender extends AbstractAppender {
+
+    private static final int DEFAULT_BACKLOG = 100;
+
+    private static final int DEFAULT_IVL = 100;
+
+    private static final int DEFAULT_RCV_HWM = 1000;
+
+    private static final int DEFAULT_SND_HWM = 1000;
+
+    private final JeroMqManager manager;
+    private final List<String> endpoints;
+    private int sendRcFalse;
+    private int sendRcTrue;
+
+    private JeroMqAppender(final String name, final Filter filter, final 
Layout<? extends Serializable> layout,
+            final boolean ignoreExceptions, final List<String> endpoints, 
final long affinity, final long backlog,
+            final boolean delayAttachOnConnect, final byte[] identity, final 
boolean ipv4Only, final long linger,
+            final long maxMsgSize, final long rcvHwm, final long 
receiveBufferSize, final int receiveTimeOut,
+            final long reconnectIVL, final long reconnectIVLMax, final long 
sendBufferSize, final int sendTimeOut,
+            final long sndHWM, final int tcpKeepAlive, final long 
tcpKeepAliveCount, final long tcpKeepAliveIdle,
+            final long tcpKeepAliveInterval, final boolean xpubVerbose) {
+        super(name, filter, layout, ignoreExceptions);
+        this.manager = JeroMqManager.getJeroMqManager(name, affinity, backlog, 
delayAttachOnConnect, identity, ipv4Only,
+            linger, maxMsgSize, rcvHwm, receiveBufferSize, receiveTimeOut, 
reconnectIVL, reconnectIVLMax,
+            sendBufferSize, sendTimeOut, sndHWM, tcpKeepAlive, 
tcpKeepAliveCount, tcpKeepAliveIdle,
+            tcpKeepAliveInterval, xpubVerbose, endpoints);
+        this.endpoints = endpoints;
+    }
+
+    // The ZMQ.Socket class has other set methods that we do not cover because
+    // they throw unsupported operation exceptions.
+    @PluginFactory
+    public static JeroMqAppender createAppender(
+            // @formatter:off
+            @Required(message = "No name provided for JeroMqAppender") 
@PluginAttribute("name") final String name,
+            @PluginElement("Layout") Layout<?> layout,
+            @PluginElement("Filter") final Filter filter,
+            @PluginElement("Properties") final Property[] properties,
+            // Super attributes
+            @PluginAttribute("ignoreExceptions") final boolean 
ignoreExceptions,
+            // ZMQ attributes; defaults picked from zmq.Options.
+            @PluginAttribute(value = "affinity", defaultLong = 0) final long 
affinity,
+            @PluginAttribute(value = "backlog", defaultLong = DEFAULT_BACKLOG) 
final long backlog,
+            @PluginAttribute(value = "delayAttachOnConnect", defaultBoolean = 
false) final boolean delayAttachOnConnect,
+            @PluginAttribute(value = "identity") final byte[] identity,
+            @PluginAttribute(value = "ipv4Only", defaultBoolean = true) final 
boolean ipv4Only,
+            @PluginAttribute(value = "linger", defaultLong = -1) final long 
linger,
+            @PluginAttribute(value = "maxMsgSize", defaultLong = -1) final 
long maxMsgSize,
+            @PluginAttribute(value = "rcvHwm", defaultLong = DEFAULT_RCV_HWM) 
final long rcvHwm,
+            @PluginAttribute(value = "receiveBufferSize", defaultLong = 0) 
final long receiveBufferSize,
+            @PluginAttribute(value = "receiveTimeOut", defaultLong = -1) final 
int receiveTimeOut,
+            @PluginAttribute(value = "reconnectIVL", defaultLong = 
DEFAULT_IVL) final long reconnectIVL,
+            @PluginAttribute(value = "reconnectIVLMax", defaultLong = 0) final 
long reconnectIVLMax,
+            @PluginAttribute(value = "sendBufferSize", defaultLong = 0) final 
long sendBufferSize,
+            @PluginAttribute(value = "sendTimeOut", defaultLong = -1) final 
int sendTimeOut,
+            @PluginAttribute(value = "sndHwm", defaultLong = DEFAULT_SND_HWM) 
final long sndHwm,
+            @PluginAttribute(value = "tcpKeepAlive", defaultInt = -1) final 
int tcpKeepAlive,
+            @PluginAttribute(value = "tcpKeepAliveCount", defaultLong = -1) 
final long tcpKeepAliveCount,
+            @PluginAttribute(value = "tcpKeepAliveIdle", defaultLong = -1) 
final long tcpKeepAliveIdle,
+            @PluginAttribute(value = "tcpKeepAliveInterval", defaultLong = -1) 
final long tcpKeepAliveInterval,
+            @PluginAttribute(value = "xpubVerbose", defaultBoolean = false) 
final boolean xpubVerbose
+            // @formatter:on
+    ) {
+        if (layout == null) {
+            layout = PatternLayout.createDefaultLayout();
+        }
+        List<String> endpoints;
+        if (properties == null) {
+            endpoints = new ArrayList<>(0);
+        } else {
+            endpoints = new ArrayList<>(properties.length);
+            for (final Property property : properties) {
+                if ("endpoint".equalsIgnoreCase(property.getName())) {
+                    final String value = property.getValue();
+                    if (Strings.isNotEmpty(value)) {
+                        endpoints.add(value);
+                    }
+                }
+            }
+        }
+        LOGGER.debug("Creating JeroMqAppender with name={}, filter={}, 
layout={}, ignoreExceptions={}, endpoints={}",
+                name, filter, layout, ignoreExceptions, endpoints);
+        return new JeroMqAppender(name, filter, layout, ignoreExceptions, 
endpoints, affinity, backlog,
+                delayAttachOnConnect, identity, ipv4Only, linger, maxMsgSize, 
rcvHwm, receiveBufferSize,
+                receiveTimeOut, reconnectIVL, reconnectIVLMax, sendBufferSize, 
sendTimeOut, sndHwm, tcpKeepAlive,
+                tcpKeepAliveCount, tcpKeepAliveIdle, tcpKeepAliveInterval, 
xpubVerbose);
+    }
+
+    @Override
+    public synchronized void append(final LogEvent event) {
+        final Layout<? extends Serializable> layout = getLayout();
+        final byte[] formattedMessage = layout.toByteArray(event);
+        if (manager.send(getLayout().toByteArray(event))) {
+            sendRcTrue++;
+        } else {
+            sendRcFalse++;
+            LOGGER.error("Appender {} could not send message {} to JeroMQ {}", 
getName(), sendRcFalse, formattedMessage);
+        }
+    }
+
+    @Override
+    public void stop() {
+        manager.close();
+        super.stop();
+    }
+
+    // not public, handy for testing
+    int getSendRcFalse() {
+        return sendRcFalse;
+    }
+
+    // not public, handy for testing
+    int getSendRcTrue() {
+        return sendRcTrue;
+    }
+
+    // not public, handy for testing
+    void resetSendRcs() {
+        sendRcTrue = sendRcFalse = 0;
+    }
+
+    @Override
+    public String toString() {
+        return "JeroMqAppender{" +
+            "name=" + getName() +
+            ", state=" + getState() +
+            ", manager=" + manager +
+            ", endpoints=" + endpoints +
+            '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
index 81879e7..fa7f7e0 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
@@ -102,7 +102,7 @@ public final class KafkaAppender extends AbstractAppender {
     @Override
     public void stop() {
         super.stop();
-        manager.release();
+        manager.close();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
index 3ceed5d..35c4f9d 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
@@ -58,7 +58,7 @@ public class JndiLookup extends AbstractLookup {
             LOGGER.warn(LOOKUP, "Error looking up JNDI resource [{}].", 
jndiName, e);
             return null;
         } finally {
-            jndiManager.release();
+            jndiManager.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JmsServer.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JmsServer.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JmsServer.java
index 74a3834..c68b067 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JmsServer.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/JmsServer.java
@@ -104,7 +104,7 @@ public class JmsServer extends LogEventListener implements 
MessageListener, Life
         } catch (final JMSException e) {
             LOGGER.debug("Exception closing {}", messageConsumer, e);
         }
-        jmsManager.release();
+        jmsManager.close();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
index b563c8d..87709f0 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
@@ -114,7 +114,7 @@ public class JndiContextSelector implements 
NamedContextSelector {
         } catch (final NamingException ne) {
             LOGGER.error("Unable to lookup {}", Constants.JNDI_CONTEXT_NAME, 
ne);
         } finally {
-            jndiManager.release();
+            jndiManager.close();
         }
 
         return loggingContextName == null ? CONTEXT : 
locateContext(loggingContextName, null, configLocation);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
index 4b06b52..5838fb0 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
@@ -54,7 +54,7 @@ public class MemoryMappedFileManagerTest {
             manager.write(msg, 0, msg.length, false);
         }
 
-        manager.release();
+        manager.close();
 
         try (BufferedReader reader = new BufferedReader(new FileReader(file))) 
{
             String line = reader.readLine();
@@ -87,7 +87,7 @@ public class MemoryMappedFileManagerTest {
                 isAppend, isForce, 
MemoryMappedFileManager.DEFAULT_REGION_LENGTH, null, null);
 
         manager.write(new byte[initialLength], 0, initialLength);
-        manager.release();
+        manager.close();
         final int expected = initialLength * 2;
         assertEquals("appended, not overwritten", expected, file.length());
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
index a558460..d7f955d 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
@@ -33,7 +33,7 @@ public class AbstractDatabaseAppenderTest {
         this.manager = createMockBuilder(LocalAbstractDatabaseManager.class)
                 .withConstructor(String.class, int.class)
                 .withArgs(name, 0)
-                .addMockedMethod("release")
+                .addMockedMethod("close")
                 .createStrictMock();
 
         this.appender = createMockBuilder(LocalAbstractDatabaseAppender.class)
@@ -79,7 +79,7 @@ public class AbstractDatabaseAppenderTest {
 
         verify(this.manager, this.appender);
         reset(this.manager, this.appender);
-        this.manager.release();
+        this.manager.close();
         expectLastCall();
         replay(this.manager, this.appender);
 
@@ -98,10 +98,10 @@ public class AbstractDatabaseAppenderTest {
 
         verify(this.manager, this.appender);
         reset(this.manager, this.appender);
-        this.manager.release();
+        this.manager.close();
         expectLastCall();
         final LocalAbstractDatabaseManager newManager = 
createMockBuilder(LocalAbstractDatabaseManager.class)
-                .withConstructor(String.class, int.class).withArgs("name", 
0).addMockedMethod("release")
+                .withConstructor(String.class, int.class).withArgs("name", 
0).addMockedMethod("close")
                 .createStrictMock();
         newManager.startupInternal();
         expectLastCall();
@@ -111,7 +111,7 @@ public class AbstractDatabaseAppenderTest {
 
         verify(this.manager, this.appender, newManager);
         reset(this.manager, this.appender, newManager);
-        newManager.release();
+        newManager.close();
         expectLastCall();
         replay(this.manager, this.appender, newManager);
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
index 2d5f6ce..2b73c01 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
@@ -77,7 +77,7 @@ public abstract class AbstractJdbcAppenderTest {
             final Appender appender = 
context.getConfiguration().getAppender("databaseAppender");
             assertNotNull("The appender should not be null.", appender);
             assertTrue("The appender should be a JdbcAppender.", appender 
instanceof JdbcAppender);
-            ((JdbcAppender) appender).getManager().release();
+            ((JdbcAppender) appender).getManager().close();
         } finally {
             
System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
             context.reconfigure();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractJpaAppenderTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractJpaAppenderTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractJpaAppenderTest.java
index 8fb2aaa..8d8f5f7 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractJpaAppenderTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractJpaAppenderTest.java
@@ -62,7 +62,7 @@ public abstract class AbstractJpaAppenderTest {
             final Appender appender = 
context.getConfiguration().getAppender("databaseAppender");
             assertNotNull("The appender should not be null.", appender);
             assertTrue("The appender should be a JpaAppender.", appender 
instanceof JpaAppender);
-            ((JpaAppender) appender).getManager().release();
+            ((JpaAppender) appender).getManager().close();
         } finally {
             
System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
             context.reconfigure();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
index 58f4f63..069a20c 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
@@ -63,7 +63,7 @@ public class JmsAppenderIT {
 
     @AfterClass
     public static void tearDownClass() {
-        jmsManager.release();
+        jmsManager.close();
     }
 
     @Before

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index 4ab6b5b..8a6864f 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -87,7 +87,7 @@ public class OnStartupTriggeringPolicyTest {
             assertTrue("Missing: " + rolled.toString() + ", files on disk = " 
+ files, Files.exists(rolled));
             assertEquals(rolled.toString(), size, Files.size(rolled));
         } finally {
-            manager.release();
+            manager.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
 
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
index 2141681..874ac54 100644
--- 
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
+++ 
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
@@ -108,7 +108,7 @@ public final class FlumeAppender extends AbstractAppender 
implements FlumeEventF
     @Override
     public void stop() {
         super.stop();
-        manager.release();
+        manager.close();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
 
b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
index 152b584..8d5b7a0 100644
--- 
a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
+++ 
b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
@@ -90,7 +90,7 @@ public class NoSqlDatabaseManagerTest {
             manager.commitAndClose();
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }
@@ -120,7 +120,7 @@ public class NoSqlDatabaseManagerTest {
             verify(event);
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }
@@ -158,7 +158,7 @@ public class NoSqlDatabaseManagerTest {
             }
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }
@@ -247,7 +247,7 @@ public class NoSqlDatabaseManagerTest {
             verify(this.provider, this.connection, event, message);
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }
@@ -384,7 +384,7 @@ public class NoSqlDatabaseManagerTest {
             verify(this.provider, this.connection, event, message);
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }
@@ -583,7 +583,7 @@ public class NoSqlDatabaseManagerTest {
             verify(this.provider, this.connection, event, message);
         } finally {
             try {
-                manager.release();
+                manager.close();
             } catch (final Throwable ignore) {
                 /* */
             }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
index 4f475b1..62e6218 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
@@ -136,8 +136,8 @@ public class JdbcAppenderBenchmark {
     public void tearDown() throws SQLException {
         final LoggerContext context = LoggerContext.getContext(false);
         try {
-            ((JdbcAppender) 
context.getConfiguration().getAppender("H2Appender")).getManager().release();
-            ((JdbcAppender) 
context.getConfiguration().getAppender("HSQLDBAppender")).getManager().release();
+            ((JdbcAppender) 
context.getConfiguration().getAppender("H2Appender")).getManager().close();
+            ((JdbcAppender) 
context.getConfiguration().getAppender("HSQLDBAppender")).getManager().close();
         } finally {
             
System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
             // context.reconfigure();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ba19a0b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
index 6267232..462b74a 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
@@ -134,8 +134,8 @@ public class JpaAppenderBenchmark {
     public void tearDown() throws SQLException {
         final LoggerContext context = LoggerContext.getContext(false);
         try {
-            ((JpaAppender) 
context.getConfiguration().getAppender("H2Appender")).getManager().release();
-            ((JpaAppender) 
context.getConfiguration().getAppender("HSQLDBAppender")).getManager().release();
+            ((JpaAppender) 
context.getConfiguration().getAppender("H2Appender")).getManager().close();
+            ((JpaAppender) 
context.getConfiguration().getAppender("HSQLDBAppender")).getManager().close();
         } finally {
             
System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
             // context.reconfigure();

Reply via email to