You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Gary Gregory <ga...@gmail.com> on 2016/02/29 06:30:03 UTC

Fwd: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender managers and dependencies serializable.

Wait a sec. I've been guilty in the past of stamping classes with
Serializable in haste... and my lesson there is that you need unit tests to
make sure that the class is indeed serializable AND deserializable. Do we
have such tests?

Gary

---------- Forwarded message ----------
From: <ma...@apache.org>
Date: Sun, Feb 28, 2016 at 8:23 PM
Subject: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender
managers and dependencies serializable.
To: commits@logging.apache.org


Repository: logging-log4j2
Updated Branches:
  refs/heads/master 17aa30354 -> 026d27940


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/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 ba593a3..f60d0f9 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
@@ -49,6 +49,7 @@ public class OnStartupTriggeringPolicyTest {
     }

     private class MyRollingManager extends RollingFileManager {
+        private static final long serialVersionUID = 1L;

         private long timestamp;


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
----------------------------------------------------------------------
diff --git
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
index 9355582..7b4f570 100644
---
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
+++
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
@@ -17,15 +17,15 @@

 package org.apache.logging.log4j.core.appender.rolling.action;

+import java.io.Serializable;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;

-import org.apache.logging.log4j.core.appender.rolling.action.PathCondition;
-
 /**
  * Test helper class.
  */
-public class CountingCondition implements PathCondition {
+public class CountingCondition implements PathCondition, Serializable {
+    private static final long serialVersionUID = 1L;

     private final boolean accept;
     private int acceptCount;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
----------------------------------------------------------------------
diff --git
a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
index 9b483a6..206a395 100644
---
a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
+++
b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
@@ -42,6 +42,7 @@ public class InMemoryAppender extends
AbstractOutputStreamAppender<InMemoryAppen
     }

     static class InMemoryManager extends OutputStreamManager {
+        private static final long serialVersionUID = 1L;

         public InMemoryManager(final String name, final Layout<? extends
Serializable> layout,
                 final boolean writeHeader) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
index 55fb858..4a3a065 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
@@ -23,6 +23,7 @@ import
org.apache.logging.log4j.core.appender.AbstractManager;
  *
  */
 public abstract class AbstractFlumeManager extends AbstractManager {
+    private static final long serialVersionUID = 1L;

     public AbstractFlumeManager(final String name) {
         super(name);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
index e8cf2ea..b2e8760 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.logging.log4j.flume.appender;

+import java.io.Serializable;
+
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
@@ -27,7 +29,8 @@ import org.apache.logging.log4j.status.StatusLogger;
  * Agent Specification for FlumeAvroAppender.
  */
 @Plugin(name = "Agent", category = "Core", printObject = true)
-public final class Agent {
+public final class Agent implements Serializable {
+    private static final long serialVersionUID = 1L;

     private static final String DEFAULT_HOST = "localhost";


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
index 41af4fa..9da9e9e 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
@@ -16,6 +16,7 @@
  */
 package org.apache.logging.log4j.flume.appender;

+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;

@@ -24,7 +25,8 @@ import org.apache.flume.Event;
 /**
  *
  */
-public class BatchEvent {
+public class BatchEvent implements Serializable {
+    private static final long serialVersionUID = 1L;

     private final List<Event> events = new ArrayList<>();


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
index dd5dd96..1d39185 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
@@ -16,6 +16,8 @@
  */
 package org.apache.logging.log4j.flume.appender;

+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;

@@ -29,6 +31,7 @@ import
org.apache.logging.log4j.core.appender.ManagerFactory;
  * Manager for FlumeAvroAppenders.
  */
 public class FlumeAvroManager extends AbstractFlumeManager {
+    private static final long serialVersionUID = 1L;

     private static final int MAX_RECONNECTS = 3;
     private static final int MINIMUM_TIMEOUT = 1000;
@@ -50,7 +53,7 @@ public class FlumeAvroManager extends
AbstractFlumeManager {

     private final int current = 0;

-    private RpcClient rpcClient = null;
+    private transient RpcClient rpcClient = null;

     private BatchEvent batchEvent = new BatchEvent();
     private long nextSend = 0;
@@ -78,6 +81,11 @@ public class FlumeAvroManager extends
AbstractFlumeManager {
         this.rpcClient = connect(agents, retries, connectTimeout,
requestTimeout);
     }

+    private void readObject(final ObjectInputStream in) throws
IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        this.rpcClient = connect(this.agents, this.retries,
this.connectTimeoutMillis, this.requestTimeoutMillis);
+    }
+
     /**
      * Returns a FlumeAvroManager.
      * @param name The name of the manager.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
index a23c2ed..a4f45f1 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
@@ -35,6 +35,7 @@ import org.apache.logging.log4j.util.Strings;
  *
  */
 public class FlumeEmbeddedManager extends AbstractFlumeManager {
+    private static final long serialVersionUID = 1L;

     private static final String FILE_SEP =
PropertiesUtil.getProperties().getStringProperty("file.separator");


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
----------------------------------------------------------------------
diff --git
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 4134671..e846ae2 100644
---
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -66,6 +66,7 @@ import com.sleepycat.je.Transaction;
  * Manager that persists data to Berkeley DB before passing it on to Flume.
  */
 public class FlumePersistentManager extends FlumeAvroManager {
+    private static final long serialVersionUID = 1L;

     /** Attribute name for the key provider. */
     public static final String KEY_PROVIDER = "keyProvider";

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
index ac52eba..2291e08 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
@@ -17,6 +17,7 @@

 package org.apache.logging.log4j.nosql.appender;

+import java.io.Serializable;
 import java.util.concurrent.atomic.AtomicBoolean;

 /**
@@ -27,7 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
  * @param <T>See
  *            {@link NoSqlConnection}.
  */
-public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>>
implements NoSqlConnection<W, T> {
+public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>>
+    implements NoSqlConnection<W, T>, Serializable {
+    private static final long serialVersionUID = 1L;

     private final AtomicBoolean closed = new AtomicBoolean(false);


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
index d879b07..3a005fa 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.util.Closer;
  * @param <W> A type parameter for reassuring the compiler that all
operations are using the same {@link NoSqlObject}.
  */
 public final class NoSqlDatabaseManager<W> extends AbstractDatabaseManager
{
+    private static final long serialVersionUID = 1L;
     private static final NoSQLDatabaseManagerFactory FACTORY = new
NoSQLDatabaseManagerFactory();

     private final NoSqlProvider<NoSqlConnection<W, ? extends
NoSqlObject<W>>> provider;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
index 2494a5c..7ed5ec8 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
@@ -31,6 +31,7 @@ import org.lightcouch.Response;
  * The Apache CouchDB implementation of {@link NoSqlConnection}.
  */
 public final class CouchDbConnection extends
AbstractNoSqlConnection<Map<String, Object>, DefaultNoSqlObject> {
+    private static final long serialVersionUID = 1L;
     private final CouchDbClient client;

     public CouchDbConnection(final CouchDbClient client) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
index 1f9f0e7..591d839 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
@@ -16,6 +16,7 @@
  */
 package org.apache.logging.log4j.nosql.appender.couchdb;

+import java.io.Serializable;
 import java.lang.reflect.Method;

 import org.apache.logging.log4j.Logger;
@@ -35,7 +36,8 @@ import org.lightcouch.CouchDbProperties;
  * The Apache CouchDB implementation of {@link NoSqlProvider}.
  */
 @Plugin(name = "CouchDB", category = "Core", printObject = true)
-public final class CouchDbProvider implements
NoSqlProvider<CouchDbConnection> {
+public final class CouchDbProvider implements
NoSqlProvider<CouchDbConnection>, Serializable {
+    private static final long serialVersionUID = 1L;
     private static final int HTTP = 80;
     private static final int HTTPS = 443;
     private static final Logger LOGGER = StatusLogger.getLogger();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
index 577adea..4dfe588 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
@@ -36,6 +36,7 @@ import com.mongodb.WriteConcern;
  * The MongoDB implementation of {@link NoSqlConnection}.
  */
 public final class MongoDbConnection extends
AbstractNoSqlConnection<BasicDBObject, MongoDbObject> {
+    private static final long serialVersionUID = 1L;

     private static final Logger LOGGER = StatusLogger.getLogger();


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
----------------------------------------------------------------------
diff --git
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
index be9d9f4..cacb784 100644
---
a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
+++
b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
@@ -16,6 +16,7 @@
  */
 package org.apache.logging.log4j.nosql.appender.mongodb;

+import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -42,7 +43,8 @@ import com.mongodb.WriteConcern;
  * The MongoDB implementation of {@link NoSqlProvider}.
  */
 @Plugin(name = "MongoDb", category = "Core", printObject = true)
-public final class MongoDbProvider implements
NoSqlProvider<MongoDbConnection> {
+public final class MongoDbProvider implements
NoSqlProvider<MongoDbConnection>, Serializable {
+    private static final long serialVersionUID = 1L;

     private static final WriteConcern DEFAULT_WRITE_CONCERN =
WriteConcern.ACKNOWLEDGED;
     private static final Logger LOGGER = StatusLogger.getLogger();




-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
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

Re: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender managers and dependencies serializable.

Posted by Matt Sicker <bo...@gmail.com>.
I added a comment to LOG4J2-1300. The main idea is that there are a lot of
fake serializable classes in log4j-core, and I was working on normalizing
that.

On 29 February 2016 at 01:31, Ralph Goers <ra...@dslextreme.com>
wrote:

> Why are you doing this?
>
> Ralph
>
> On Feb 28, 2016, at 10:33 PM, Matt Sicker <bo...@gmail.com> wrote:
>
> Not yet, but that's an important part of this to at least determine which
> ones are even possible to serialize.
>
> On 28 February 2016 at 23:30, Gary Gregory <ga...@gmail.com> wrote:
>
>> Wait a sec. I've been guilty in the past of stamping classes with
>> Serializable in haste... and my lesson there is that you need unit tests to
>> make sure that the class is indeed serializable AND deserializable. Do we
>> have such tests?
>>
>> Gary
>>
>> ---------- Forwarded message ----------
>> From: <ma...@apache.org>
>> Date: Sun, Feb 28, 2016 at 8:23 PM
>> Subject: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender
>> managers and dependencies serializable.
>> To: commits@logging.apache.org
>>
>>
>> Repository: logging-log4j2
>> Updated Branches:
>>   refs/heads/master 17aa30354 -> 026d27940
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/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 ba593a3..f60d0f9 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
>> @@ -49,6 +49,7 @@ public class OnStartupTriggeringPolicyTest {
>>      }
>>
>>      private class MyRollingManager extends RollingFileManager {
>> +        private static final long serialVersionUID = 1L;
>>
>>          private long timestamp;
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> index 9355582..7b4f570 100644
>> ---
>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> +++
>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> @@ -17,15 +17,15 @@
>>
>>  package org.apache.logging.log4j.core.appender.rolling.action;
>>
>> +import java.io.Serializable;
>>  import java.nio.file.Path;
>>  import java.nio.file.attribute.BasicFileAttributes;
>>
>> -import
>> org.apache.logging.log4j.core.appender.rolling.action.PathCondition;
>> -
>>  /**
>>   * Test helper class.
>>   */
>> -public class CountingCondition implements PathCondition {
>> +public class CountingCondition implements PathCondition, Serializable {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private final boolean accept;
>>      private int acceptCount;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> index 9b483a6..206a395 100644
>> ---
>> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> +++
>> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> @@ -42,6 +42,7 @@ public class InMemoryAppender extends
>> AbstractOutputStreamAppender<InMemoryAppen
>>      }
>>
>>      static class InMemoryManager extends OutputStreamManager {
>> +        private static final long serialVersionUID = 1L;
>>
>>          public InMemoryManager(final String name, final Layout<? extends
>> Serializable> layout,
>>                  final boolean writeHeader) {
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> index 55fb858..4a3a065 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> @@ -23,6 +23,7 @@ import
>> org.apache.logging.log4j.core.appender.AbstractManager;
>>   *
>>   */
>>  public abstract class AbstractFlumeManager extends AbstractManager {
>> +    private static final long serialVersionUID = 1L;
>>
>>      public AbstractFlumeManager(final String name) {
>>          super(name);
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> index e8cf2ea..b2e8760 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> @@ -16,6 +16,8 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>>
>> +import java.io.Serializable;
>> +
>>  import org.apache.logging.log4j.Logger;
>>  import org.apache.logging.log4j.core.config.plugins.Plugin;
>>  import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
>> @@ -27,7 +29,8 @@ import org.apache.logging.log4j.status.StatusLogger;
>>   * Agent Specification for FlumeAvroAppender.
>>   */
>>  @Plugin(name = "Agent", category = "Core", printObject = true)
>> -public final class Agent {
>> +public final class Agent implements Serializable {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private static final String DEFAULT_HOST = "localhost";
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> index 41af4fa..9da9e9e 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>>
>> +import java.io.Serializable;
>>  import java.util.ArrayList;
>>  import java.util.List;
>>
>> @@ -24,7 +25,8 @@ import org.apache.flume.Event;
>>  /**
>>   *
>>   */
>> -public class BatchEvent {
>> +public class BatchEvent implements Serializable {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private final List<Event> events = new ArrayList<>();
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> index dd5dd96..1d39185 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> @@ -16,6 +16,8 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>>
>> +import java.io.IOException;
>> +import java.io.ObjectInputStream;
>>  import java.util.Properties;
>>  import java.util.concurrent.TimeUnit;
>>
>> @@ -29,6 +31,7 @@ import
>> org.apache.logging.log4j.core.appender.ManagerFactory;
>>   * Manager for FlumeAvroAppenders.
>>   */
>>  public class FlumeAvroManager extends AbstractFlumeManager {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private static final int MAX_RECONNECTS = 3;
>>      private static final int MINIMUM_TIMEOUT = 1000;
>> @@ -50,7 +53,7 @@ public class FlumeAvroManager extends
>> AbstractFlumeManager {
>>
>>      private final int current = 0;
>>
>> -    private RpcClient rpcClient = null;
>> +    private transient RpcClient rpcClient = null;
>>
>>      private BatchEvent batchEvent = new BatchEvent();
>>      private long nextSend = 0;
>> @@ -78,6 +81,11 @@ public class FlumeAvroManager extends
>> AbstractFlumeManager {
>>          this.rpcClient = connect(agents, retries, connectTimeout,
>> requestTimeout);
>>      }
>>
>> +    private void readObject(final ObjectInputStream in) throws
>> IOException, ClassNotFoundException {
>> +        in.defaultReadObject();
>> +        this.rpcClient = connect(this.agents, this.retries,
>> this.connectTimeoutMillis, this.requestTimeoutMillis);
>> +    }
>> +
>>      /**
>>       * Returns a FlumeAvroManager.
>>       * @param name The name of the manager.
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> index a23c2ed..a4f45f1 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> @@ -35,6 +35,7 @@ import org.apache.logging.log4j.util.Strings;
>>   *
>>   */
>>  public class FlumeEmbeddedManager extends AbstractFlumeManager {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private static final String FILE_SEP =
>> PropertiesUtil.getProperties().getStringProperty("file.separator");
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> index 4134671..e846ae2 100644
>> ---
>> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> +++
>> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> @@ -66,6 +66,7 @@ import com.sleepycat.je.Transaction;
>>   * Manager that persists data to Berkeley DB before passing it on to
>> Flume.
>>   */
>>  public class FlumePersistentManager extends FlumeAvroManager {
>> +    private static final long serialVersionUID = 1L;
>>
>>      /** Attribute name for the key provider. */
>>      public static final String KEY_PROVIDER = "keyProvider";
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> index ac52eba..2291e08 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> @@ -17,6 +17,7 @@
>>
>>  package org.apache.logging.log4j.nosql.appender;
>>
>> +import java.io.Serializable;
>>  import java.util.concurrent.atomic.AtomicBoolean;
>>
>>  /**
>> @@ -27,7 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
>>   * @param <T>See
>>   *            {@link NoSqlConnection}.
>>   */
>> -public abstract class AbstractNoSqlConnection<W, T extends
>> NoSqlObject<W>> implements NoSqlConnection<W, T> {
>> +public abstract class AbstractNoSqlConnection<W, T extends
>> NoSqlObject<W>>
>> +    implements NoSqlConnection<W, T>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private final AtomicBoolean closed = new AtomicBoolean(false);
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> index d879b07..3a005fa 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> @@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.util.Closer;
>>   * @param <W> A type parameter for reassuring the compiler that all
>> operations are using the same {@link NoSqlObject}.
>>   */
>>  public final class NoSqlDatabaseManager<W> extends
>> AbstractDatabaseManager {
>> +    private static final long serialVersionUID = 1L;
>>      private static final NoSQLDatabaseManagerFactory FACTORY = new
>> NoSQLDatabaseManagerFactory();
>>
>>      private final NoSqlProvider<NoSqlConnection<W, ? extends
>> NoSqlObject<W>>> provider;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> index 2494a5c..7ed5ec8 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> @@ -31,6 +31,7 @@ import org.lightcouch.Response;
>>   * The Apache CouchDB implementation of {@link NoSqlConnection}.
>>   */
>>  public final class CouchDbConnection extends
>> AbstractNoSqlConnection<Map<String, Object>, DefaultNoSqlObject> {
>> +    private static final long serialVersionUID = 1L;
>>      private final CouchDbClient client;
>>
>>      public CouchDbConnection(final CouchDbClient client) {
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> index 1f9f0e7..591d839 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.nosql.appender.couchdb;
>>
>> +import java.io.Serializable;
>>  import java.lang.reflect.Method;
>>
>>  import org.apache.logging.log4j.Logger;
>> @@ -35,7 +36,8 @@ import org.lightcouch.CouchDbProperties;
>>   * The Apache CouchDB implementation of {@link NoSqlProvider}.
>>   */
>>  @Plugin(name = "CouchDB", category = "Core", printObject = true)
>> -public final class CouchDbProvider implements
>> NoSqlProvider<CouchDbConnection> {
>> +public final class CouchDbProvider implements
>> NoSqlProvider<CouchDbConnection>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>>      private static final int HTTP = 80;
>>      private static final int HTTPS = 443;
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> index 577adea..4dfe588 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> @@ -36,6 +36,7 @@ import com.mongodb.WriteConcern;
>>   * The MongoDB implementation of {@link NoSqlConnection}.
>>   */
>>  public final class MongoDbConnection extends
>> AbstractNoSqlConnection<BasicDBObject, MongoDbObject> {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> index be9d9f4..cacb784 100644
>> ---
>> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> +++
>> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.nosql.appender.mongodb;
>>
>> +import java.io.Serializable;
>>  import java.lang.reflect.Field;
>>  import java.lang.reflect.Method;
>>  import java.util.ArrayList;
>> @@ -42,7 +43,8 @@ import com.mongodb.WriteConcern;
>>   * The MongoDB implementation of {@link NoSqlProvider}.
>>   */
>>  @Plugin(name = "MongoDb", category = "Core", printObject = true)
>> -public final class MongoDbProvider implements
>> NoSqlProvider<MongoDbConnection> {
>> +public final class MongoDbProvider implements
>> NoSqlProvider<MongoDbConnection>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>>
>>      private static final WriteConcern DEFAULT_WRITE_CONCERN =
>> WriteConcern.ACKNOWLEDGED;
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>>
>>
>>
>>
>> --
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> 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 <bo...@gmail.com>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender managers and dependencies serializable.

Posted by Ralph Goers <ra...@dslextreme.com>.
Why are you doing this?

Ralph

> On Feb 28, 2016, at 10:33 PM, Matt Sicker <bo...@gmail.com> wrote:
> 
> Not yet, but that's an important part of this to at least determine which ones are even possible to serialize.
> 
>> On 28 February 2016 at 23:30, Gary Gregory <ga...@gmail.com> wrote:
>> Wait a sec. I've been guilty in the past of stamping classes with Serializable in haste... and my lesson there is that you need unit tests to make sure that the class is indeed serializable AND deserializable. Do we have such tests?
>> 
>> Gary
>> 
>> ---------- Forwarded message ----------
>> From: <ma...@apache.org>
>> Date: Sun, Feb 28, 2016 at 8:23 PM
>> Subject: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender managers and dependencies serializable.
>> To: commits@logging.apache.org
>> 
>> 
>> Repository: logging-log4j2
>> Updated Branches:
>>   refs/heads/master 17aa30354 -> 026d27940
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/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 ba593a3..f60d0f9 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
>> @@ -49,6 +49,7 @@ public class OnStartupTriggeringPolicyTest {
>>      }
>> 
>>      private class MyRollingManager extends RollingFileManager {
>> +        private static final long serialVersionUID = 1L;
>> 
>>          private long timestamp;
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> index 9355582..7b4f570 100644
>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
>> @@ -17,15 +17,15 @@
>> 
>>  package org.apache.logging.log4j.core.appender.rolling.action;
>> 
>> +import java.io.Serializable;
>>  import java.nio.file.Path;
>>  import java.nio.file.attribute.BasicFileAttributes;
>> 
>> -import org.apache.logging.log4j.core.appender.rolling.action.PathCondition;
>> -
>>  /**
>>   * Test helper class.
>>   */
>> -public class CountingCondition implements PathCondition {
>> +public class CountingCondition implements PathCondition, Serializable {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private final boolean accept;
>>      private int acceptCount;
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> index 9b483a6..206a395 100644
>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
>> @@ -42,6 +42,7 @@ public class InMemoryAppender extends AbstractOutputStreamAppender<InMemoryAppen
>>      }
>> 
>>      static class InMemoryManager extends OutputStreamManager {
>> +        private static final long serialVersionUID = 1L;
>> 
>>          public InMemoryManager(final String name, final Layout<? extends Serializable> layout,
>>                  final boolean writeHeader) {
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> index 55fb858..4a3a065 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
>> @@ -23,6 +23,7 @@ import org.apache.logging.log4j.core.appender.AbstractManager;
>>   *
>>   */
>>  public abstract class AbstractFlumeManager extends AbstractManager {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      public AbstractFlumeManager(final String name) {
>>          super(name);
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> index e8cf2ea..b2e8760 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
>> @@ -16,6 +16,8 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>> 
>> +import java.io.Serializable;
>> +
>>  import org.apache.logging.log4j.Logger;
>>  import org.apache.logging.log4j.core.config.plugins.Plugin;
>>  import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
>> @@ -27,7 +29,8 @@ import org.apache.logging.log4j.status.StatusLogger;
>>   * Agent Specification for FlumeAvroAppender.
>>   */
>>  @Plugin(name = "Agent", category = "Core", printObject = true)
>> -public final class Agent {
>> +public final class Agent implements Serializable {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private static final String DEFAULT_HOST = "localhost";
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> index 41af4fa..9da9e9e 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>> 
>> +import java.io.Serializable;
>>  import java.util.ArrayList;
>>  import java.util.List;
>> 
>> @@ -24,7 +25,8 @@ import org.apache.flume.Event;
>>  /**
>>   *
>>   */
>> -public class BatchEvent {
>> +public class BatchEvent implements Serializable {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private final List<Event> events = new ArrayList<>();
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> index dd5dd96..1d39185 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
>> @@ -16,6 +16,8 @@
>>   */
>>  package org.apache.logging.log4j.flume.appender;
>> 
>> +import java.io.IOException;
>> +import java.io.ObjectInputStream;
>>  import java.util.Properties;
>>  import java.util.concurrent.TimeUnit;
>> 
>> @@ -29,6 +31,7 @@ import org.apache.logging.log4j.core.appender.ManagerFactory;
>>   * Manager for FlumeAvroAppenders.
>>   */
>>  public class FlumeAvroManager extends AbstractFlumeManager {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private static final int MAX_RECONNECTS = 3;
>>      private static final int MINIMUM_TIMEOUT = 1000;
>> @@ -50,7 +53,7 @@ public class FlumeAvroManager extends AbstractFlumeManager {
>> 
>>      private final int current = 0;
>> 
>> -    private RpcClient rpcClient = null;
>> +    private transient RpcClient rpcClient = null;
>> 
>>      private BatchEvent batchEvent = new BatchEvent();
>>      private long nextSend = 0;
>> @@ -78,6 +81,11 @@ public class FlumeAvroManager extends AbstractFlumeManager {
>>          this.rpcClient = connect(agents, retries, connectTimeout, requestTimeout);
>>      }
>> 
>> +    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
>> +        in.defaultReadObject();
>> +        this.rpcClient = connect(this.agents, this.retries, this.connectTimeoutMillis, this.requestTimeoutMillis);
>> +    }
>> +
>>      /**
>>       * Returns a FlumeAvroManager.
>>       * @param name The name of the manager.
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> index a23c2ed..a4f45f1 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
>> @@ -35,6 +35,7 @@ import org.apache.logging.log4j.util.Strings;
>>   *
>>   */
>>  public class FlumeEmbeddedManager extends AbstractFlumeManager {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private static final String FILE_SEP = PropertiesUtil.getProperties().getStringProperty("file.separator");
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> index 4134671..e846ae2 100644
>> --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
>> @@ -66,6 +66,7 @@ import com.sleepycat.je.Transaction;
>>   * Manager that persists data to Berkeley DB before passing it on to Flume.
>>   */
>>  public class FlumePersistentManager extends FlumeAvroManager {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      /** Attribute name for the key provider. */
>>      public static final String KEY_PROVIDER = "keyProvider";
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> index ac52eba..2291e08 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
>> @@ -17,6 +17,7 @@
>> 
>>  package org.apache.logging.log4j.nosql.appender;
>> 
>> +import java.io.Serializable;
>>  import java.util.concurrent.atomic.AtomicBoolean;
>> 
>>  /**
>> @@ -27,7 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
>>   * @param <T>See
>>   *            {@link NoSqlConnection}.
>>   */
>> -public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>> implements NoSqlConnection<W, T> {
>> +public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>>
>> +    implements NoSqlConnection<W, T>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private final AtomicBoolean closed = new AtomicBoolean(false);
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> index d879b07..3a005fa 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
>> @@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.util.Closer;
>>   * @param <W> A type parameter for reassuring the compiler that all operations are using the same {@link NoSqlObject}.
>>   */
>>  public final class NoSqlDatabaseManager<W> extends AbstractDatabaseManager {
>> +    private static final long serialVersionUID = 1L;
>>      private static final NoSQLDatabaseManagerFactory FACTORY = new NoSQLDatabaseManagerFactory();
>> 
>>      private final NoSqlProvider<NoSqlConnection<W, ? extends NoSqlObject<W>>> provider;
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> index 2494a5c..7ed5ec8 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
>> @@ -31,6 +31,7 @@ import org.lightcouch.Response;
>>   * The Apache CouchDB implementation of {@link NoSqlConnection}.
>>   */
>>  public final class CouchDbConnection extends AbstractNoSqlConnection<Map<String, Object>, DefaultNoSqlObject> {
>> +    private static final long serialVersionUID = 1L;
>>      private final CouchDbClient client;
>> 
>>      public CouchDbConnection(final CouchDbClient client) {
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> index 1f9f0e7..591d839 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.nosql.appender.couchdb;
>> 
>> +import java.io.Serializable;
>>  import java.lang.reflect.Method;
>> 
>>  import org.apache.logging.log4j.Logger;
>> @@ -35,7 +36,8 @@ import org.lightcouch.CouchDbProperties;
>>   * The Apache CouchDB implementation of {@link NoSqlProvider}.
>>   */
>>  @Plugin(name = "CouchDB", category = "Core", printObject = true)
>> -public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection> {
>> +public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>>      private static final int HTTP = 80;
>>      private static final int HTTPS = 443;
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> index 577adea..4dfe588 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
>> @@ -36,6 +36,7 @@ import com.mongodb.WriteConcern;
>>   * The MongoDB implementation of {@link NoSqlConnection}.
>>   */
>>  public final class MongoDbConnection extends AbstractNoSqlConnection<BasicDBObject, MongoDbObject> {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> index be9d9f4..cacb784 100644
>> --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
>> @@ -16,6 +16,7 @@
>>   */
>>  package org.apache.logging.log4j.nosql.appender.mongodb;
>> 
>> +import java.io.Serializable;
>>  import java.lang.reflect.Field;
>>  import java.lang.reflect.Method;
>>  import java.util.ArrayList;
>> @@ -42,7 +43,8 @@ import com.mongodb.WriteConcern;
>>   * The MongoDB implementation of {@link NoSqlProvider}.
>>   */
>>  @Plugin(name = "MongoDb", category = "Core", printObject = true)
>> -public final class MongoDbProvider implements NoSqlProvider<MongoDbConnection> {
>> +public final class MongoDbProvider implements NoSqlProvider<MongoDbConnection>, Serializable {
>> +    private static final long serialVersionUID = 1L;
>> 
>>      private static final WriteConcern DEFAULT_WRITE_CONCERN = WriteConcern.ACKNOWLEDGED;
>>      private static final Logger LOGGER = StatusLogger.getLogger();
>> 
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org 
>> Java Persistence with Hibernate, Second Edition
>> JUnit in Action, Second Edition
>> Spring Batch in Action
>> Blog: http://garygregory.wordpress.com 
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
> 
> 
> 
> -- 
> Matt Sicker <bo...@gmail.com>

Re: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender managers and dependencies serializable.

Posted by Matt Sicker <bo...@gmail.com>.
Not yet, but that's an important part of this to at least determine which
ones are even possible to serialize.

On 28 February 2016 at 23:30, Gary Gregory <ga...@gmail.com> wrote:

> Wait a sec. I've been guilty in the past of stamping classes with
> Serializable in haste... and my lesson there is that you need unit tests to
> make sure that the class is indeed serializable AND deserializable. Do we
> have such tests?
>
> Gary
>
> ---------- Forwarded message ----------
> From: <ma...@apache.org>
> Date: Sun, Feb 28, 2016 at 8:23 PM
> Subject: [1/2] logging-log4j2 git commit: [LOG4J2-1300] Make appender
> managers and dependencies serializable.
> To: commits@logging.apache.org
>
>
> Repository: logging-log4j2
> Updated Branches:
>   refs/heads/master 17aa30354 -> 026d27940
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/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 ba593a3..f60d0f9 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
> @@ -49,6 +49,7 @@ public class OnStartupTriggeringPolicyTest {
>      }
>
>      private class MyRollingManager extends RollingFileManager {
> +        private static final long serialVersionUID = 1L;
>
>          private long timestamp;
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
> index 9355582..7b4f570 100644
> ---
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
> +++
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/CountingCondition.java
> @@ -17,15 +17,15 @@
>
>  package org.apache.logging.log4j.core.appender.rolling.action;
>
> +import java.io.Serializable;
>  import java.nio.file.Path;
>  import java.nio.file.attribute.BasicFileAttributes;
>
> -import
> org.apache.logging.log4j.core.appender.rolling.action.PathCondition;
> -
>  /**
>   * Test helper class.
>   */
> -public class CountingCondition implements PathCondition {
> +public class CountingCondition implements PathCondition, Serializable {
> +    private static final long serialVersionUID = 1L;
>
>      private final boolean accept;
>      private int acceptCount;
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
> index 9b483a6..206a395 100644
> ---
> a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
> +++
> b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
> @@ -42,6 +42,7 @@ public class InMemoryAppender extends
> AbstractOutputStreamAppender<InMemoryAppen
>      }
>
>      static class InMemoryManager extends OutputStreamManager {
> +        private static final long serialVersionUID = 1L;
>
>          public InMemoryManager(final String name, final Layout<? extends
> Serializable> layout,
>                  final boolean writeHeader) {
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
> index 55fb858..4a3a065 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
> @@ -23,6 +23,7 @@ import
> org.apache.logging.log4j.core.appender.AbstractManager;
>   *
>   */
>  public abstract class AbstractFlumeManager extends AbstractManager {
> +    private static final long serialVersionUID = 1L;
>
>      public AbstractFlumeManager(final String name) {
>          super(name);
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
> index e8cf2ea..b2e8760 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/Agent.java
> @@ -16,6 +16,8 @@
>   */
>  package org.apache.logging.log4j.flume.appender;
>
> +import java.io.Serializable;
> +
>  import org.apache.logging.log4j.Logger;
>  import org.apache.logging.log4j.core.config.plugins.Plugin;
>  import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
> @@ -27,7 +29,8 @@ import org.apache.logging.log4j.status.StatusLogger;
>   * Agent Specification for FlumeAvroAppender.
>   */
>  @Plugin(name = "Agent", category = "Core", printObject = true)
> -public final class Agent {
> +public final class Agent implements Serializable {
> +    private static final long serialVersionUID = 1L;
>
>      private static final String DEFAULT_HOST = "localhost";
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
> index 41af4fa..9da9e9e 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/BatchEvent.java
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.logging.log4j.flume.appender;
>
> +import java.io.Serializable;
>  import java.util.ArrayList;
>  import java.util.List;
>
> @@ -24,7 +25,8 @@ import org.apache.flume.Event;
>  /**
>   *
>   */
> -public class BatchEvent {
> +public class BatchEvent implements Serializable {
> +    private static final long serialVersionUID = 1L;
>
>      private final List<Event> events = new ArrayList<>();
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
> index dd5dd96..1d39185 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
> @@ -16,6 +16,8 @@
>   */
>  package org.apache.logging.log4j.flume.appender;
>
> +import java.io.IOException;
> +import java.io.ObjectInputStream;
>  import java.util.Properties;
>  import java.util.concurrent.TimeUnit;
>
> @@ -29,6 +31,7 @@ import
> org.apache.logging.log4j.core.appender.ManagerFactory;
>   * Manager for FlumeAvroAppenders.
>   */
>  public class FlumeAvroManager extends AbstractFlumeManager {
> +    private static final long serialVersionUID = 1L;
>
>      private static final int MAX_RECONNECTS = 3;
>      private static final int MINIMUM_TIMEOUT = 1000;
> @@ -50,7 +53,7 @@ public class FlumeAvroManager extends
> AbstractFlumeManager {
>
>      private final int current = 0;
>
> -    private RpcClient rpcClient = null;
> +    private transient RpcClient rpcClient = null;
>
>      private BatchEvent batchEvent = new BatchEvent();
>      private long nextSend = 0;
> @@ -78,6 +81,11 @@ public class FlumeAvroManager extends
> AbstractFlumeManager {
>          this.rpcClient = connect(agents, retries, connectTimeout,
> requestTimeout);
>      }
>
> +    private void readObject(final ObjectInputStream in) throws
> IOException, ClassNotFoundException {
> +        in.defaultReadObject();
> +        this.rpcClient = connect(this.agents, this.retries,
> this.connectTimeoutMillis, this.requestTimeoutMillis);
> +    }
> +
>      /**
>       * Returns a FlumeAvroManager.
>       * @param name The name of the manager.
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
> index a23c2ed..a4f45f1 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
> @@ -35,6 +35,7 @@ import org.apache.logging.log4j.util.Strings;
>   *
>   */
>  public class FlumeEmbeddedManager extends AbstractFlumeManager {
> +    private static final long serialVersionUID = 1L;
>
>      private static final String FILE_SEP =
> PropertiesUtil.getProperties().getStringProperty("file.separator");
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
> index 4134671..e846ae2 100644
> ---
> a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
> +++
> b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
> @@ -66,6 +66,7 @@ import com.sleepycat.je.Transaction;
>   * Manager that persists data to Berkeley DB before passing it on to
> Flume.
>   */
>  public class FlumePersistentManager extends FlumeAvroManager {
> +    private static final long serialVersionUID = 1L;
>
>      /** Attribute name for the key provider. */
>      public static final String KEY_PROVIDER = "keyProvider";
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
> index ac52eba..2291e08 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java
> @@ -17,6 +17,7 @@
>
>  package org.apache.logging.log4j.nosql.appender;
>
> +import java.io.Serializable;
>  import java.util.concurrent.atomic.AtomicBoolean;
>
>  /**
> @@ -27,7 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
>   * @param <T>See
>   *            {@link NoSqlConnection}.
>   */
> -public abstract class AbstractNoSqlConnection<W, T extends
> NoSqlObject<W>> implements NoSqlConnection<W, T> {
> +public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>>
> +    implements NoSqlConnection<W, T>, Serializable {
> +    private static final long serialVersionUID = 1L;
>
>      private final AtomicBoolean closed = new AtomicBoolean(false);
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
> index d879b07..3a005fa 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManager.java
> @@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.util.Closer;
>   * @param <W> A type parameter for reassuring the compiler that all
> operations are using the same {@link NoSqlObject}.
>   */
>  public final class NoSqlDatabaseManager<W> extends
> AbstractDatabaseManager {
> +    private static final long serialVersionUID = 1L;
>      private static final NoSQLDatabaseManagerFactory FACTORY = new
> NoSQLDatabaseManagerFactory();
>
>      private final NoSqlProvider<NoSqlConnection<W, ? extends
> NoSqlObject<W>>> provider;
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
> index 2494a5c..7ed5ec8 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java
> @@ -31,6 +31,7 @@ import org.lightcouch.Response;
>   * The Apache CouchDB implementation of {@link NoSqlConnection}.
>   */
>  public final class CouchDbConnection extends
> AbstractNoSqlConnection<Map<String, Object>, DefaultNoSqlObject> {
> +    private static final long serialVersionUID = 1L;
>      private final CouchDbClient client;
>
>      public CouchDbConnection(final CouchDbClient client) {
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
> index 1f9f0e7..591d839 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.logging.log4j.nosql.appender.couchdb;
>
> +import java.io.Serializable;
>  import java.lang.reflect.Method;
>
>  import org.apache.logging.log4j.Logger;
> @@ -35,7 +36,8 @@ import org.lightcouch.CouchDbProperties;
>   * The Apache CouchDB implementation of {@link NoSqlProvider}.
>   */
>  @Plugin(name = "CouchDB", category = "Core", printObject = true)
> -public final class CouchDbProvider implements
> NoSqlProvider<CouchDbConnection> {
> +public final class CouchDbProvider implements
> NoSqlProvider<CouchDbConnection>, Serializable {
> +    private static final long serialVersionUID = 1L;
>      private static final int HTTP = 80;
>      private static final int HTTPS = 443;
>      private static final Logger LOGGER = StatusLogger.getLogger();
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
> index 577adea..4dfe588 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java
> @@ -36,6 +36,7 @@ import com.mongodb.WriteConcern;
>   * The MongoDB implementation of {@link NoSqlConnection}.
>   */
>  public final class MongoDbConnection extends
> AbstractNoSqlConnection<BasicDBObject, MongoDbObject> {
> +    private static final long serialVersionUID = 1L;
>
>      private static final Logger LOGGER = StatusLogger.getLogger();
>
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/026d2794/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
> ----------------------------------------------------------------------
> diff --git
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
> index be9d9f4..cacb784 100644
> ---
> a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
> +++
> b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.logging.log4j.nosql.appender.mongodb;
>
> +import java.io.Serializable;
>  import java.lang.reflect.Field;
>  import java.lang.reflect.Method;
>  import java.util.ArrayList;
> @@ -42,7 +43,8 @@ import com.mongodb.WriteConcern;
>   * The MongoDB implementation of {@link NoSqlProvider}.
>   */
>  @Plugin(name = "MongoDb", category = "Core", printObject = true)
> -public final class MongoDbProvider implements
> NoSqlProvider<MongoDbConnection> {
> +public final class MongoDbProvider implements
> NoSqlProvider<MongoDbConnection>, Serializable {
> +    private static final long serialVersionUID = 1L;
>
>      private static final WriteConcern DEFAULT_WRITE_CONCERN =
> WriteConcern.ACKNOWLEDGED;
>      private static final Logger LOGGER = StatusLogger.getLogger();
>
>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> 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 <bo...@gmail.com>