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
