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 <[email protected]> wrote: > Why are you doing this? > > Ralph > > On Feb 28, 2016, at 10:33 PM, Matt Sicker <[email protected]> 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 <[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]> > > -- Matt Sicker <[email protected]>
