diff --git a/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java b/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java index bbc89f78..a49b127b 100644 --- a/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java +++ b/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java @@ -205,7 +205,7 @@ private BinaryPersistenceFoundation hostConnectionFoundation() hostFoundation.setTypeMismatchValidator(Persistence.typeMismatchValidatorFailing()); final PersistenceTypeDictionaryManager typeDictionaryManager = PersistenceTypeDictionaryManager.Transient( - hostFoundation.getTypeDictionaryCreator()); + hostFoundation.getTypeDictionaryProvider()); final PersistenceTypeDictionaryView typeDictionaryView = this.provideTypeDictionary(); typeDictionaryView.allTypeDefinitions().forEach(d -> typeDictionaryManager.registerTypeDefinition(d.value())); @@ -252,7 +252,7 @@ public BinaryPersistenceFoundation provideClientPersistenceFoundation( clientFoundation.setTypeIdProvider (protocol.idStrategy().createTypeIdProvider()); final PersistenceTypeDictionaryManager typeDictionaryManager = PersistenceTypeDictionaryManager.Transient( - clientFoundation.getTypeDictionaryCreator()); + clientFoundation.getTypeDictionaryProvider()); final PersistenceTypeDictionaryView typeDictionaryView = protocol.typeDictionary(); typeDictionaryView.allTypeDefinitions().forEach(d -> typeDictionaryManager.registerTypeDefinition(d.value())); @@ -376,7 +376,7 @@ public PersistenceTypeDictionary provideTypeDictionaryInternal() initFoundation.setTypeDictionaryManager( PersistenceTypeDictionaryManager.Transient( - initFoundation.getTypeDictionaryCreator() + initFoundation.getTypeDictionaryProvider() ) ); diff --git a/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java b/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java index 9cb98317..d031239b 100644 --- a/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java +++ b/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java @@ -43,7 +43,7 @@ public default PersistenceTypeDictionaryView provideTypeDictionary() initFoundation.setTypeDictionaryManager( PersistenceTypeDictionaryManager.Transient( - initFoundation.getTypeDictionaryCreator() + initFoundation.getTypeDictionaryProvider() ) ); diff --git a/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java b/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java index ef61ff8a..ac46e4c4 100644 --- a/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java +++ b/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java @@ -16,8 +16,8 @@ import static org.eclipse.serializer.util.X.notNull; -import org.eclipse.serializer.util.X; import org.eclipse.serializer.persistence.exceptions.PersistenceException; +import org.eclipse.serializer.util.X; public interface PersistenceTypeDictionaryManager extends PersistenceTypeDictionaryProvider { @@ -326,11 +326,11 @@ public final synchronized boolean registerRuntimeTypeDefinitions( public static PersistenceTypeDictionaryManager Transient( - final PersistenceTypeDictionaryCreator typeDictionaryCreator + final PersistenceTypeDictionaryProvider typeDictionaryProvider ) { return new PersistenceTypeDictionaryManager.Transient( - notNull(typeDictionaryCreator) + notNull(typeDictionaryProvider) ); } @@ -340,7 +340,7 @@ public final class Transient extends PersistenceTypeDictionaryManager.Abstract

type) throws Pe @Override public final synchronized PersistenceTypeHandlerManager initialize() { - logger.info("Initializing type handler manager"); - if(this.initialized) { -// XDebug.debugln("already initialized"); + logger.debug("type handler manager already initialized"); return this; } + logger.info("Initializing type handler manager"); + synchronized(this.typeHandlerRegistry) { this.synchInternalInitialize(); diff --git a/serializer/src/main/java/org/eclipse/serializer/Serializer.java b/serializer/src/main/java/org/eclipse/serializer/Serializer.java index 0c5769ac..3882b855 100644 --- a/serializer/src/main/java/org/eclipse/serializer/Serializer.java +++ b/serializer/src/main/java/org/eclipse/serializer/Serializer.java @@ -75,6 +75,13 @@ public interface Serializer extends AutoCloseable * @return the deserialized object graph */ public T deserialize(M medium); + + /** + * Export the current type dictionary as String. + * + * @return type dictionary as String. + */ + public String exportTypeDictionay(); public static Serializer Bytes() { @@ -231,6 +238,13 @@ public synchronized void close() } } + @Override + public String exportTypeDictionay() + { + return this.foundation.getTypeDictionaryAssembler() + .assemble(this.persistenceManager.typeDictionary()); + } + private void lazyInit() { if(this.persistenceManager == null) diff --git a/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java b/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java index 8b56c76b..d18f401b 100644 --- a/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java +++ b/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java @@ -27,6 +27,7 @@ import org.eclipse.serializer.persistence.types.PersistenceRootsProvider; import org.eclipse.serializer.persistence.types.PersistenceStorer; import org.eclipse.serializer.persistence.types.PersistenceStorer.CreationObserver; +import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryLoader; import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryManager; import org.eclipse.serializer.persistence.types.PersistenceTypeHandlerManager; import org.eclipse.serializer.persistence.types.PersistenceTypeIdProvider; @@ -50,6 +51,8 @@ public interface SerializerFoundation> extends public F setSerializerTypeInfoStrategyCreator(SerializerTypeInfoStrategyCreator serializerTypeInfoStrategyCreator); + public F setInitialTypeDictionary(String typeDictionaryString); + public XEnum> getEntityTypes(); public F setEntityTypes(XEnum> entityTypes); @@ -66,6 +69,14 @@ public static SerializerFoundation New() return new SerializerFoundation.Default<>(); } + public static SerializerFoundation New(String typeDictionaryString) + { + SerializerFoundation foundation = new SerializerFoundation.Default<>(); + foundation.setInitialTypeDictionary(typeDictionaryString); + + return foundation; + } + public static class Default> extends BinaryPersistenceFoundation.Default @@ -96,6 +107,15 @@ public F setSerializerTypeInfoStrategyCreator(final SerializerTypeInfoStrategyCr return this.$(); } + @Override + public F setInitialTypeDictionary(String typeDictionaryString) + { + this.setTypeDictionaryLoader(()->typeDictionaryString); + this.ensureTypeDictionaryProvider(); + + return this.$(); + } + @Override public XEnum> getEntityTypes() { @@ -269,12 +289,17 @@ protected PersistenceTypeDictionaryManager ensureTypeDictionaryManager() { final PersistenceTypeDictionaryManager newTypeDictionaryManager = PersistenceTypeDictionaryManager.Transient( - this.getTypeDictionaryCreator() + this.getTypeDictionaryProvider() ) ; return newTypeDictionaryManager; } + @Override + protected PersistenceTypeDictionaryLoader ensureTypeDictionaryLoader() { + return () -> null; + } + } } diff --git a/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java b/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java index 0d342545..8ecc2217 100644 --- a/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java +++ b/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java @@ -351,6 +351,13 @@ public synchronized void close() } } + @Override + public String exportTypeDictionay() + { + return this.foundation.getTypeDictionaryAssembler() + .assemble(this.persistenceManager.typeDictionary()); + } + private void initialize() { if(this.persistenceManager == null)