You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/07/22 11:29:37 UTC
[23/33] ignite git commit: IGNITE-3455: Entry placed on C++ side is
not found on Java side
IGNITE-3455: Entry placed on C++ side is not found on Java side
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/84e83c96
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/84e83c96
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/84e83c96
Branch: refs/heads/ignite-3547
Commit: 84e83c96127a06f9d6b2ccc68d23db8f6dc089b1
Parents: 4897315
Author: Denis Magda <dm...@gridgain.com>
Authored: Mon Jul 18 15:21:46 2016 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Mon Jul 18 15:21:46 2016 +0300
----------------------------------------------------------------------
.../ignite/internal/binary/BinaryContext.java | 6 ++-
.../binary/BinaryMarshallerSelfTest.java | 41 ++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/84e83c96/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index 27e9440..d78c126 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@ -1127,13 +1127,17 @@ public class BinaryContext {
mapper,
serializer,
true,
- false
+ true
);
fieldsMeta = desc.fieldsMeta();
schemas = desc.schema() != null ? Collections.singleton(desc.schema()) : null;
descByCls.put(cls, desc);
+
+ // Registering in order to support the interoperability between Java, C++ and .Net.
+ // https://issues.apache.org/jira/browse/IGNITE-3455
+ predefinedTypes.put(id, desc);
}
metaHnd.addMeta(id, new BinaryMetadata(id, typeName, fieldsMeta, affKeyFieldName, schemas, isEnum).wrap(this));
http://git-wip-us.apache.org/repos/asf/ignite/blob/84e83c96/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
index a504650..b3058de 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
@@ -1798,6 +1798,47 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest {
/**
* @throws Exception If failed.
*/
+ public void testCustomTypeRegistration() throws Exception {
+ BinaryTypeConfiguration customType = new BinaryTypeConfiguration(Value.class.getName());
+
+ BinaryMarshaller marsh = binaryMarshaller(Arrays.asList(customType));
+
+ BinaryContext ctx = binaryContext(marsh);
+
+ int typeId = ctx.typeId(Value.class.getName());
+
+ BinaryClassDescriptor descriptor = ctx.descriptorForTypeId(true, typeId, null, false);
+
+ assertEquals(Value.class, descriptor.describedClass());
+ assertEquals(true, descriptor.registered());
+ assertEquals(true, descriptor.userType());
+
+ // Custom explicit types must be registered in 'predefinedTypes' in order not to break the interoperability.
+ Field field = ctx.getClass().getDeclaredField("predefinedTypes");
+
+ field.setAccessible(true);
+
+ Map<Integer, BinaryClassDescriptor> map = (Map<Integer, BinaryClassDescriptor>)field.get(ctx);
+
+ assertTrue(map.size() > 0);
+
+ assertNotNull(map.get(typeId));
+
+ // Custom explicit types must NOT be registered in 'predefinedTypeNames'.
+ field = ctx.getClass().getDeclaredField("predefinedTypeNames");
+
+ field.setAccessible(true);
+
+ Map<String, Integer> map2 = (Map<String, Integer>)field.get(ctx);
+
+ assertTrue(map2.size() > 0);
+
+ assertNull(map2.get(ctx.userTypeName(Value.class.getName())));
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testFieldIdMapping() throws Exception {
BinaryTypeConfiguration customType1 = new BinaryTypeConfiguration(Value.class.getName());