IGNITE-2450 - More fixes for Proxy serialization
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fbff90e5 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fbff90e5 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fbff90e5 Branch: refs/heads/ignite-2801 Commit: fbff90e521c3b82783b6d442d684620e30dd55f5 Parents: b6f7e63 Author: Valentin Kulichenko <[email protected]> Authored: Thu Feb 25 16:34:03 2016 -0800 Committer: Valentin Kulichenko <[email protected]> Committed: Thu Feb 25 17:00:05 2016 -0800 ---------------------------------------------------------------------- .../ignite/internal/binary/BinaryUtils.java | 7 +- ...namicProxySerializationMultiJvmSelfTest.java | 106 +++++++++++++++---- 2 files changed, 89 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/fbff90e5/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java index d5b0854..4a79f22 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java @@ -584,7 +584,9 @@ public class BinaryUtils { public static boolean isBinaryType(Class<?> cls) { assert cls != null; - return BinaryObject.class.isAssignableFrom(cls) || BINARY_CLS.contains(cls); + return BinaryObject.class.isAssignableFrom(cls) || + Proxy.class.isAssignableFrom(cls) || + BINARY_CLS.contains(cls); } /** @@ -1758,6 +1760,9 @@ public class BinaryUtils { case GridBinaryMarshaller.CLASS: return doReadClass(in, ctx, ldr); + case GridBinaryMarshaller.PROXY: + return doReadProxy(in, ctx, ldr, handles); + case GridBinaryMarshaller.OPTM_MARSH: return doReadOptimized(in, ctx, ldr); http://git-wip-us.apache.org/repos/asf/ignite/blob/fbff90e5/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java index d22aeac..0400de4 100644 --- a/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java @@ -22,6 +22,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.concurrent.Callable; import org.apache.ignite.Ignite; +import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.lang.IgniteCallable; @@ -49,68 +50,111 @@ public class DynamicProxySerializationMultiJvmSelfTest extends GridCommonAbstrac return cfg; } + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + stopAllGrids(); + } + /** * @throws Exception If failed. */ - public void testOptimized() throws Exception { + public void testOptimizedMarshaller() throws Exception { marshFactory = new Callable<Marshaller>() { @Override public Marshaller call() throws Exception { return new OptimizedMarshaller(false); } }; - doTest(); + doTestMarshaller(); } /** * @throws Exception If failed. */ - public void testBinary() throws Exception { + public void testBinaryMarshaller() throws Exception { marshFactory = new Callable<Marshaller>() { @Override public Marshaller call() throws Exception { return new BinaryMarshaller(); } }; - doTest(); + doTestMarshaller(); } /** * @throws Exception If failed. */ - private void doTest() throws Exception { - try { - Ignite ignite = startGrids(2); + public void testToBinary() throws Exception { + marshFactory = new Callable<Marshaller>() { + @Override public Marshaller call() throws Exception { + return new BinaryMarshaller(); + } + }; - MyProxy p = (MyProxy)Proxy.newProxyInstance(getClass().getClassLoader(), - new Class[] { MyProxy.class }, new InvocationHandler() { - @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if ("value".equals(method.getName())) - return 42; + Ignite ignite = startGrid(0); - throw new IllegalStateException(); - } - }); + MyProxy p = create(); - int val = ignite.compute(ignite.cluster().forRemotes()).call(new MyCallable(p)); + MyProxy p0 = ignite.binary().toBinary(p); - assertEquals(42, val); - } - finally { - stopAllGrids(); - } + assertSame(p, p0); + } + + /** + * @throws Exception If failed. + */ + public void testBinaryField() throws Exception { + marshFactory = new Callable<Marshaller>() { + @Override public Marshaller call() throws Exception { + return new BinaryMarshaller(); + } + }; + + Ignite ignite = startGrids(2); + + BinaryObject bo = ignite.binary().builder("ProxyWrapper").setField("proxy", create()).build(); + + int val = ignite.compute(ignite.cluster().forRemotes()).call(new FieldTestCallable(bo)); + + assertEquals(42, val); + } + + /** + * @throws Exception If failed. + */ + private void doTestMarshaller() throws Exception { + Ignite ignite = startGrids(2); + + int val = ignite.compute(ignite.cluster().forRemotes()).call(new MarshallerTestCallable(create())); + + assertEquals(42, val); + } + + /** + * @return New proxy. + */ + private static MyProxy create() { + return (MyProxy)Proxy.newProxyInstance(DynamicProxySerializationMultiJvmSelfTest.class.getClassLoader(), + new Class[] { MyProxy.class }, new InvocationHandler() { + @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if ("value".equals(method.getName())) + return 42; + + throw new IllegalStateException(); + } + }); } /** */ - private static class MyCallable implements IgniteCallable<Integer> { + private static class MarshallerTestCallable implements IgniteCallable<Integer> { /** */ private final MyProxy p; /** * @param p Proxy. */ - public MyCallable(MyProxy p) { + public MarshallerTestCallable(MyProxy p) { this.p = p; } @@ -122,6 +166,22 @@ public class DynamicProxySerializationMultiJvmSelfTest extends GridCommonAbstrac /** */ + private static class FieldTestCallable implements IgniteCallable<Integer> { + /** */ + private final BinaryObject bo; + + public FieldTestCallable(BinaryObject bo) { + this.bo = bo; + } + + /** {@inheritDoc} */ + @Override public Integer call() throws Exception { + return bo.<MyProxy>field("proxy").value(); + } + } + + /** + */ private static interface MyProxy { /** * @return Value.
