Esempio n. 1
0
        public IData ToData(object o, IPartitioningStrategy strategy)
        {
            if (o is null)
            {
                return(null);
            }
            if (o is IData data)
            {
                return(data);
            }

            var output = GetDataOutput();

            try
            {
                var serializer    = SerializerFor(o);
                var partitionHash = CalculatePartitionHash(o, strategy);
                output.Write(partitionHash, Endianness.BigEndian);
                output.Write(serializer.TypeId, Endianness.BigEndian);
                serializer.Write(output, o);
                return(new HeapData(output.ToByteArray()));
            }
            catch (Exception e) when(!(e is OutOfMemoryException) && !(e is SerializationException))
            {
                throw new SerializationException(e);
            }
            finally
            {
                ReturnDataOutput(output);
            }
        }
        public IData ToData(object obj, IPartitioningStrategy strategy)
        {
            if (obj == null)
            {
                return(null);
            }
            if (obj is IData)
            {
                return((IData)obj);
            }
            var pool = _bufferPoolThreadLocal.Get();
            var @out = pool.TakeOutputBuffer();

            try
            {
                var serializer    = SerializerFor(obj);
                var partitionHash = CalculatePartitionHash(obj, strategy);
                @out.WriteInt(partitionHash, ByteOrder.BigEndian);
                @out.WriteInt(serializer.GetTypeId(), ByteOrder.BigEndian);
                serializer.Write(@out, obj);
                return(new HeapData(@out.ToByteArray()));
            }
            catch (Exception e)
            {
                throw HandleException(e);
            }
            finally
            {
                pool.ReturnOutputBuffer(@out);
            }
        }
Esempio n. 3
0
        internal SerializationService(IInputOutputFactory inputOutputFactory, int version,
                                      IDictionary <int, IDataSerializableFactory> dataSerializableFactories,
                                      IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions,
                                      bool checkClassDefErrors, IManagedContext managedContext,
                                      IPartitioningStrategy partitionStrategy, int initialOutputBufferSize, bool enableCompression,
                                      bool enableSharedObject)
        {
            _inputOutputFactory        = inputOutputFactory;
            _managedContext            = managedContext;
            GlobalPartitioningStrategy = partitionStrategy;
            _outputBufferSize          = initialOutputBufferSize;
            _bufferPoolThreadLocal     = new BufferPoolThreadLocal(this);
            _portableContext           = new PortableContext(this, version);
            _dataSerializerAdapter     =
                CreateSerializerAdapterByGeneric <IIdentifiedDataSerializable>(
                    new DataSerializer(dataSerializableFactories));
            _portableSerializer            = new PortableSerializer(_portableContext, portableFactories);
            _portableSerializerAdapter     = CreateSerializerAdapterByGeneric <IPortable>(_portableSerializer);
            _nullSerializerAdapter         = CreateSerializerAdapterByGeneric <object>(new ConstantSerializers.NullSerializer());
            _serializableSerializerAdapter =
                CreateSerializerAdapterByGeneric <object>(new DefaultSerializers.SerializableSerializer());

            RegisterConstantSerializers();
            RegisterDefaultSerializers();
            RegisterClassDefinitions(classDefinitions, checkClassDefErrors);
        }
Esempio n. 4
0
        public IData ToData(object obj, IPartitioningStrategy strategy)
        {
            if (obj == null)
            {
                return(null);
            }
            if (obj is IData)
            {
                return((IData)obj);
            }
            var @out = Pop();

            try
            {
                var serializer = SerializerFor(obj.GetType());
                @out.WriteInt(serializer.GetTypeId(), ByteOrder.BigEndian);
                serializer.Write(@out, obj);
                var partitionHash = CalculatePartitionHash(obj, strategy);
                @out.WriteInt(partitionHash, ByteOrder.BigEndian);
                return(new HeapData(@out.ToByteArray()));
            }
            catch (Exception e)
            {
                throw HandleException(e);
            }
            finally
            {
                Push(@out);
            }
        }
        protected internal int CalculatePartitionHash(object obj, IPartitioningStrategy strategy)
        {
            var partitionHash        = 0;
            var partitioningStrategy = strategy ?? GlobalPartitioningStrategy;

            if (partitioningStrategy != null)
            {
                var pk = partitioningStrategy.GetPartitionKey(obj);
                if (pk != null && pk != obj)
                {
                    var partitionKey = ToData(pk, TheEmptyPartitioningStrategy);
                    partitionHash = partitionKey == null ? 0 : partitionKey.GetPartitionHash();
                }
            }
            return(partitionHash);
        }
