You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/09/10 15:44:23 UTC

ignite git commit: IGNITE-1398: Implemented.

Repository: ignite
Updated Branches:
  refs/heads/ignite-1398 [created] b259184a4


IGNITE-1398: Implemented.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b259184a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b259184a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b259184a

Branch: refs/heads/ignite-1398
Commit: b259184a4105cff06ea01193f0e67c83014c6302
Parents: 836283d
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Thu Sep 10 16:44:42 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Sep 10 16:44:42 2015 +0300

----------------------------------------------------------------------
 .../internal/portable/PortableContext.java      |   7 -
 .../dotnet/PlatformDotNetConfiguration.java     | 119 ---------
 .../PlatformDotNetPortableConfiguration.java    | 228 -----------------
 ...PlatformDotNetPortableTypeConfiguration.java | 248 -------------------
 .../Apache.Ignite.Core.csproj                   |   3 -
 .../main/dotnet/Apache.Ignite.Core/Ignition.cs  |  21 +-
 .../Impl/Interop/InteropDotNetConfiguration.cs  |  62 -----
 .../InteropDotNetPortableConfiguration.cs       | 127 ----------
 .../InteropDotNetPortableTypeConfiguration.cs   | 151 -----------
 .../Impl/Portable/PortableMarshaller.cs         |   4 -
 .../Impl/Portable/PortableUtils.cs              |  91 +++++++
 .../PlatformDotNetConfigurationClosure.java     |   2 +-
 .../platform/utils/PlatformUtils.java           |  60 ++++-
 .../dotnet/PlatformDotNetConfiguration.java     |  97 ++++++++
 .../PlatformDotNetPortableConfiguration.java    | 196 +++++++++++++++
 ...PlatformDotNetPortableTypeConfiguration.java | 214 ++++++++++++++++
 16 files changed, 664 insertions(+), 966 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
index 52df2a0..33a105b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
@@ -61,9 +61,6 @@ import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.portable.PortableMarshaller;
-import org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration;
-import org.apache.ignite.platform.dotnet.PlatformDotNetPortableConfiguration;
-import org.apache.ignite.platform.dotnet.PlatformDotNetPortableTypeConfiguration;
 import org.apache.ignite.portable.PortableException;
 import org.apache.ignite.portable.PortableIdMapper;
 import org.apache.ignite.portable.PortableInvalidClassException;
