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