Esempio n. 6
0
        internal SerializationService(IInputOutputFactory inputOutputFactory, int version,
                                      IDictionary <int, IDataSerializableFactory> dataSerializableFactories,
                                      IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions,
                                      SerializerHooks hooks,
                                      IEnumerable <ISerializerDefinitions> definitions,
                                      bool checkClassDefErrors, IPartitioningStrategy partitioningStrategy, int initialOutputBufferSize,
                                      ILoggerFactory loggerFactory)
        {
            _logger                    = loggerFactory.CreateLogger <SerializationService>();
            _inputOutputFactory        = inputOutputFactory;
            GlobalPartitioningStrategy = partitioningStrategy;
            _outputBufferSize          = initialOutputBufferSize;
            _bufferPoolThreadLocal     = new BufferPoolThreadLocal(this);
            _portableContext           = new PortableContext(this, version);

            // create data serializer (will be added as constant)
            var dataSerializer = new DataSerializer(hooks, dataSerializableFactories, loggerFactory);

            _dataSerializerAdapter = CreateSerializerAdapter <IIdentifiedDataSerializable>(dataSerializer);

            // create portable serializer (will be added as constant)
            _portableSerializer        = new PortableSerializer(_portableContext, portableFactories);
            _portableSerializerAdapter = CreateSerializerAdapter <IPortable>(_portableSerializer);

            // create the serializer of null objects (will be added as constant)
            _nullSerializerAdapter = CreateSerializerAdapter <object>(new NullSerializer());

            // create the serializable adapter (will be added as constant)
            _serializableSerializerAdapter = CreateSerializerAdapter <object>(new SerializableSerializer());

            // add defined serializers
            foreach (var definition in definitions)
            {
                definition.AddSerializers(this);
            }

            // add constant serializers
            AddMoreSerializers();

            // add class definitions
            RegisterClassDefinitions(classDefinitions, checkClassDefErrors);
        }
Esempio n. 7
0
 internal SerializationService(IInputOutputFactory inputOutputFactory, int version,
                               IDictionary <int, IDataSerializableFactory> dataSerializableFactories,
                               IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions,
                               bool checkClassDefErrors, IManagedContext managedContext,
                               IPartitioningStrategy partitionStrategy, int initialOutputBufferSize, bool enableCompression,
                               bool enableSharedObject)
 {
     this.inputOutputFactory    = inputOutputFactory;
     this.managedContext        = managedContext;
     globalPartitioningStrategy = partitionStrategy;
     outputBufferSize           = initialOutputBufferSize;
     dataOutputQueue            = new ThreadLocalOutputCache(this);
     portableContext            = new PortableContext(this, version);
     dataSerializerAdapter      =
         CreateSerializerAdapterByGeneric <IDataSerializable>(new DataSerializer(dataSerializableFactories));
     portableSerializer        = new PortableSerializer(portableContext, portableFactories);
     portableSerializerAdapter = CreateSerializerAdapterByGeneric <IPortable>(portableSerializer);
     RegisterConstantSerializers();
     RegisterDefaultSerializers();
     RegisterClassDefinitions(classDefinitions, checkClassDefErrors);
 }
Esempio n. 8
0
 public ISerializationServiceBuilder SetPartitioningStrategy(IPartitioningStrategy partitionStrategy)
 {
     _partitioningStrategy = partitionStrategy;
     return(this);
 }
 public ISerializationServiceBuilder SetPartitioningStrategy(IPartitioningStrategy partitionStrategy)
 {
     _partitioningStrategy = partitionStrategy;
     return this;
 }