@@ -242,10 +239,6 @@ public class PortableContext implements Externalizable {
 
         registerPredefinedType(PortableObjectImpl.class, 200);
         registerPredefinedType(PortableMetaDataImpl.class, 201);
-
-        registerPredefinedType(PlatformDotNetConfiguration.class, 202);
-        registerPredefinedType(PlatformDotNetPortableConfiguration.class, 203);
-        registerPredefinedType(PlatformDotNetPortableTypeConfiguration.class, 204);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
deleted file mode 100644
index 80f4b26..0000000
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.platform.dotnet;
-
-import org.apache.ignite.configuration.PlatformConfiguration;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.portable.PortableException;
-import org.apache.ignite.portable.PortableMarshalAware;
-import org.apache.ignite.portable.PortableRawReader;
-import org.apache.ignite.portable.PortableRawWriter;
-import org.apache.ignite.portable.PortableReader;
-import org.apache.ignite.portable.PortableWriter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Mirror of .Net class Configuration.cs
- */
-public class PlatformDotNetConfiguration implements PlatformConfiguration, PortableMarshalAware {
-    /** */
-    private PlatformDotNetPortableConfiguration portableCfg;
-
-    /** */
-    private List<String> assemblies;
-
-    /**
-     * Default constructor.
-     */
-    public PlatformDotNetConfiguration() {
-        // No-op.
-    }
-
-    /**
-     * Copy constructor.
-     *
-     * @param cfg Configuration to copy.
-     */
-    public PlatformDotNetConfiguration(PlatformDotNetConfiguration cfg) {
-        if (cfg.getPortableConfiguration() != null)
-            portableCfg = new PlatformDotNetPortableConfiguration(cfg.getPortableConfiguration());
-
-        if (cfg.getAssemblies() != null)
-            assemblies = new ArrayList<>(cfg.getAssemblies());
-    }
-
-    /**
-     * @return Configuration.
-     */
-    public PlatformDotNetPortableConfiguration getPortableConfiguration() {
-        return portableCfg;
-    }
-
-    /**
-     * @param portableCfg Configuration.
-     */
-    public void setPortableConfiguration(PlatformDotNetPortableConfiguration portableCfg) {
-        this.portableCfg = portableCfg;
-    }
-
-    /**
-     * @return Assemblies.
-     */
-    public List<String> getAssemblies() {
-        return assemblies;
-    }
-
-    /**
-     *
-     * @param assemblies Assemblies.
-     */
-    public void setAssemblies(List<String> assemblies) {
-        this.assemblies = assemblies;
-    }
-
-    /**
-     * @return Configuration copy.
-     */
-    @SuppressWarnings("UnusedDeclaration")
-    private PlatformDotNetConfiguration copy() {
-        return new PlatformDotNetConfiguration(this);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writePortable(PortableWriter writer) throws PortableException {
-        PortableRawWriter rawWriter = writer.rawWriter();
-
-        rawWriter.writeObject(portableCfg);
-        rawWriter.writeCollection(assemblies);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readPortable(PortableReader reader) throws PortableException {
-        PortableRawReader rawReader = reader.rawReader();
-
-        portableCfg = rawReader.readObject();
-        assemblies = (List<String>)rawReader.<String>readCollection();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PlatformDotNetConfiguration.class, this);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
deleted file mode 100644
index 644a8e6..0000000
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.platform.dotnet;
-
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.portable.PortableException;
-import org.apache.ignite.portable.PortableMarshalAware;
-import org.apache.ignite.portable.PortableRawReader;
-import org.apache.ignite.portable.PortableRawWriter;
-import org.apache.ignite.portable.PortableReader;
-import org.apache.ignite.portable.PortableWriter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * Mirror of .Net class PortableConfiguration.cs
- */
-public class PlatformDotNetPortableConfiguration implements PortableMarshalAware {
-    /** Type cfgs. */
-    private Collection<PlatformDotNetPortableTypeConfiguration> typesCfg;
-
-    /** Types. */
-    private Collection<String> types;
-
-    /** Default name mapper. */
-    private String dfltNameMapper;
-
-    /** Default id mapper. */
-    private String dfltIdMapper;
-
-    /** Default serializer. */
-    private String dfltSerializer;
-
-    /** Default metadata enabled. */
-    private boolean dfltMetadataEnabled = true;
-
-    /** Whether to cache deserialized value in IGridPortableObject */
-    private boolean dfltKeepDeserialized = true;
-
-    /**
-     * Default constructor.
-     */
-    public PlatformDotNetPortableConfiguration() {
-        // No-op.
-    }
-
-    /**
-     * Copy constructor.
-     * @param cfg configuration to copy.
-     */
-    public PlatformDotNetPortableConfiguration(PlatformDotNetPortableConfiguration cfg) {
-        if (cfg.getTypesConfiguration() != null) {
-            typesCfg = new ArrayList<>();
-
-            for (PlatformDotNetPortableTypeConfiguration typeCfg : cfg.getTypesConfiguration())
-                typesCfg.add(new PlatformDotNetPortableTypeConfiguration(typeCfg));
-        }
-
-        if (cfg.getTypes() != null)
-            types = new ArrayList<>(cfg.getTypes());
-
-        dfltNameMapper = cfg.getDefaultNameMapper();
-        dfltIdMapper = cfg.getDefaultIdMapper();
-        dfltSerializer = cfg.getDefaultSerializer();
-        dfltMetadataEnabled = cfg.isDefaultMetadataEnabled();
-        dfltKeepDeserialized = cfg.isDefaultKeepDeserialized();
-    }
-
-    /**
-     * @return Type cfgs.
-     */
-    public Collection<PlatformDotNetPortableTypeConfiguration> getTypesConfiguration() {
-        return typesCfg;
-    }
-
-    /**
-     * @param typesCfg New type cfgs.
-     */
-    public void setTypesConfiguration(Collection<PlatformDotNetPortableTypeConfiguration> typesCfg) {
-        this.typesCfg = typesCfg;
-    }
-
-    /**
-     * @return Types.
-     */
-    public Collection<String> getTypes() {
-        return types;
-    }
-
-    /**
-     * @param types New types.
-     */
-    public void setTypes(Collection<String> types) {
-        this.types = types;
-    }
-
-    /**
-     * @return Default name mapper.
-     */
-    public String getDefaultNameMapper() {
-        return dfltNameMapper;
-    }
-
-    /**
-     * @param dfltNameMapper New default name mapper.
-     */
-    public void setDefaultNameMapper(String dfltNameMapper) {
-        this.dfltNameMapper = dfltNameMapper;
-    }
-
-    /**
-     * @return Default id mapper.
-     */
-    public String getDefaultIdMapper() {
-        return dfltIdMapper;
-    }
-
-    /**
-     * @param dfltIdMapper New default id mapper.
-     */
-    public void setDefaultIdMapper(String dfltIdMapper) {
-        this.dfltIdMapper = dfltIdMapper;
-    }
-
-    /**
-     * @return Default serializer.
-     */
-    public String getDefaultSerializer() {
-        return dfltSerializer;
-    }
-
-    /**
-     * @param dfltSerializer New default serializer.
-     */
-    public void setDefaultSerializer(String dfltSerializer) {
-        this.dfltSerializer = dfltSerializer;
-    }
-
-    /**
-     * Gets default metadata enabled flag. See {@link #setDefaultMetadataEnabled(boolean)} for more information.
-     *
-     * @return Default metadata enabled flag.
-     */
-    public boolean isDefaultMetadataEnabled() {
-        return dfltMetadataEnabled;
-    }
-
-    /**
-     * Sets default metadata enabled flag. When set to {@code true} all portable types will save it's metadata to
-     * cluster.
-     * <p />
-     * Can be overridden for particular type using
-     * {@link PlatformDotNetPortableTypeConfiguration#setMetadataEnabled(Boolean)}.
-     *
-     * @param dfltMetadataEnabled Default metadata enabled flag.
-     */
-    public void setDefaultMetadataEnabled(boolean dfltMetadataEnabled) {
-        this.dfltMetadataEnabled = dfltMetadataEnabled;
-    }
-
-    /**
-     * Gets default keep deserialized flag. See {@link #setDefaultKeepDeserialized(boolean)} for more information.
-     *
-     * @return  Flag indicates whether to cache deserialized value in IGridPortableObject.
-     */
-    public boolean isDefaultKeepDeserialized() {
-        return dfltKeepDeserialized;
-    }
-
-    /**
-     * Sets default keep deserialized flag.
-     * <p />
-     * Can be overridden for particular type using
-     * {@link PlatformDotNetPortableTypeConfiguration#setKeepDeserialized(Boolean)}.
-     *
-     * @param keepDeserialized Keep deserialized flag.
-     */
-    public void setDefaultKeepDeserialized(boolean keepDeserialized) {
-        this.dfltKeepDeserialized = keepDeserialized;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writePortable(PortableWriter writer) throws PortableException {
-        PortableRawWriter rawWriter = writer.rawWriter();
-
-        rawWriter.writeCollection(typesCfg);
-        rawWriter.writeCollection(types);
-        rawWriter.writeString(dfltNameMapper);
-        rawWriter.writeString(dfltIdMapper);
-        rawWriter.writeString(dfltSerializer);
-        rawWriter.writeBoolean(dfltMetadataEnabled);
-        rawWriter.writeBoolean(dfltKeepDeserialized);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readPortable(PortableReader reader) throws PortableException {
-        PortableRawReader rawReader = reader.rawReader();
-
-        typesCfg = rawReader.readCollection();
-        types = rawReader.readCollection();
-        dfltNameMapper = rawReader.readString();
-        dfltIdMapper = rawReader.readString();
-        dfltSerializer = rawReader.readString();
-        dfltMetadataEnabled = rawReader.readBoolean();
-        dfltKeepDeserialized = rawReader.readBoolean();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PlatformDotNetPortableConfiguration.class, this);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
deleted file mode 100644
index b6fdbde..0000000
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.platform.dotnet;
-
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.portable.PortableException;
-import org.apache.ignite.portable.PortableMarshalAware;
-import org.apache.ignite.portable.PortableRawReader;
-import org.apache.ignite.portable.PortableRawWriter;
-import org.apache.ignite.portable.PortableReader;
-import org.apache.ignite.portable.PortableWriter;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Mirror of .Net class GridDotNetPortableTypeConfiguration.cs
- */
-public class PlatformDotNetPortableTypeConfiguration implements PortableMarshalAware {
-    /** Assembly name. */
-    private String assemblyName;
-
-    /** Type name. */
-    private String typeName;
-
-    /** Name mapper. */
-    private String nameMapper;
-
-    /** Id mapper. */
-    private String idMapper;
-
-    /** Serializer. */
-    private String serializer;
-
-    /** Affinity key field name. */
-    private String affinityKeyFieldName;
-
-    /** Metadata enabled. */
-    private Boolean metadataEnabled;
-
-    /** Whether to cache deserialized value in IGridPortableObject. */
-    private Boolean keepDeserialized;
-
-    /**
-     * Default constructor.
-     */
-    public PlatformDotNetPortableTypeConfiguration() {
-        // No-op.
-    }
-
-    /**
-     * Copy constructor.
-     * @param cfg configuration to copy.
-     */
-    public PlatformDotNetPortableTypeConfiguration(PlatformDotNetPortableTypeConfiguration cfg) {
-        assemblyName = cfg.getAssemblyName();
-        typeName = cfg.getTypeName();
-        nameMapper = cfg.getNameMapper();
-        idMapper = cfg.getIdMapper();
-        serializer = cfg.getSerializer();
-        affinityKeyFieldName = cfg.getAffinityKeyFieldName();
-        metadataEnabled = cfg.getMetadataEnabled();
-        keepDeserialized = cfg.isKeepDeserialized();
-    }
-
-    /**
-     * @return Assembly name.
-     */
-    public String getAssemblyName() {
-        return assemblyName;
-    }
-
-    /**
-     * @param assemblyName New assembly name.
-     */
-    public void setAssemblyName(String assemblyName) {
-        this.assemblyName = assemblyName;
-    }
-
-    /**
-     * @return Type name.
-     */
-    public String getTypeName() {
-        return typeName;
-    }
-
-    /**
-     * @param typeName New type name.
-     */
-    public void setTypeName(String typeName) {
-        this.typeName = typeName;
-    }
-
-    /**
-     * @return Name mapper.
-     */
-    public String getNameMapper() {
-        return nameMapper;
-    }
-
-    /**
-     * @param nameMapper New name mapper.
-     */
-    public void setNameMapper(String nameMapper) {
-        this.nameMapper = nameMapper;
-    }
-
-    /**
-     * @return Id mapper.
-     */
-    public String getIdMapper() {
-        return idMapper;
-    }
-
-    /**
-     * @param idMapper New id mapper.
-     */
-    public void setIdMapper(String idMapper) {
-        this.idMapper = idMapper;
-    }
-
-    /**
-     * @return Serializer.
-     */
-    public String getSerializer() {
-        return serializer;
-    }
-
-    /**
-     * @param serializer New serializer.
-     */
-    public void setSerializer(String serializer) {
-        this.serializer = serializer;
-    }
-
-    /**
-     * Gets metadata enabled flag. See {@link #setMetadataEnabled(Boolean)} for more information.
-     *
-     * @return Metadata enabled flag.
-     */
-    public Boolean getMetadataEnabled() {
-        return metadataEnabled;
-    }
-
-    /**
-     * Sets metadata enabled flag.
-     * <p />
-     * When set to {@code null} default value taken from
-     * {@link PlatformDotNetPortableConfiguration#isDefaultMetadataEnabled()} will be used.
-     *
-     * @param metadataEnabled New metadata enabled.
-     */
-    public void setMetadataEnabled(Boolean metadataEnabled) {
-        this.metadataEnabled = metadataEnabled;
-    }
-
-    /**
-     * @return Affinity key field name.
-     */
-    public String getAffinityKeyFieldName() {
-        return affinityKeyFieldName;
-    }
-
-    /**
-     * @param affinityKeyFieldName Affinity key field name.
-     */
-    public void setAffinityKeyFieldName(String affinityKeyFieldName) {
-        this.affinityKeyFieldName = affinityKeyFieldName;
-    }
-
-    /**
-     * Gets keep deserialized flag.
-     *
-     * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
-     * @deprecated Use {@link #getKeepDeserialized()} instead.
-     */
-    @Deprecated
-    @Nullable public Boolean isKeepDeserialized() {
-        return keepDeserialized;
-    }
-
-    /**
-     * Gets keep deserialized flag. See {@link #setKeepDeserialized(Boolean)} for more information.
-     *
-     * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
-     */
-    @Nullable public Boolean getKeepDeserialized() {
-        return keepDeserialized;
-    }
-
-    /**
-     * Sets keep deserialized flag.
-     * <p />
-     * When set to {@code null} default value taken from
-     * {@link PlatformDotNetPortableConfiguration#isDefaultKeepDeserialized()} will be used.
-     *
-     * @param keepDeserialized Keep deserialized flag.
-     */
-    public void setKeepDeserialized(@Nullable Boolean keepDeserialized) {
-        this.keepDeserialized = keepDeserialized;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writePortable(PortableWriter writer) throws PortableException {
-        PortableRawWriter rawWriter = writer.rawWriter();
-
-        rawWriter.writeString(assemblyName);
-        rawWriter.writeString(typeName);
-        rawWriter.writeString(nameMapper);
-        rawWriter.writeString(idMapper);
-        rawWriter.writeString(serializer);
-        rawWriter.writeString(affinityKeyFieldName);
-        rawWriter.writeObject(metadataEnabled);
-        rawWriter.writeObject(keepDeserialized);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readPortable(PortableReader reader) throws PortableException {
-        PortableRawReader rawReader = reader.rawReader();
-
-        assemblyName = rawReader.readString();
-        typeName = rawReader.readString();
-        nameMapper = rawReader.readString();
-        idMapper = rawReader.readString();
-        serializer = rawReader.readString();
-        affinityKeyFieldName = rawReader.readString();
-        metadataEnabled = rawReader.readObject();
-        keepDeserialized = rawReader.readObject();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PlatformDotNetPortableTypeConfiguration.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
index 6a32729..3f20324 100644
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
+++ b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
@@ -220,9 +220,6 @@
     <Compile Include="Impl\Handle\IHandle.cs" />
     <Compile Include="Impl\IInteropCallback.cs" />
     <Compile Include="Impl\InteropExceptionHolder.cs" />
-    <Compile Include="Impl\Interop\InteropDotNetConfiguration.cs" />
-    <Compile Include="Impl\Interop\InteropDotNetPortableConfiguration.cs" />
-    <Compile Include="Impl\Interop\InteropDotNetPortableTypeConfiguration.cs" />
     <Compile Include="Impl\LifecycleBeanHolder.cs" />
     <Compile Include="Impl\Memory\InteropExternalMemory.cs" />
     <Compile Include="Impl\Memory\InteropMemoryUtils.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Ignition.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Ignition.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Ignition.cs
index c9de62a..96d002f 100644
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Ignition.cs
+++ b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Ignition.cs
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+using Apache.Ignite.Core.Portable;
+
 namespace Apache.Ignite.Core 
 {
     using System;
@@ -29,7 +31,6 @@ namespace Apache.Ignite.Core
     using Apache.Ignite.Core.Impl;
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Impl.Handle;
-    using Apache.Ignite.Core.Impl.Interop;
     using Apache.Ignite.Core.Impl.Memory;
     using Apache.Ignite.Core.Impl.Portable;
     using Apache.Ignite.Core.Impl.Portable.IO;
@@ -256,7 +257,7 @@ namespace Apache.Ignite.Core
             {
                 PortableReaderImpl reader = PU.Marshaller.StartUnmarshal(inStream);
 
-                PrepareConfiguration(reader.ReadObject<InteropDotNetConfiguration>());
+                PrepareConfiguration(reader);
 
                 PrepareLifecycleBeans(reader, outStream, handleRegistry);
             }
@@ -271,20 +272,24 @@ namespace Apache.Ignite.Core
         /// <summary>
         /// Preapare configuration.
         /// </summary>
-        /// <param name="dotNetCfg">Dot net configuration.</param>
-        private static void PrepareConfiguration(InteropDotNetConfiguration dotNetCfg)
+        /// <param name="reader">Reader.</param>
+        private static void PrepareConfiguration(PortableReaderImpl reader)
         {
             // 1. Load assemblies.
             IgniteConfiguration cfg = _startup.Configuration;
 
             LoadAssemblies(cfg.Assemblies);
 
-            if (dotNetCfg != null)
-                LoadAssemblies(dotNetCfg.Assemblies);
+            ICollection<string> cfgAssembllies;
+            PortableConfiguration portableCfg;
+
+            PortableUtils.ReadConfiguration(reader, out cfgAssembllies, out portableCfg);
+
+            LoadAssemblies(cfgAssembllies);
 
             // 2. Create marshaller only after assemblies are loaded.
-            if (cfg.PortableConfiguration == null && dotNetCfg != null && dotNetCfg.PortableCfg != null)
-                cfg.PortableConfiguration = dotNetCfg.PortableCfg.ToPortableConfiguration();
+            if (cfg.PortableConfiguration == null)
+                cfg.PortableConfiguration = portableCfg;
 
             _startup.Marshaller = new PortableMarshaller(cfg.PortableConfiguration);
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetConfiguration.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetConfiguration.cs
deleted file mode 100644
index 2dffd28..0000000
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetConfiguration.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Impl.Interop
-{
-    using System.Collections.Generic;
-    using Apache.Ignite.Core.Impl.Portable;
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// .Net configuration as defined in Java configuration file.
-    /// </summary>
-    internal class InteropDotNetConfiguration : IPortableWriteAware
-    {
-        /// <summary>
-        /// Portable configuration.
-        /// </summary>
-        public InteropDotNetPortableConfiguration PortableCfg { get; set; }
-
-        /// <summary>
-        /// Assemblies to load.
-        /// </summary>
-        public IList<string> Assemblies { get; set; }
-
-        /** {@inheritDoc} */
-        public void WritePortable(IPortableWriter writer)
-        {
-            IPortableRawWriter rawWriter = writer.RawWriter();
-
-            rawWriter.WriteObject(PortableCfg);
-
-            rawWriter.WriteGenericCollection(Assemblies);
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InteropDotNetConfiguration"/> class.
-        /// </summary>
-        /// <param name="reader">The reader.</param>
-        public InteropDotNetConfiguration(IPortableReader reader)
-        {
-            IPortableRawReader rawReader = reader.RawReader();
-
-            PortableCfg = rawReader.ReadObject<InteropDotNetPortableConfiguration>();
-
-            Assemblies = (List<string>) rawReader.ReadGenericCollection<string>();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableConfiguration.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableConfiguration.cs
deleted file mode 100644
index 4f36e84..0000000
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableConfiguration.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Impl.Interop
-{
-    using System.Collections.Generic;
-    using Apache.Ignite.Core.Impl.Portable;
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// .Net portable configuration as defined in Java configuration.
-    /// </summary>
-    internal class InteropDotNetPortableConfiguration : IPortableWriteAware
-    {
-        /// <summary>
-        /// Type configurations.
-        /// </summary>
-        public ICollection<InteropDotNetPortableTypeConfiguration> TypeConfigurations { get; set; }
-
-        /// <summary>
-        /// Portable types. Shorthand for creating PortableTypeConfiguration.
-        /// </summary>
-        public ICollection<string> Types { get; set; }
-
-        /// <summary>
-        /// Default name mapper.
-        /// </summary>
-        public string DefaultNameMapper { get; set; }
-
-        /// <summary>
-        /// Default ID mapper.
-        /// </summary>
-        public string DefaultIdMapper { get; set; }
-
-        /// <summary>
-        /// Default serializer.
-        /// </summary>
-        public string DefaultSerializer { get; set; }
-
-        /// <summary>
-        /// Default metadata enabled flag. Defaults to true.
-        /// </summary>
-        public bool DefaultMetadataEnabled { get; set; }
-
-        /// <summary>
-        /// Keep deserialized flag. If set to non-null value, overrides default value set in 
-        /// PortableConfiguration.
-        /// </summary>
-        public bool DefaultKeepDeserialized { get; set; }
-
-        /// <summary>
-        /// Creates PortableConfiguration.
-        /// </summary>
-        /// <returns>PortableConfiguration</returns>
-        public PortableConfiguration ToPortableConfiguration()
-        {
-            PortableConfiguration res = new PortableConfiguration();
-
-            if (TypeConfigurations != null)
-            {
-                List<PortableTypeConfiguration> typeCfgs = new List<PortableTypeConfiguration>();
-
-                foreach (InteropDotNetPortableTypeConfiguration dotNetTypeCfg in TypeConfigurations)
-                    typeCfgs.Add(dotNetTypeCfg.ToPortableTypeConfiguration());
-
-                res.TypeConfigurations = typeCfgs;
-            }
-
-            res.Types = Types;
-            res.DefaultNameMapper =
-                (IPortableNameMapper) InteropDotNetPortableTypeConfiguration.CreateInstance(DefaultNameMapper);
-            res.DefaultIdMapper =
-                (IPortableIdMapper) InteropDotNetPortableTypeConfiguration.CreateInstance(DefaultIdMapper);
-            res.DefaultSerializer =
-                (IPortableSerializer) InteropDotNetPortableTypeConfiguration.CreateInstance(DefaultSerializer);
-            res.DefaultMetadataEnabled = DefaultMetadataEnabled;
-            res.DefaultKeepDeserialized = DefaultKeepDeserialized;
-
-            return res;
-        }
-
-        /** {@inheritDoc} */
-        public void WritePortable(IPortableWriter writer)
-        {
-            IPortableRawWriter rawWriter = writer.RawWriter();
-
-            rawWriter.WriteGenericCollection(TypeConfigurations);
-            rawWriter.WriteGenericCollection(Types);
-            rawWriter.WriteString(DefaultNameMapper);
-            rawWriter.WriteString(DefaultIdMapper);
-            rawWriter.WriteString(DefaultSerializer);
-            rawWriter.WriteBoolean(DefaultMetadataEnabled);
-            rawWriter.WriteBoolean(DefaultKeepDeserialized);
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InteropDotNetPortableConfiguration"/> class.
-        /// </summary>
-        /// <param name="reader">The reader.</param>
-        public InteropDotNetPortableConfiguration(IPortableReader reader)
-        {
-            IPortableRawReader rawReader = reader.RawReader();
-
-            TypeConfigurations = rawReader.ReadGenericCollection<InteropDotNetPortableTypeConfiguration>();
-            Types = rawReader.ReadGenericCollection<string>();
-            DefaultNameMapper = rawReader.ReadString();
-            DefaultIdMapper = rawReader.ReadString();
-            DefaultSerializer = rawReader.ReadString();
-            DefaultMetadataEnabled = rawReader.ReadBoolean();
-            DefaultKeepDeserialized = rawReader.ReadBoolean();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableTypeConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableTypeConfiguration.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableTypeConfiguration.cs
deleted file mode 100644
index 0c3b433..0000000
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Interop/InteropDotNetPortableTypeConfiguration.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Impl.Interop
-{
-    using System;
-    using System.Reflection;
-    using Apache.Ignite.Core.Impl.Portable;
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// .Net portable configuration type as defined in Java configuration.
-    /// </summary>
-    internal class InteropDotNetPortableTypeConfiguration : IPortableWriteAware
-    {
-        /// <summary>
-        /// Assembly name.
-        /// </summary>
-        public string AssemblyName { get; set; }
-
-        /// <summary>
-        /// Fully qualified type name.
-        /// </summary>
-        public string TypeName { get; set; }
-
-        /// <summary>
-        /// Name mapper for the given type.
-        /// </summary>
-        public string NameMapper { get; set; }
-
-        /// <summary>
-        /// ID mapper for the given type. When it is necessary to resolve class (field) ID, then
-        /// this property will be checked first. If not set, then PortableClassIdAttribute
-        /// (PortableFieldIdAttribute) will be checked in class through reflection. If required
-        /// attribute is not set, then ID will be hash code of the class (field) simple name in lower case.
-        /// </summary>
-        public string IdMapper { get; set; }
-
-        /// <summary>
-        /// Serializer for the given type. If not provided and class implements IPortable
-        /// then its custom logic will be used. If not provided and class doesn't implement IPortable
-        /// then all fields of the class except of those with [NotSerialized] attribute will be serialized
-        ///with help of reflection.
-        /// </summary>
-        public string Serializer { get; set; }
-
-        /// <summary>
-        /// Affinity key field name.
-        /// </summary>
-        public string AffinityKeyFieldName { get; set; }
-
-        /// <summary>
-        /// Metadata enabled flag. If set to non-null value, overrides default value set in
-        /// PortableConfiguration.
-        /// </summary>
-        public bool? MetadataEnabled { get; set; }
-
-        /// <summary>
-        /// Keep deserialized flag. If set to non-null value, overrides default value set in 
-        /// PortableConfiguration.
-        /// </summary>
-        public bool? KeepDeserialized { get; set; }
-
-        /// <summary>
-        /// Creates new instance of PortableTypeConfiguration.
-        /// </summary>
-        /// <returns>PortableTypeConfiguration</returns>
-        public PortableTypeConfiguration ToPortableTypeConfiguration()
-        {
-            return new PortableTypeConfiguration
-            {
-                AssemblyName = AssemblyName,
-                AffinityKeyFieldName = AffinityKeyFieldName,
-                TypeName = TypeName,
-                NameMapper = (IPortableNameMapper) CreateInstance(NameMapper),
-                IdMapper = (IPortableIdMapper) CreateInstance(IdMapper),
-                Serializer = (IPortableSerializer) CreateInstance(Serializer),
-                MetadataEnabled = MetadataEnabled,
-                KeepDeserialized = KeepDeserialized
-            };
-        }
-
-        /** {@inheritDoc} */
-        public void WritePortable(IPortableWriter writer)
-        {
-            IPortableRawWriter rawWriter = writer.RawWriter();
-
-            rawWriter.WriteString(AssemblyName);
-            rawWriter.WriteString(TypeName);
-            rawWriter.WriteString(NameMapper);
-            rawWriter.WriteString(IdMapper);
-            rawWriter.WriteString(Serializer);
-            rawWriter.WriteString(AffinityKeyFieldName);
-            rawWriter.WriteObject(MetadataEnabled);
-            rawWriter.WriteObject(KeepDeserialized);
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InteropDotNetPortableTypeConfiguration"/> class.
-        /// </summary>
-        /// <param name="reader">The reader.</param>
-        public InteropDotNetPortableTypeConfiguration(IPortableReader reader)
-        {
-            IPortableRawReader rawReader = reader.RawReader();
-
-            AssemblyName = rawReader.ReadString();
-            TypeName = rawReader.ReadString();
-            NameMapper = rawReader.ReadString();
-            IdMapper = rawReader.ReadString();
-            Serializer = rawReader.ReadString();
-            AffinityKeyFieldName = rawReader.ReadString();
-            MetadataEnabled = rawReader.ReadObject<bool?>();
-            KeepDeserialized = rawReader.ReadObject<bool?>();
-        }
-
-        /// <summary>
-        /// Create new instance of specified class.
-        /// </summary>
-        /// <param name="typeName">Name of the type.</param>
-        /// <returns>New Instance.</returns>
-        public static object CreateInstance(string typeName)
-        {
-            if (typeName == null)
-                return null;
-
-            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
-            {
-                object instance = assembly.CreateInstance(typeName);
-
-                if (instance != null)
-                    return instance;
-            }
-
-            throw new PortableException("Failed to find class: " + typeName);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableMarshaller.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableMarshaller.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableMarshaller.cs
index 4b933a0..6286ebb 100644
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableMarshaller.cs
+++ b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableMarshaller.cs
@@ -26,7 +26,6 @@ namespace Apache.Ignite.Core.Impl.Portable
     using Apache.Ignite.Core.Impl.Compute;
     using Apache.Ignite.Core.Impl.Compute.Closure;
     using Apache.Ignite.Core.Impl.Datastream;
-    using Apache.Ignite.Core.Impl.Interop;
     using Apache.Ignite.Core.Impl.Messaging;
     using Apache.Ignite.Core.Impl.Portable.IO;
     using Apache.Ignite.Core.Impl.Portable.Metadata;
@@ -565,9 +564,6 @@ namespace Apache.Ignite.Core.Impl.Portable
             AddSystemType(PortableUtils.TypeNativeJobHolder, w => new ComputeJobHolder(w));
             AddSystemType(PortableUtils.TypeComputeJobWrapper, w => new ComputeJobWrapper(w));
             AddSystemType(PortableUtils.TypePortableJobResHolder, w => new PortableResultWrapper(w));
-            AddSystemType(PortableUtils.TypeDotNetCfg, w => new InteropDotNetConfiguration(w));
-            AddSystemType(PortableUtils.TypeDotNetPortableCfg, w => new InteropDotNetPortableConfiguration(w));
-            AddSystemType(PortableUtils.TypeDotNetPortableTypCfg, w => new InteropDotNetPortableTypeConfiguration(w));
             AddSystemType(PortableUtils.TypeIgniteProxy, w => new IgniteProxy());
             AddSystemType(PortableUtils.TypeComputeOutFuncJob, w => new ComputeOutFuncJob(w));
             AddSystemType(PortableUtils.TypeComputeOutFuncWrapper, w => new ComputeOutFuncWrapper(w));

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableUtils.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableUtils.cs
index 3143e45..a0b110d 100644
--- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableUtils.cs
+++ b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Portable/PortableUtils.cs
@@ -2035,5 +2035,96 @@ namespace Apache.Ignite.Core.Impl.Portable
 
             return local ? res.ToLocalTime() : res;
         }
+
+        /// <summary>
+        /// Read additional configuration from the stream.
+        /// </summary>
+        /// <param name="reader">Reader.</param>
+        /// <param name="assemblies">Assemblies.</param>
+        /// <param name="cfg">Portable configuration.</param>
+        public static void ReadConfiguration(PortableReaderImpl reader, out ICollection<string> assemblies, out PortableConfiguration cfg)
+        {
+            if (reader.ReadBoolean())
+            {
+                int assemblyCnt = reader.ReadInt();
+
+                assemblies = new List<string>(assemblyCnt);
+
+                for (int i = 0; i < assemblyCnt; i++)
+                    assemblies.Add(reader.ReadObject<string>());
+            }
+            else
+                assemblies = null;
+
+            if (reader.ReadBoolean())
+            {
+                cfg = new PortableConfiguration();
+
+                // Read portable types in full form.
+                if (reader.ReadBoolean())
+                {
+                    int typesCnt = reader.ReadInt();
+
+                    cfg.TypeConfigurations = new List<PortableTypeConfiguration>();
+
+                    for (int i = 0; i < typesCnt; i++)
+                    {
+                        PortableTypeConfiguration typCfg = new PortableTypeConfiguration();
+
+                        typCfg.AssemblyName = reader.ReadString();
+                        typCfg.TypeName = reader.ReadString();
+                        typCfg.NameMapper = (IPortableNameMapper)CreateInstance(reader.ReadString());
+                        typCfg.IdMapper = (IPortableIdMapper)CreateInstance(reader.ReadString());
+                        typCfg.Serializer = (IPortableSerializer)CreateInstance(reader.ReadString());
+                        typCfg.AffinityKeyFieldName = reader.ReadString();
+                        typCfg.MetadataEnabled = reader.ReadObject<bool?>();
+                        typCfg.KeepDeserialized = reader.ReadObject<bool?>();
+
+                        cfg.TypeConfigurations.Add(typCfg);
+                    }
+                }
+
+                // Read portable types in compact form.
+                if (reader.ReadBoolean())
+                {
+                    int typesCnt = reader.ReadInt();
+
+                    cfg.Types = new List<string>(typesCnt);
+
+                    for (int i = 0; i < typesCnt; i++)
+                        cfg.Types.Add(reader.ReadString());
+                }
+
+                // Read the rest.
+                cfg.DefaultNameMapper = (IPortableNameMapper)CreateInstance(reader.ReadString());
+                cfg.DefaultIdMapper = (IPortableIdMapper)CreateInstance(reader.ReadString());
+                cfg.DefaultSerializer = (IPortableSerializer)CreateInstance(reader.ReadString());
+                cfg.DefaultMetadataEnabled = reader.ReadBoolean();
+                cfg.DefaultKeepDeserialized = reader.ReadBoolean();
+            }
+            else
+                cfg = null;
+        }
+
+        /// <summary>
+        /// Create new instance of specified class.
+        /// </summary>
+        /// <param name="typeName">Name of the type.</param>
+        /// <returns>New Instance.</returns>
+        public static object CreateInstance(string typeName)
+        {
+            if (typeName == null)
+                return null;
+
+            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
+            {
+                object instance = assembly.CreateInstance(typeName);
+
+                if (instance != null)
+                    return instance;
+            }
+
+            throw new PortableException("Failed to find class: " + typeName);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
index 56351e6..f1f3fae 100644
--- a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
@@ -139,7 +139,7 @@ public class PlatformDotNetConfigurationClosure extends PlatformAbstractConfigur
 
                 PortableRawWriterEx writer = marshaller().writer(out);
 
-                writer.writeObject(interopCfg.unwrap());
+                PlatformUtils.writeDotNetConfiguration(writer, interopCfg.unwrap());
 
                 List<PlatformDotNetLifecycleBean> beans = beans(igniteCfg);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
index ee3124d..11d8371 100644
--- a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
@@ -17,14 +17,6 @@
 
 package org.apache.ignite.internal.processors.platform.utils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.cache.CacheException;
-import javax.cache.event.CacheEntryEvent;
-import javax.cache.event.CacheEntryListenerException;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
@@ -46,8 +38,20 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration;
+import org.apache.ignite.platform.dotnet.PlatformDotNetPortableConfiguration;
+import org.apache.ignite.platform.dotnet.PlatformDotNetPortableTypeConfiguration;
 import org.jetbrains.annotations.Nullable;
 
+import javax.cache.CacheException;
+import javax.cache.event.CacheEntryEvent;
+import javax.cache.event.CacheEntryListenerException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_PREFIX;
 
 /**
@@ -760,6 +764,46 @@ public class PlatformUtils {
     }
 
     /**
+     * Write .Net configuration to the stream.
+     *
+     * @param writer Writer.
+     * @param cfg Configuration.
+     */
+    public static void writeDotNetConfiguration(PortableRawWriterEx writer, PlatformDotNetConfiguration cfg) {
+        // 1. Write assemblies.
+        writeNullableCollection(writer, cfg.getAssemblies());
+
+        PlatformDotNetPortableConfiguration portableCfg = cfg.getPortableConfiguration();
+
+        if (portableCfg != null) {
+            writer.writeBoolean(true);
+
+            writeNullableCollection(writer, portableCfg.getTypesConfiguration(),
+                new PlatformWriterClosure<PlatformDotNetPortableTypeConfiguration>() {
+                @Override public void write(PortableRawWriterEx writer, PlatformDotNetPortableTypeConfiguration typ) {
+                    writer.writeString(typ.getAssemblyName());
+                    writer.writeString(typ.getTypeName());
+                    writer.writeString(typ.getNameMapper());
+                    writer.writeString(typ.getIdMapper());
+                    writer.writeString(typ.getSerializer());
+                    writer.writeString(typ.getAffinityKeyFieldName());
+                    writer.writeObject(typ.getMetadataEnabled());
+                    writer.writeObject(typ.getKeepDeserialized());
+                }
+            });
+
+            writeNullableCollection(writer, portableCfg.getTypes());
+            writer.writeString(portableCfg.getDefaultNameMapper());
+            writer.writeString(portableCfg.getDefaultIdMapper());
+            writer.writeString(portableCfg.getDefaultSerializer());
+            writer.writeBoolean(portableCfg.isDefaultMetadataEnabled());
+            writer.writeBoolean(portableCfg.isDefaultKeepDeserialized());
+        }
+        else
+            writer.writeBoolean(false);
+    }
+
+    /**
      * Private constructor.
      */
     private PlatformUtils() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
new file mode 100644
index 0000000..0550bab
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.platform.dotnet;
+
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Mirror of .Net class Configuration.cs
+ */
+public class PlatformDotNetConfiguration implements PlatformConfiguration {
+    /** */
+    private PlatformDotNetPortableConfiguration portableCfg;
+
+    /** */
+    private List<String> assemblies;
+
+    /**
+     * Default constructor.
+     */
+    public PlatformDotNetConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Copy constructor.
+     *
+     * @param cfg Configuration to copy.
+     */
+    public PlatformDotNetConfiguration(PlatformDotNetConfiguration cfg) {
+        if (cfg.getPortableConfiguration() != null)
+            portableCfg = new PlatformDotNetPortableConfiguration(cfg.getPortableConfiguration());
+
+        if (cfg.getAssemblies() != null)
+            assemblies = new ArrayList<>(cfg.getAssemblies());
+    }
+
+    /**
+     * @return Configuration.
+     */
+    public PlatformDotNetPortableConfiguration getPortableConfiguration() {
+        return portableCfg;
+    }
+
+    /**
+     * @param portableCfg Configuration.
+     */
+    public void setPortableConfiguration(PlatformDotNetPortableConfiguration portableCfg) {
+        this.portableCfg = portableCfg;
+    }
+
+    /**
+     * @return Assemblies.
+     */
+    public List<String> getAssemblies() {
+        return assemblies;
+    }
+
+    /**
+     *
+     * @param assemblies Assemblies.
+     */
+    public void setAssemblies(List<String> assemblies) {
+        this.assemblies = assemblies;
+    }
+
+    /**
+     * @return Configuration copy.
+     */
+    @SuppressWarnings("UnusedDeclaration")
+    private PlatformDotNetConfiguration copy() {
+        return new PlatformDotNetConfiguration(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(PlatformDotNetConfiguration.class, this);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
new file mode 100644
index 0000000..dd7b988
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.platform.dotnet;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Mirror of .Net class PortableConfiguration.cs
+ */
+public class PlatformDotNetPortableConfiguration {
+    /** Type cfgs. */
+    private Collection<PlatformDotNetPortableTypeConfiguration> typesCfg;
+
+    /** Types. */
+    private Collection<String> types;
+
+    /** Default name mapper. */
+    private String dfltNameMapper;
+
+    /** Default id mapper. */
+    private String dfltIdMapper;
+
+    /** Default serializer. */
+    private String dfltSerializer;
+
+    /** Default metadata enabled. */
+    private boolean dfltMetadataEnabled = true;
+
+    /** Whether to cache deserialized value in IGridPortableObject */
+    private boolean dfltKeepDeserialized = true;
+
+    /**
+     * Default constructor.
+     */
+    public PlatformDotNetPortableConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Copy constructor.
+     * @param cfg configuration to copy.
+     */
+    public PlatformDotNetPortableConfiguration(PlatformDotNetPortableConfiguration cfg) {
+        if (cfg.getTypesConfiguration() != null) {
+            typesCfg = new ArrayList<>();
+
+            for (PlatformDotNetPortableTypeConfiguration typeCfg : cfg.getTypesConfiguration())
+                typesCfg.add(new PlatformDotNetPortableTypeConfiguration(typeCfg));
+        }
+
+        if (cfg.getTypes() != null)
+            types = new ArrayList<>(cfg.getTypes());
+
+        dfltNameMapper = cfg.getDefaultNameMapper();
+        dfltIdMapper = cfg.getDefaultIdMapper();
+        dfltSerializer = cfg.getDefaultSerializer();
+        dfltMetadataEnabled = cfg.isDefaultMetadataEnabled();
+        dfltKeepDeserialized = cfg.isDefaultKeepDeserialized();
+    }
+
+    /**
+     * @return Type cfgs.
+     */
+    public Collection<PlatformDotNetPortableTypeConfiguration> getTypesConfiguration() {
+        return typesCfg;
+    }
+
+    /**
+     * @param typesCfg New type cfgs.
+     */
+    public void setTypesConfiguration(Collection<PlatformDotNetPortableTypeConfiguration> typesCfg) {
+        this.typesCfg = typesCfg;
+    }
+
+    /**
+     * @return Types.
+     */
+    public Collection<String> getTypes() {
+        return types;
+    }
+
+    /**
+     * @param types New types.
+     */
+    public void setTypes(Collection<String> types) {
+        this.types = types;
+    }
+
+    /**
+     * @return Default name mapper.
+     */
+    public String getDefaultNameMapper() {
+        return dfltNameMapper;
+    }
+
+    /**
+     * @param dfltNameMapper New default name mapper.
+     */
+    public void setDefaultNameMapper(String dfltNameMapper) {
+        this.dfltNameMapper = dfltNameMapper;
+    }
+
+    /**
+     * @return Default id mapper.
+     */
+    public String getDefaultIdMapper() {
+        return dfltIdMapper;
+    }
+
+    /**
+     * @param dfltIdMapper New default id mapper.
+     */
+    public void setDefaultIdMapper(String dfltIdMapper) {
+        this.dfltIdMapper = dfltIdMapper;
+    }
+
+    /**
+     * @return Default serializer.
+     */
+    public String getDefaultSerializer() {
+        return dfltSerializer;
+    }
+
+    /**
+     * @param dfltSerializer New default serializer.
+     */
+    public void setDefaultSerializer(String dfltSerializer) {
+        this.dfltSerializer = dfltSerializer;
+    }
+
+    /**
+     * Gets default metadata enabled flag. See {@link #setDefaultMetadataEnabled(boolean)} for more information.
+     *
+     * @return Default metadata enabled flag.
+     */
+    public boolean isDefaultMetadataEnabled() {
+        return dfltMetadataEnabled;
+    }
+
+    /**
+     * Sets default metadata enabled flag. When set to {@code true} all portable types will save it's metadata to
+     * cluster.
+     * <p />
+     * Can be overridden for particular type using
+     * {@link PlatformDotNetPortableTypeConfiguration#setMetadataEnabled(Boolean)}.
+     *
+     * @param dfltMetadataEnabled Default metadata enabled flag.
+     */
+    public void setDefaultMetadataEnabled(boolean dfltMetadataEnabled) {
+        this.dfltMetadataEnabled = dfltMetadataEnabled;
+    }
+
+    /**
+     * Gets default keep deserialized flag. See {@link #setDefaultKeepDeserialized(boolean)} for more information.
+     *
+     * @return  Flag indicates whether to cache deserialized value in IGridPortableObject.
+     */
+    public boolean isDefaultKeepDeserialized() {
+        return dfltKeepDeserialized;
+    }
+
+    /**
+     * Sets default keep deserialized flag.
+     * <p />
+     * Can be overridden for particular type using
+     * {@link PlatformDotNetPortableTypeConfiguration#setKeepDeserialized(Boolean)}.
+     *
+     * @param keepDeserialized Keep deserialized flag.
+     */
+    public void setDefaultKeepDeserialized(boolean keepDeserialized) {
+        this.dfltKeepDeserialized = keepDeserialized;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(PlatformDotNetPortableConfiguration.class, this);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b259184a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
new file mode 100644
index 0000000..b04d2a7
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.platform.dotnet;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Mirror of .Net class GridDotNetPortableTypeConfiguration.cs
+ */
+public class PlatformDotNetPortableTypeConfiguration {
+    /** Assembly name. */
+    private String assemblyName;
+
+    /** Type name. */
+    private String typeName;
+
+    /** Name mapper. */
+    private String nameMapper;
+
+    /** Id mapper. */
+    private String idMapper;
+
+    /** Serializer. */
+    private String serializer;
+
+    /** Affinity key field name. */
+    private String affinityKeyFieldName;
+
+    /** Metadata enabled. */
+    private Boolean metadataEnabled;
+
+    /** Whether to cache deserialized value in IGridPortableObject. */
+    private Boolean keepDeserialized;
+
+    /**
+     * Default constructor.
+     */
+    public PlatformDotNetPortableTypeConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Copy constructor.
+     * @param cfg configuration to copy.
+     */
+    public PlatformDotNetPortableTypeConfiguration(PlatformDotNetPortableTypeConfiguration cfg) {
+        assemblyName = cfg.getAssemblyName();
+        typeName = cfg.getTypeName();
+        nameMapper = cfg.getNameMapper();
+        idMapper = cfg.getIdMapper();
+        serializer = cfg.getSerializer();
+        affinityKeyFieldName = cfg.getAffinityKeyFieldName();
+        metadataEnabled = cfg.getMetadataEnabled();
+        keepDeserialized = cfg.isKeepDeserialized();
+    }
+
+    /**
+     * @return Assembly name.
+     */
+    public String getAssemblyName() {
+        return assemblyName;
+    }
+
+    /**
+     * @param assemblyName New assembly name.
+     */
+    public void setAssemblyName(String assemblyName) {
+        this.assemblyName = assemblyName;
+    }
+
+    /**
+     * @return Type name.
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    /**
+     * @param typeName New type name.
+     */
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    /**
+     * @return Name mapper.
+     */
+    public String getNameMapper() {
+        return nameMapper;
+    }
+
+    /**
+     * @param nameMapper New name mapper.
+     */
+    public void setNameMapper(String nameMapper) {
+        this.nameMapper = nameMapper;
+    }
+
+    /**
+     * @return Id mapper.
+     */
+    public String getIdMapper() {
+        return idMapper;
+    }
+
+    /**
+     * @param idMapper New id mapper.
+     */
+    public void setIdMapper(String idMapper) {
+        this.idMapper = idMapper;
+    }
+
+    /**
+     * @return Serializer.
+     */
+    public String getSerializer() {
+        return serializer;
+    }
+
+    /**
+     * @param serializer New serializer.
+     */
+    public void setSerializer(String serializer) {
+        this.serializer = serializer;
+    }
+
+    /**
+     * Gets metadata enabled flag. See {@link #setMetadataEnabled(Boolean)} for more information.
+     *
+     * @return Metadata enabled flag.
+     */
+    public Boolean getMetadataEnabled() {
+        return metadataEnabled;
+    }
+
+    /**
+     * Sets metadata enabled flag.
+     * <p />
+     * When set to {@code null} default value taken from
+     * {@link PlatformDotNetPortableConfiguration#isDefaultMetadataEnabled()} will be used.
+     *
+     * @param metadataEnabled New metadata enabled.
+     */
+    public void setMetadataEnabled(Boolean metadataEnabled) {
+        this.metadataEnabled = metadataEnabled;
+    }
+
+    /**
+     * @return Affinity key field name.
+     */
+    public String getAffinityKeyFieldName() {
+        return affinityKeyFieldName;
+    }
+
+    /**
+     * @param affinityKeyFieldName Affinity key field name.
+     */
+    public void setAffinityKeyFieldName(String affinityKeyFieldName) {
+        this.affinityKeyFieldName = affinityKeyFieldName;
+    }
+
+    /**
+     * Gets keep deserialized flag.
+     *
+     * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
+     * @deprecated Use {@link #getKeepDeserialized()} instead.
+     */
+    @Deprecated
+    @Nullable public Boolean isKeepDeserialized() {
+        return keepDeserialized;
+    }
+
+    /**
+     * Gets keep deserialized flag. See {@link #setKeepDeserialized(Boolean)} for more information.
+     *
+     * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
+     */
+    @Nullable public Boolean getKeepDeserialized() {
+        return keepDeserialized;
+    }
+
+    /**
+     * Sets keep deserialized flag.
+     * <p />
+     * When set to {@code null} default value taken from
+     * {@link PlatformDotNetPortableConfiguration#isDefaultKeepDeserialized()} will be used.
+     *
+     * @param keepDeserialized Keep deserialized flag.
+     */
+    public void setKeepDeserialized(@Nullable Boolean keepDeserialized) {
+        this.keepDeserialized = keepDeserialized;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(PlatformDotNetPortableTypeConfiguration.class, this);
+    }
+}