From 61254caf8f7367f0d3fe097cd84545127a4ee734 Mon Sep 17 00:00:00 2001 From: leventov Date: Mon, 23 Nov 2015 19:08:36 +0300 Subject: [PATCH] Inner classes couldn't extend marshallers because cannot be Serializable --- .../impl/InstanceCreatingMarshaller.java | 9 ++++---- .../chronicle/map/CHMUseCasesTest.java | 21 +++++++++++------- .../map/ConstantSizeBySampleTest.java | 22 ++++++++++++------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/impl/InstanceCreatingMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/impl/InstanceCreatingMarshaller.java index ed02fcb18..9ab79e0ed 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/impl/InstanceCreatingMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/impl/InstanceCreatingMarshaller.java @@ -63,10 +63,11 @@ public abstract class InstanceCreatingMarshaller implements Serializable { tClass + " by default, delegates to \n" + this.getClass().getName() + " which assumes the type has a public no-arg\n" + "constructor. If this is not true, you should either extend the marshaller,\n" + - "overriding createInstance() and copy() (if defined), or write and\n" + - "configure your own marshaller for " + tClass + " type from scratch, and\n" + - "configure for the Chronicle Map via keyMarshaller[s]() or\n" + - "valueMarshaller[s]() methods", e); + "overriding createInstance() and copy() (if defined), and the extending\n" + + "class shouldn't be inner, because such classes couldn't be Serializable\n" + + "that is a requirement for marshaller classes, or write and configure your\n" + + "own marshaller for " + tClass + " type from scratch, and configure for the\n" + + "Chronicle Map via keyMarshaller[s]() or valueMarshaller[s]() methods", e); } } } diff --git a/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java b/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java index 2f1a2a625..5f61dce89 100644 --- a/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java +++ b/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java @@ -2638,16 +2638,10 @@ public class CHMUseCasesTest { @Test public void testBytesMarshallable2() throws IOException { - BytesMarshallableReader dataReader = new BytesMarshallableReader(Data.class) { - @Override - protected Data createInstance() { - return new Data(); - } - }; ChronicleMapBuilder builder = ChronicleMapBuilder .of(Data.class, Data.class) - .keyReaderAndDataAccess(dataReader, new DataDataAccess()) - .valueReaderAndDataAccess(dataReader, new DataDataAccess()) + .keyReaderAndDataAccess(new DataReader(), new DataDataAccess()) + .valueReaderAndDataAccess(new DataReader(), new DataDataAccess()) .actualChunkSize(64) .entries(1000); try (ChronicleMap map = newInstance(builder)) { @@ -2680,6 +2674,17 @@ public class CHMUseCasesTest { return new DataDataAccess(); } } + + private static class DataReader extends BytesMarshallableReader { + public DataReader() { + super(Data.class); + } + + @Override + protected Data createInstance() { + return new Data(); + } + } } interface IData extends BytesMarshallable { diff --git a/src/test/java/net/openhft/chronicle/map/ConstantSizeBySampleTest.java b/src/test/java/net/openhft/chronicle/map/ConstantSizeBySampleTest.java index 684040f0a..3c4c69fb0 100644 --- a/src/test/java/net/openhft/chronicle/map/ConstantSizeBySampleTest.java +++ b/src/test/java/net/openhft/chronicle/map/ConstantSizeBySampleTest.java @@ -89,13 +89,8 @@ public class ConstantSizeBySampleTest { public void testUnexpectedlyLongConstantExternalizableValues() throws IOException { try ( ChronicleMap map = ChronicleMapBuilder.of(Long.class, ExternalizableData.class) - .valueReaderAndDataAccess(new ExternalizableReader( - ExternalizableData.class) { - @Override - protected ExternalizableData createInstance() { - return new ExternalizableData(); - } - }, new ExternalizableDataDataAccess()) + .valueReaderAndDataAccess(new ExternalizableDataReader(), + new ExternalizableDataDataAccess()) .constantValueSizeBySample(new ExternalizableData()) .entries(100) .actualSegments(1) @@ -134,7 +129,7 @@ public class ConstantSizeBySampleTest { } private static class ExternalizableDataDataAccess - extends ExternalizableDataAccess { + extends ExternalizableDataAccess implements Serializable { public ExternalizableDataDataAccess() { super(ExternalizableData.class); } @@ -149,4 +144,15 @@ public class ConstantSizeBySampleTest { return new ExternalizableDataDataAccess(); } } + + private static class ExternalizableDataReader extends ExternalizableReader { + public ExternalizableDataReader() { + super(ExternalizableData.class); + } + + @Override + protected ExternalizableData createInstance() { + return new ExternalizableData(); + } + } }