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 <[email protected]> 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: <[email protected]>
> 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: [email protected]
>
>
> 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: [email protected] | [email protected]
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



-- 
Matt Sicker <[email protected]>

Reply via email to