diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java new file mode 100644 index 0000000000000..cb4847be2d0d0 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java @@ -0,0 +1,60 @@ +/* + * 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.internal; + +import org.apache.ignite.marshaller.*; +import org.jdk8.backport.*; + +import java.io.*; +import java.util.concurrent.*; + +/** + * Marshaller context adapter. + */ +public abstract class MarshallerContextAdapter implements MarshallerContext { + /** */ + private static final String CLS_NAMES_FILE = "org/apache/ignite/internal/classnames.properties"; + + /** */ + protected final ConcurrentMap clsNameById = new ConcurrentHashMap8<>(); + + /** + * Initializes context. + */ + public MarshallerContextAdapter() { + try { + ClassLoader ldr = getClass().getClassLoader(); + + BufferedReader rdr = new BufferedReader(new InputStreamReader(ldr.getResourceAsStream(CLS_NAMES_FILE))); + + String line; + + while ((line = rdr.readLine()) != null) { + if (line.isEmpty() || line.startsWith("#")) + continue; + + String clsName = line.trim(); + + clsNameById.put(clsName.hashCode(), clsName); + } + } + catch (IOException e) { + throw new IllegalStateException("Failed to initialize marshaller context.", e); + } + } +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java index 5b0cb38a6fcc7..4a254fb7bf5b9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java @@ -20,53 +20,19 @@ import org.apache.ignite.*; import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.marshaller.*; -import org.jdk8.backport.*; -import java.io.*; import java.util.concurrent.*; /** * Marshaller context implementation. */ -public class MarshallerContextImpl implements MarshallerContext { - /** */ - private static final String CLS_NAMES_FILE = "org/apache/ignite/internal/classnames.properties"; - - /** */ - private final ConcurrentMap clsNameById = new ConcurrentHashMap8<>(); - +public class MarshallerContextImpl extends MarshallerContextAdapter { /** */ private final CountDownLatch latch = new CountDownLatch(1); /** */ private volatile GridCacheAdapter cache; - /** - * Constructor. - */ - MarshallerContextImpl() { - try { - ClassLoader ldr = getClass().getClassLoader(); - - BufferedReader rdr = new BufferedReader(new InputStreamReader(ldr.getResourceAsStream(CLS_NAMES_FILE))); - - String line; - - while ((line = rdr.readLine()) != null) { - if (line.isEmpty() || line.startsWith("#")) - continue; - - String clsName = line.trim(); - - clsNameById.put(clsName.hashCode(), clsName); - } - } - catch (IOException e) { - throw new IllegalStateException("Failed to initialize marshaller context.", e); - } - } - /** * @param ctx Kernal context. */ @@ -82,8 +48,6 @@ public void onMarshallerCacheReady(GridKernalContext ctx) { @Override public void registerClass(int id, Class cls) { if (!clsNameById.containsKey(id)) { try { - U.debug("REG: " + cls.getName()); - if (cache == null) U.awaitQuiet(latch); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties b/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties index def4e5987b4e1..a39bcf33bdf1b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties +++ b/modules/core/src/main/java/org/apache/ignite/internal/classnames.properties @@ -28,6 +28,7 @@ [Lorg.apache.ignite.lang.IgniteBiTuple; [Lorg.apache.ignite.lang.IgniteFuture; [Lorg.apache.ignite.lang.IgnitePredicate; +[Ljava.io.Serializable; [S [Z diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java index 9aaad8ec0de75..cfd780cb48a15 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java @@ -19,7 +19,6 @@ import org.apache.ignite.internal.client.balancer.*; import org.apache.ignite.internal.client.marshaller.*; -import org.apache.ignite.internal.client.marshaller.jdk.*; import org.apache.ignite.internal.client.marshaller.optimized.*; import org.apache.ignite.internal.client.ssl.*; import org.apache.ignite.internal.util.typedef.*; @@ -111,7 +110,7 @@ public class GridClientConfiguration { private ExecutorService executor; /** Marshaller. */ - private GridClientMarshaller marshaller = new GridClientJdkMarshaller(); + private GridClientMarshaller marshaller = new GridClientOptimizedMarshaller(); /** Daemon flag. */ private boolean daemon; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java index e8b089916fe3a..e63027786339b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java @@ -18,8 +18,10 @@ package org.apache.ignite.internal.client.marshaller.optimized; import org.apache.ignite.*; +import org.apache.ignite.internal.*; import org.apache.ignite.internal.client.marshaller.*; import org.apache.ignite.internal.processors.rest.client.message.*; +import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.optimized.*; import java.io.*; @@ -41,6 +43,8 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { */ public GridClientOptimizedMarshaller() { opMarsh = new OptimizedMarshaller(); + + opMarsh.setContext(new ClientMarshallerContext()); } /** @@ -55,6 +59,7 @@ public GridClientOptimizedMarshaller() { public GridClientOptimizedMarshaller(boolean requireSer, int poolSize) throws IOException { opMarsh = new OptimizedMarshaller(); + opMarsh.setContext(new ClientMarshallerContext()); opMarsh.setRequireSerializable(requireSer); opMarsh.setPoolSize(poolSize); } @@ -92,4 +97,22 @@ public GridClientOptimizedMarshaller(boolean requireSer, int poolSize) throws IO throw new IOException(e); } } + + /** + */ + private static class ClientMarshallerContext extends MarshallerContextAdapter { + /** {@inheritDoc} */ + @Override public void registerClass(int id, Class cls) { + // No-op. + } + + /** {@inheritDoc} */ + @Override public Class className(int id, ClassLoader ldr) throws ClassNotFoundException { + String clsName = clsNameById.get(id); + + assert clsName != null : id; + + return U.forName(clsName, ldr); + } + } }