This is an automated email from the ASF dual-hosted git repository.
nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 2d6f8fcbabb IGNITE-26192 Move JdkMarshaller to ignite-binary-impl
(#12266)
2d6f8fcbabb is described below
commit 2d6f8fcbabb289543d21def49704aca508b0d0ef
Author: Nikolay <[email protected]>
AuthorDate: Thu Aug 14 14:58:12 2025 +0300
IGNITE-26192 Move JdkMarshaller to ignite-binary-impl (#12266)
---
.../ignite/marshaller/AbstractMarshaller.java | 10 +-
.../AbstractNodeNameAwareMarshaller.java | 24 +-
.../org/apache/ignite/marshaller/Marshaller.java | 3 +-
.../ignite/marshaller/MarshallerContext.java | 3 +-
.../ignite/marshaller/MarshallerExclusions.java | 91 ++----
.../org/apache/ignite/marshaller/Marshallers.java | 60 ++++
.../ignite/marshaller/MarshallersFactory.java} | 36 ++-
.../ignite/marshaller/jdk/JdkMarshaller.java} | 11 +-
.../apache/ignite/marshaller/jdk/package-info.java | 0
.../ignite/marshaller/MarshallersFactoryImpl.java} | 33 +-
.../jdk/JdkMarshallerDummySerializable.java | 0
.../ignite/marshaller/jdk/JdkMarshallerImpl.java} | 13 +-
.../jdk/JdkMarshallerInputStreamWrapper.java | 0
.../jdk/JdkMarshallerObjectInputStream.java | 9 +-
.../jdk/JdkMarshallerObjectOutputStream.java | 0
.../jdk/JdkMarshallerOutputStreamWrapper.java | 0
...org.apache.ignite.marshaller.MarshallersFactory | 1 +
.../processors/rest/TestMemcacheClient.java | 11 +-
.../processors/cache/CacheClassLoaderMarker.java | 0
.../apache/ignite/internal/util/ClassCache.java | 0
.../apache/ignite/internal/util/CommonUtils.java | 285 ++++++++++++++++++
.../cache/store/jdbc/CacheJdbcBlobStore.java | 4 +-
.../java/org/apache/ignite/dump/DumpReader.java | 3 +-
.../ignite/internal/MarshallerContextImpl.java | 42 ++-
.../apache/ignite/internal/binary/BinaryArray.java | 5 +-
.../ignite/internal/binary/BinaryContext.java | 5 +-
.../internal/binary/BinaryEnumObjectImpl.java | 10 +-
.../ignite/internal/binary/BinaryObjectImpl.java | 9 +-
.../internal/binary/BinaryObjectOffheapImpl.java | 5 +-
.../ignite/internal/binary/BinaryReaderExImpl.java | 5 +-
.../apache/ignite/internal/binary/BinaryUtils.java | 5 +-
.../internal/binary/GridBinaryMarshaller.java | 3 -
.../internal/client/thin/TcpIgniteClient.java | 3 +-
.../internal/jdbc/thin/JdbcThinConnection.java | 3 +-
.../ignite/internal/jdbc2/JdbcBinaryBuffer.java | 8 +-
.../org/apache/ignite/internal/jdbc2/JdbcClob.java | 4 +-
.../optimized/OptimizedClassDescriptor.java | 9 +-
.../marshaller/optimized/OptimizedMarshaller.java | 6 +-
.../optimized/OptimizedObjectOutputStream.java | 6 +-
.../cache/CacheObjectTransformerUtils.java | 4 +-
.../client/message/GridClientHandshakeRequest.java | 3 +-
.../rest/protocols/tcp/GridMemcachedMessage.java | 3 +-
.../rest/protocols/tcp/GridTcpRestParser.java | 7 +-
.../ignite/internal/util/GridByteArrayList.java | 4 +-
.../apache/ignite/internal/util/IgniteUtils.java | 333 +--------------------
.../ignite/stream/socket/SocketStreamer.java | 4 +-
.../ignite/IgniteExternalizableAbstractTest.java | 4 +-
.../GridBinaryMarshallerCtxDisabledSelfTest.java | 3 +-
.../binary/RawBinaryObjectExtractorTest.java | 3 +-
.../optimized/OptimizedObjectStreamSelfTest.java | 3 +-
.../cache/GridCacheEntryMemorySizeSelfTest.java | 3 +-
...CacheConfigurationFileConsistencyCheckTest.java | 4 +-
.../processors/service/ServiceInfoSelfTest.java | 3 +-
.../java/org/apache/ignite/jvmtest/RegExpTest.java | 4 +-
.../ignite/lang/GridByteArrayListSelfTest.java | 5 +-
.../marshaller/GridMarshallerResourceBean.java | 3 +-
.../marshaller/jdk/GridJdkMarshallerSelfTest.java | 3 +-
.../ignite/p2p/P2PScanQueryUndeployTest.java | 4 +-
.../tcp/DiscoveryUnmarshalVulnerabilityTest.java | 3 +-
.../stream/socket/SocketStreamerSelfTest.java | 8 +-
.../SocketStreamerUnmarshalVulnerabilityTest.java | 4 +-
.../junits/common/GridCommonAbstractTest.java | 3 +-
.../apache/ignite/internal/util/GridUnsafe.java | 13 +
.../internal/util/io/GridByteArrayInputStream.java | 4 +-
.../util/io/GridByteArrayOutputStream.java | 4 +-
.../cache/IgniteCacheAbstractBenchmark.java | 3 +-
66 files changed, 606 insertions(+), 561 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
similarity index 81%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
index 6c3428e3924..032e758f853 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
@@ -17,18 +17,14 @@
package org.apache.ignite.marshaller;
-import org.apache.ignite.internal.util.GridByteArrayList;
-import org.apache.ignite.internal.util.io.GridByteArrayInputStream;
-import org.apache.ignite.internal.util.io.GridByteArrayOutputStream;
-
/**
* Base class for marshallers. Provides default implementations of methods
- * that work with byte array or {@link GridByteArrayList}. These
implementations
- * use {@link GridByteArrayInputStream} or {@link GridByteArrayOutputStream}
+ * that work with byte array or {@code GridByteArrayList}. These
implementations
+ * use {@code GridByteArrayInputStream} or {@code GridByteArrayOutputStream}
* to marshal and unmarshal objects.
*/
public abstract class AbstractMarshaller implements Marshaller {
- /** Default initial buffer size for the {@link GridByteArrayOutputStream}.
*/
+ /** Default initial buffer size for the {@code GridByteArrayOutputStream}.
*/
public static final int DFLT_BUFFER_SIZE = 512;
/** Context. */
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
similarity index 84%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
index 5a187dcb5cf..6f8150f09fb 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
@@ -20,20 +20,18 @@ package org.apache.ignite.marshaller;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.CommonUtils;
import org.jetbrains.annotations.Nullable;
/**
- * Marshaller allowing for {@link Ignition#localIgnite()} calls.
+ * Marshaller allowing for {@code Ignition#localIgnite()} calls.
*/
public abstract class AbstractNodeNameAwareMarshaller extends
AbstractMarshaller {
/** Whether node name is set. */
private volatile boolean nodeNameSet;
/** Node name. */
- private volatile String nodeName = U.LOC_IGNITE_NAME_EMPTY;
+ private volatile String nodeName = CommonUtils.LOC_IGNITE_NAME_EMPTY;
/**
* Set node name.
@@ -50,49 +48,49 @@ public abstract class AbstractNodeNameAwareMarshaller
extends AbstractMarshaller
/** {@inheritDoc} */
@Override public byte[] marshal(@Nullable Object obj) throws
IgniteCheckedException {
- String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName);
+ String oldNodeName = CommonUtils.setCurrentIgniteName(nodeName);
try {
return marshal0(obj);
}
finally {
- IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName);
+ CommonUtils.restoreOldIgniteName(oldNodeName, nodeName);
}
}
/** {@inheritDoc} */
@Override public void marshal(@Nullable Object obj, OutputStream out)
throws IgniteCheckedException {
- String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName);
+ String oldNodeName = CommonUtils.setCurrentIgniteName(nodeName);
try {
marshal0(obj, out);
}
finally {
- IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName);
+ CommonUtils.restoreOldIgniteName(oldNodeName, nodeName);
}
}
/** {@inheritDoc} */
@Override public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr)
throws IgniteCheckedException {
- String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName);
+ String oldNodeName = CommonUtils.setCurrentIgniteName(nodeName);
try {
return unmarshal0(arr, clsLdr);
}
finally {
- IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName);
+ CommonUtils.restoreOldIgniteName(oldNodeName, nodeName);
}
}
/** {@inheritDoc} */
@Override public <T> T unmarshal(InputStream in, @Nullable ClassLoader
clsLdr) throws IgniteCheckedException {
- String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName);
+ String oldNodeName = CommonUtils.setCurrentIgniteName(nodeName);
try {
return unmarshal0(in, clsLdr);
}
finally {
- IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName);
+ CommonUtils.restoreOldIgniteName(oldNodeName, nodeName);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
similarity index 97%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
index 99b773a8cf7..7bc328ef2b8 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
@@ -19,7 +19,6 @@ package org.apache.ignite.marshaller;
import java.io.InputStream;
import java.io.OutputStream;
-import org.apache.ignite.IgniteBinary;
import org.apache.ignite.IgniteCheckedException;
import org.jetbrains.annotations.Nullable;
@@ -31,7 +30,7 @@ import org.jetbrains.annotations.Nullable;
* Ignite provides the following {@code Marshaller} implementations:
* <ul>
* <li>Default binary marshaller. Will be used when no other marshaller is
explicitly set to the
- * configuration. For more information, see {@link IgniteBinary}.</li>
+ * configuration. For more information, see {@code IgniteBinary}.</li>
* <li>{@link org.apache.ignite.marshaller.jdk.JdkMarshaller}</li>
* </ul>
* <p>
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
similarity index 96%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
index 36d4e055c26..1cbc84464fc 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
@@ -18,7 +18,6 @@
package org.apache.ignite.marshaller;
import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.UnregisteredBinaryTypeException;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
@@ -35,7 +34,7 @@ public interface MarshallerContext {
* @param platformId Id of a platform (java, .NET, etc.) to register
mapping for.
* @param typeId Type ID.
* @param clsName Class name.
- * @param failIfUnregistered If {@code true} then throw {@link
UnregisteredBinaryTypeException} with
+ * @param failIfUnregistered If {@code true} then throw {@code
UnregisteredBinaryTypeException} with
* registration future instead of synchronously awaiting for its
completion.
* @return {@code True} if mapping was registered successfully.
* @throws IgniteCheckedException In case of error.
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
similarity index 55%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
index 8302427cc34..f6e5f3ec700 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerExclusions.java
@@ -17,24 +17,13 @@
package org.apache.ignite.marshaller;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import javax.management.MBeanServer;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeJobContext;
-import org.apache.ignite.compute.ComputeLoadBalancer;
-import org.apache.ignite.compute.ComputeTaskContinuousMapper;
-import org.apache.ignite.compute.ComputeTaskSession;
-import org.apache.ignite.internal.GridComponent;
-import org.apache.ignite.internal.GridLoggerProxy;
-import org.apache.ignite.internal.executor.GridExecutorService;
+import java.util.Set;
import org.apache.ignite.internal.util.GridBoundedConcurrentLinkedHashMap;
-import org.apache.ignite.internal.util.typedef.internal.U;
/**
- * Controls what classes should be excluded from marshalling by default.
+ * Checks whether given class should be excluded from marshalling.
*/
public final class MarshallerExclusions {
/**
@@ -43,11 +32,7 @@ public final class MarshallerExclusions {
* <p>
* Note that this list supersedes {@link #EXCL_CLASSES}.
*/
- private static final Class<?>[] INCL_CLASSES = new Class[] {
- // Ignite classes.
- GridLoggerProxy.class,
- GridExecutorService.class
- };
+ private static final Set<Class<?>> INCL_CLASSES = new HashSet<>();
/** */
private static volatile Map<Class<?>, Boolean> cache = new
GridBoundedConcurrentLinkedHashMap<>(
@@ -59,43 +44,7 @@ public final class MarshallerExclusions {
* <p>
* Note that {@link #INCL_CLASSES} supersedes this list.
*/
- private static final Class<?>[] EXCL_CLASSES;
-
- /**
- *
- */
- static {
- Class springCtxCls = null;
-
- try {
- springCtxCls =
Class.forName("org.springframework.context.ApplicationContext");
- }
- catch (Exception ignored) {
- // No-op.
- }
-
- List<Class<?>> excl = new ArrayList<>();
-
- // Non-Ignite classes.
- excl.add(MBeanServer.class);
- excl.add(ExecutorService.class);
- excl.add(ClassLoader.class);
- excl.add(Thread.class);
-
- if (springCtxCls != null)
- excl.add(springCtxCls);
-
- // Ignite classes.
- excl.add(IgniteLogger.class);
- excl.add(ComputeTaskSession.class);
- excl.add(ComputeLoadBalancer.class);
- excl.add(ComputeJobContext.class);
- excl.add(Marshaller.class);
- excl.add(GridComponent.class);
- excl.add(ComputeTaskContinuousMapper.class);
-
- EXCL_CLASSES = U.toArray(excl, new Class[excl.size()]);
- }
+ private static final Set<Class<?>> EXCL_CLASSES = new HashSet<>();
/**
* Ensures singleton.
@@ -114,18 +63,12 @@ public final class MarshallerExclusions {
private static boolean isExcluded0(Class<?> cls) {
assert cls != null;
- final Class<?>[] inc = INCL_CLASSES;
-
- // NOTE: don't use foreach for performance reasons.
- for (int i = 0; i < inc.length; i++)
- if (inc[i].isAssignableFrom(cls))
+ for (Class<?> inclCls : INCL_CLASSES)
+ if (inclCls.isAssignableFrom(cls))
return false;
- final Class<?>[] exc = EXCL_CLASSES;
-
- // NOTE: don't use foreach for performance reasons.
- for (int i = 0; i < exc.length; i++)
- if (exc[i].isAssignableFrom(cls))
+ for (Class<?> exclCls : EXCL_CLASSES)
+ if (exclCls.isAssignableFrom(cls))
return true;
return false;
@@ -155,4 +98,20 @@ public final class MarshallerExclusions {
public static void clearCache() {
cache = new GridBoundedConcurrentLinkedHashMap<>(512, 512, 0.75f, 16);
}
+
+ /**
+ * Adds Ignite class included in serialization.
+ * @param cls Class to add.
+ */
+ public static void exclude(Class<?> cls) {
+ EXCL_CLASSES.add(cls);
+ }
+
+ /**
+ * Adds Ignite class included in serialization.
+ * @param cls Class to add.
+ */
+ public static void include(Class<?> cls) {
+ INCL_CLASSES.add(cls);
+ }
}
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
new file mode 100644
index 00000000000..ef54a1452d9
--- /dev/null
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.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.marshaller;
+
+import java.util.Iterator;
+import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Factory to create implementation of {@link Marshaller}.
+ */
+public class Marshallers {
+ /** Flag whether class caching should be used by the current thread. */
+ public static final ThreadLocal<Boolean> USE_CACHE =
ThreadLocal.withInitial(() -> Boolean.TRUE);
+
+ /** Streams factory implementation. */
+ private static final MarshallersFactory factory;
+
+ static {
+ Iterator<MarshallersFactory> factories =
CommonUtils.loadService(MarshallersFactory.class).iterator();
+
+ A.ensure(
+ factories.hasNext(),
+ "Implementation for MarshallersFactory service not found. Please
add ignite-binary-impl to classpath"
+ );
+
+ factory = factories.next();
+ }
+
+ /** @return Default instance of {@link JdkMarshaller}. */
+ public static JdkMarshaller jdk() {
+ return factory.jdk();
+ }
+
+ /**
+ * @param clsFilter Class filter.
+ * @return Filtered instance of {@link JdkMarshaller}.
+ */
+ public static JdkMarshaller jdk(@Nullable IgnitePredicate<String>
clsFilter) {
+ return factory.jdk(clsFilter);
+ }
+}
diff --git
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
similarity index 55%
copy from
modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
copy to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
index ce22ead4a64..4500c703eb3 100644
---
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
@@ -15,30 +15,28 @@
* limitations under the License.
*/
-package org.apache.ignite;
+package org.apache.ignite.marshaller;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.marshaller.Marshaller;
+import java.util.ServiceLoader;
+import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
/**
- * Base externalizable test class.
+ * Marshallers factory.
+ * Implementation loaded via {@link ServiceLoader} mechanism.
+ *
+ * @see CommonUtils#loadService(Class)
+ * @see JdkMarshaller
*/
-public class IgniteExternalizableAbstractTest extends GridCommonAbstractTest {
+public interface MarshallersFactory {
+ /** @return Default instance of {@link JdkMarshaller}. */
+ public JdkMarshaller jdk();
+
/**
- * @return Marshallers.
+ * @param clsFilter Class filter.
+ * @return Filtered instance of {@link JdkMarshaller}.
*/
- protected List<Marshaller> getMarshallers() throws IgniteCheckedException {
- List<Marshaller> marshallers = new ArrayList<>();
-
- BinaryMarshaller bin = createStandaloneBinaryMarshaller();
-
- marshallers.add(new JdkMarshaller());
- marshallers.add(bin);
-
- return marshallers;
- }
+ public JdkMarshaller jdk(@Nullable IgnitePredicate<String> clsFilter);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
similarity index 80%
copy from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
copy to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
index f665bd1a53e..599f1873b03 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
@@ -15,9 +15,12 @@
* limitations under the License.
*/
+package org.apache.ignite.marshaller.jdk;
+
+import org.apache.ignite.marshaller.Marshaller;
+
/**
- * <!-- Package description. -->
- * Contains JDK <tt>java.io</tt> based marshaller.
+ * Implementation of {@link org.apache.ignite.marshaller.Marshaller} based on
JDK serialization mechanism.
*/
-
-package org.apache.ignite.marshaller.jdk;
+public interface JdkMarshaller extends Marshaller {
+}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/jdk/package-info.java
diff --git
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
similarity index 54%
copy from
modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
copy to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
index ce22ead4a64..04a1224f8b3 100644
---
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
@@ -15,30 +15,27 @@
* limitations under the License.
*/
-package org.apache.ignite;
+package org.apache.ignite.marshaller;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.apache.ignite.marshaller.jdk.JdkMarshallerImpl;
+import org.jetbrains.annotations.Nullable;
/**
- * Base externalizable test class.
+ * Marshallers factory implementation.
*/
-public class IgniteExternalizableAbstractTest extends GridCommonAbstractTest {
- /**
- * @return Marshallers.
- */
- protected List<Marshaller> getMarshallers() throws IgniteCheckedException {
- List<Marshaller> marshallers = new ArrayList<>();
+public class MarshallersFactoryImpl implements MarshallersFactory {
+ /** Singleton instance. */
+ private static final JdkMarshaller INSTANCE = new JdkMarshallerImpl();
- BinaryMarshaller bin = createStandaloneBinaryMarshaller();
-
- marshallers.add(new JdkMarshaller());
- marshallers.add(bin);
+ /** {@inheritDoc} */
+ @Override public JdkMarshaller jdk() {
+ return INSTANCE;
+ }
- return marshallers;
+ /** {@inheritDoc} */
+ @Override public JdkMarshaller jdk(@Nullable IgnitePredicate<String>
clsFilter) {
+ return clsFilter == null ? INSTANCE : new JdkMarshallerImpl(clsFilter);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerDummySerializable.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerDummySerializable.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerDummySerializable.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerDummySerializable.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerImpl.java
similarity index 93%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerImpl.java
index e3e94e12694..a7630a170e9 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerImpl.java
@@ -21,7 +21,6 @@ import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
-import org.apache.ignite.IgniteBinary;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.util.io.GridByteArrayInputStream;
import org.apache.ignite.internal.util.io.GridByteArrayOutputStream;
@@ -38,7 +37,7 @@ import org.jetbrains.annotations.Nullable;
* This marshaller has no mandatory configuration parameters.
* <h2 class="header">Java Example</h2>
* {@code JdkMarshaller} needs to be explicitly configured to override default
<b>binary marshaller</b> -
- * see {@link IgniteBinary}.
+ * see {@code IgniteBinary}.
* <pre name="code" class="java">
* JdkMarshaller marshaller = new JdkMarshaller();
*
@@ -56,7 +55,7 @@ import org.jetbrains.annotations.Nullable;
* <bean id="grid.custom.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true">
* ...
* <property name="marshaller">
- * <bean class="org.apache.ignite.marshaller.jdk.JdkMarshaller"/>
+ * <bean
class="org.apache.ignite.marshaller.MarshallersFactory"/>
* </property>
* ...
* </bean>
@@ -66,7 +65,7 @@ import org.jetbrains.annotations.Nullable;
* <br>
* For information about Spring framework visit <a
href="http://www.springframework.org/">www.springframework.org</a>
*/
-public class JdkMarshaller extends AbstractNodeNameAwareMarshaller {
+public class JdkMarshallerImpl extends AbstractNodeNameAwareMarshaller
implements JdkMarshaller {
/** Class name filter. */
private final IgnitePredicate<String> clsFilter;
@@ -75,14 +74,14 @@ public class JdkMarshaller extends
AbstractNodeNameAwareMarshaller {
* Use this constructor with caution. It creates a JdkMarshaller instance
that has class filtering DISABLED. Therefore,
* if it will be used on the server side to unmarshal user data received
from the network, it may lead to security breaches.
*/
- public JdkMarshaller() {
+ public JdkMarshallerImpl() {
this(null);
}
/**
* @param clsFilter Class name filter.
*/
- public JdkMarshaller(IgnitePredicate<String> clsFilter) {
+ public JdkMarshallerImpl(@Nullable IgnitePredicate<String> clsFilter) {
this.clsFilter = clsFilter;
}
@@ -146,6 +145,6 @@ public class JdkMarshaller extends
AbstractNodeNameAwareMarshaller {
/** {@inheritDoc} */
@Override public String toString() {
- return S.toString(JdkMarshaller.class, this);
+ return S.toString(JdkMarshallerImpl.class, this);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerInputStreamWrapper.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerInputStreamWrapper.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerInputStreamWrapper.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerInputStreamWrapper.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
similarity index 86%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
index 7e7c8f107e2..61ff5f59a6c 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectInputStream.java
@@ -21,8 +21,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.marshaller.Marshallers;
+import org.jetbrains.annotations.Nullable;
/**
* This class defines custom JDK object input stream.
@@ -37,9 +39,10 @@ class JdkMarshallerObjectInputStream extends
ObjectInputStream {
/**
* @param in Parent input stream.
* @param clsLdr Custom class loader.
+ * @param clsFilter Class filter lambda.
* @throws IOException If initialization failed.
*/
- JdkMarshallerObjectInputStream(InputStream in, ClassLoader clsLdr,
IgnitePredicate<String> clsFilter) throws IOException {
+ JdkMarshallerObjectInputStream(InputStream in, ClassLoader clsLdr,
@Nullable IgnitePredicate<String> clsFilter) throws IOException {
super(in);
assert clsLdr != null;
@@ -56,7 +59,7 @@ class JdkMarshallerObjectInputStream extends
ObjectInputStream {
// Must have 'Class.forName()' instead of clsLoader.loadClass()
// due to weird ClassNotFoundExceptions for arrays of classes
// in certain cases.
- return U.forName(desc.getName(), clsLdr, clsFilter);
+ return CommonUtils.forName(desc.getName(), clsLdr, clsFilter,
Marshallers.USE_CACHE.get());
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectOutputStream.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectOutputStream.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectOutputStream.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerObjectOutputStream.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerOutputStreamWrapper.java
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerOutputStreamWrapper.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerOutputStreamWrapper.java
rename to
modules/binary/impl/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshallerOutputStreamWrapper.java
diff --git
a/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.marshaller.MarshallersFactory
b/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.marshaller.MarshallersFactory
new file mode 100644
index 00000000000..1fd84962a65
--- /dev/null
+++
b/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.marshaller.MarshallersFactory
@@ -0,0 +1 @@
+org.apache.ignite.marshaller.MarshallersFactoryImpl
\ No newline at end of file
diff --git
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TestMemcacheClient.java
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TestMemcacheClient.java
index 046cd82d3e3..18dcd66ed6e 100644
---
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TestMemcacheClient.java
+++
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TestMemcacheClient.java
@@ -31,10 +31,11 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.logger.java.JavaLogger;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.Nullable;
/**
@@ -75,7 +76,7 @@ final class TestMemcacheClient {
private final IgniteLogger log = new JavaLogger();
/** JDK marshaller. */
- private final Marshaller jdkMarshaller = new JdkMarshaller();
+ private final Marshaller jdkMarshaller = Marshallers.jdk();
/** Socket. */
private final Socket sock;
@@ -444,13 +445,13 @@ final class TestMemcacheClient {
}
if (cacheNameBytes != null)
- U.arrayCopy(cacheNameBytes, 0, packet, HDR_LEN +
cmd.extrasLength(), cacheNameLength);
+ GridUnsafe.arrayCopy(cacheNameBytes, 0, packet, HDR_LEN +
cmd.extrasLength(), cacheNameLength);
if (keyData.getBytes() != null)
- U.arrayCopy(keyData.getBytes(), 0, packet, HDR_LEN + extrasLength,
keyData.length());
+ GridUnsafe.arrayCopy(keyData.getBytes(), 0, packet, HDR_LEN +
extrasLength, keyData.length());
if (valData.getBytes() != null)
- U.arrayCopy(valData.getBytes(), 0, packet, HDR_LEN + extrasLength
+ keyData.length(), valData.length());
+ GridUnsafe.arrayCopy(valData.getBytes(), 0, packet, HDR_LEN +
extrasLength + keyData.length(), valData.length());
return packet;
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClassLoaderMarker.java
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheClassLoaderMarker.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClassLoaderMarker.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheClassLoaderMarker.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/util/ClassCache.java
b/modules/commons/src/main/java/org/apache/ignite/internal/util/ClassCache.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/internal/util/ClassCache.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/util/ClassCache.java
diff --git
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
index 820035ac29d..2b1c7ccc6e3 100644
---
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
+++
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
@@ -26,13 +26,19 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.HashMap;
+import java.util.Map;
import java.util.ServiceLoader;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCommonsSystemProperties;
+import org.apache.ignite.internal.processors.cache.CacheClassLoaderMarker;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.lang.IgnitePredicate;
import org.jetbrains.annotations.Nullable;
/**
@@ -84,7 +90,37 @@ public abstract class CommonUtils {
/** Mutex. */
static final Object mux = new Object();
+ /** Empty local Ignite name. */
+ public static final String LOC_IGNITE_NAME_EMPTY = new String();
+
+ /** Local Ignite name thread local. */
+ private static final ThreadLocal<String> LOC_IGNITE_NAME = new
ThreadLocal<String>() {
+ @Override protected String initialValue() {
+ return LOC_IGNITE_NAME_EMPTY;
+ }
+ };
+
+ /** Class loader used to load Ignite. */
+ private static final ClassLoader gridClassLoader =
CommonUtils.class.getClassLoader();
+
+ /** Primitive class map. */
+ private static final Map<String, Class<?>> primitiveMap = new
HashMap<>(16, .5f);
+
+ /** */
+ private static final ConcurrentMap<ClassLoader, ConcurrentMap<String,
Class>> classCache =
+ new ConcurrentHashMap<>();
+
static {
+ primitiveMap.put("byte", byte.class);
+ primitiveMap.put("short", short.class);
+ primitiveMap.put("int", int.class);
+ primitiveMap.put("long", long.class);
+ primitiveMap.put("float", float.class);
+ primitiveMap.put("double", double.class);
+ primitiveMap.put("char", char.class);
+ primitiveMap.put("boolean", boolean.class);
+ primitiveMap.put("void", void.class);
+
try {
OBJECT_CTOR = Object.class.getConstructor();
}
@@ -455,4 +491,253 @@ public abstract class CommonUtils {
return null;
}
+
+ /**
+ * Get current Ignite name.
+ *
+ * @return Current Ignite name.
+ */
+ @Nullable public static String getCurrentIgniteName() {
+ return LOC_IGNITE_NAME.get();
+ }
+
+ /**
+ * Check if current Ignite name is set.
+ *
+ * @param name Name to check.
+ * @return {@code True} if set.
+ */
+ @SuppressWarnings("StringEquality")
+ public static boolean isCurrentIgniteNameSet(@Nullable String name) {
+ return name != LOC_IGNITE_NAME_EMPTY;
+ }
+
+ /**
+ * Set current Ignite name.
+ *
+ * @param newName New name.
+ * @return Old name.
+ */
+ @SuppressWarnings("StringEquality")
+ @Nullable public static String setCurrentIgniteName(@Nullable String
newName) {
+ String oldName = LOC_IGNITE_NAME.get();
+
+ if (oldName != newName)
+ LOC_IGNITE_NAME.set(newName);
+
+ return oldName;
+ }
+
+ /**
+ * Restore old Ignite name.
+ *
+ * @param oldName Old name.
+ * @param curName Current name.
+ */
+ @SuppressWarnings("StringEquality")
+ public static void restoreOldIgniteName(@Nullable String oldName,
@Nullable String curName) {
+ if (oldName != curName)
+ LOC_IGNITE_NAME.set(oldName);
+ }
+
+ /**
+ * @return Class loader used to load Ignite itself.
+ */
+ public static ClassLoader gridClassLoader() {
+ return gridClassLoader;
+ }
+
+ /**
+ * @param ldr Custom class loader.
+ * @param cfgLdr Class loader from config.
+ * @return ClassLoader passed as param in case it is not null or cfgLdr
in case it is not null or ClassLoader used to start Ignite.
+ */
+ public static ClassLoader resolveClassLoader(@Nullable ClassLoader ldr,
@Nullable ClassLoader cfgLdr) {
+ return (ldr != null && ldr != gridClassLoader)
+ ? ldr
+ : cfgLdr != null
+ ? cfgLdr
+ : gridClassLoader;
+ }
+
+ /**
+ * Tests whether given class is loadable by provided class loader.
+ *
+ * @param clsName Class name to test.
+ * @param ldr Class loader to test with. If {@code null} - we'll use
system class loader instead.
+ * If System class loader is not set - this method will return {@code
false}.
+ * @return {@code True} if class is loadable, {@code false} otherwise.
+ */
+ public static boolean isLoadableBy(String clsName, @Nullable ClassLoader
ldr) {
+ assert clsName != null;
+
+ if (ldr == null)
+ ldr = gridClassLoader;
+
+ String lambdaParent = lambdaEnclosingClassName(clsName);
+
+ try {
+ ldr.loadClass(lambdaParent == null ? clsName : lambdaParent);
+
+ return true;
+ }
+ catch (ClassNotFoundException ignore) {
+ return false;
+ }
+ }
+
+ /**
+ * Gets a class for a given name if it can be loaded or a given default
class otherwise.
+ *
+ * @param cls Class.
+ * @param dflt Default class to return.
+ * @return Class or default given class if it can't be found.
+ */
+ @Nullable public static Class<?> classForName(@Nullable String cls,
@Nullable Class<?> dflt) {
+ return classForName(cls, dflt, false);
+ }
+
+ /**
+ * Gets a class for a given name if it can be loaded or a given default
class otherwise.
+ *
+ * @param cls Class.
+ * @param dflt Default class to return.
+ * @param includePrimitiveTypes Whether class resolution should include
primitive types
+ * (i.e. "int" will resolve to int.class if
flag is set)
+ * @return Class or default given class if it can't be found.
+ */
+ @Nullable public static Class<?> classForName(
+ @Nullable String cls,
+ @Nullable Class<?> dflt,
+ boolean includePrimitiveTypes
+ ) {
+ Class<?> clazz;
+ if (cls == null)
+ clazz = dflt;
+ else if (!includePrimitiveTypes || cls.length() > 7 || (clazz =
primitiveMap.get(cls)) == null) {
+ try {
+ clazz = Class.forName(cls);
+ }
+ catch (ClassNotFoundException ignore) {
+ clazz = dflt;
+ }
+ }
+ return clazz;
+ }
+
+ /**
+ * Gets class for provided name. Accepts primitive types names.
+ *
+ * @param clsName Class name.
+ * @param ldr Class loader.
+ * @param useCache If true class loader and result should be cached
internally, false otherwise.
+ * @return Class.
+ * @throws ClassNotFoundException If class not found.
+ */
+ public static Class<?> forName(
+ String clsName,
+ @Nullable ClassLoader ldr,
+ @Nullable IgnitePredicate<String> clsFilter,
+ boolean useCache
+ ) throws ClassNotFoundException {
+ assert clsName != null;
+
+ Class<?> cls = primitiveMap.get(clsName);
+
+ if (cls != null)
+ return cls;
+
+ if (ldr != null) {
+ if (ldr instanceof ClassCache)
+ return ((ClassCache)ldr).getFromCache(clsName);
+ else if (!useCache) {
+ cls = Class.forName(clsName, true, ldr);
+
+ return cls;
+ }
+ }
+ else
+ ldr = gridClassLoader;
+
+ if (!useCache) {
+ cls = Class.forName(clsName, true, ldr);
+
+ return cls;
+ }
+
+ ConcurrentMap<String, Class> ldrMap = classCache.get(ldr);
+
+ if (ldrMap == null) {
+ ConcurrentMap<String, Class> old = classCache.putIfAbsent(ldr,
ldrMap = new ConcurrentHashMap<>());
+
+ if (old != null)
+ ldrMap = old;
+ }
+
+ cls = ldrMap.get(clsName);
+
+ if (cls == null) {
+ if (clsFilter != null && !clsFilter.apply(clsName))
+ throw new ClassNotFoundException("Deserialization of class " +
clsName + " is disallowed.");
+
+ // Avoid class caching inside Class.forName
+ if (ldr instanceof CacheClassLoaderMarker)
+ cls = ldr.loadClass(clsName);
+ else
+ cls = Class.forName(clsName, true, ldr);
+
+ Class old = ldrMap.putIfAbsent(clsName, cls);
+
+ if (old != null)
+ cls = old;
+ }
+
+ return cls;
+ }
+
+ /**
+ * Clears class associated with provided class loader from class cache.
+ *
+ * @param ldr Class loader.
+ * @param clsName Class name of clearing class.
+ */
+ public static void clearClassFromClassCache(ClassLoader ldr, String
clsName) {
+ ConcurrentMap<String, Class> map = classCache.get(ldr);
+
+ if (map != null)
+ map.remove(clsName);
+ }
+
+ /**
+ * Clears class cache for provided loader.
+ *
+ * @param ldr Class loader.
+ */
+ public static void clearClassCache(ClassLoader ldr) {
+ classCache.remove(ldr);
+ }
+
+ /**
+ * Completely clears class cache.
+ */
+ public static void clearClassCache() {
+ classCache.clear();
+ }
+
+ /**
+ * Extracts full name of enclosing class from JDK8 lambda class name.
+ *
+ * @param clsName JDK8 lambda class name.
+ * @return Full name of enclosing class for JDK8 lambda class name or
+ * {@code null} if passed in name is not related to lambda.
+ */
+ @Nullable public static String lambdaEnclosingClassName(String clsName) {
+ int idx0 = clsName.indexOf("$$Lambda$"); // Java 8+
+ int idx1 = clsName.indexOf("$$Lambda/"); // Java 21+
+
+ if (idx0 == idx1)
+ return null;
+
+ return clsName.substring(0, idx0 >= 0 ? idx0 : idx1);
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
index b8ad5eb1621..8074a354ba8 100644
---
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
+++
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
@@ -45,7 +45,7 @@ import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.resources.CacheStoreSessionResource;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
@@ -109,7 +109,7 @@ public class CacheJdbcBlobStore<K, V> extends
CacheStoreAdapter<K, V> {
private static final String ATTR_CONN = "JDBC_STORE_CONNECTION";
/** Marshaller. */
- private static final Marshaller marsh = new JdkMarshaller();
+ private static final Marshaller marsh = Marshallers.jdk();
/** Connection URL. */
private String connUrl = DFLT_CONN_URL;
diff --git a/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
b/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
index 58289bd4b29..1c165ac7d48 100644
--- a/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
@@ -58,6 +58,7 @@ import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.lang.IgniteExperimental;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.spi.IgniteSpiAdapter;
import org.apache.ignite.spi.encryption.EncryptionSpi;
@@ -320,7 +321,7 @@ public class DumpReader implements Runnable {
* @return List of snapshot metadata saved in {@code #dumpDir}.
*/
public static List<SnapshotMetadata> metadata(File dumpDir) {
- JdkMarshaller marsh = new JdkMarshaller();
+ JdkMarshaller marsh = Marshallers.jdk();
ClassLoader clsLdr = U.resolveClassLoader(new IgniteConfiguration());
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 39e8f557d2a..28131e156d0 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
@@ -32,11 +32,18 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
import java.util.function.BiPredicate;
import java.util.function.Function;
+import javax.management.MBeanServer;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.compute.ComputeJobContext;
+import org.apache.ignite.compute.ComputeLoadBalancer;
+import org.apache.ignite.compute.ComputeTaskContinuousMapper;
+import org.apache.ignite.compute.ComputeTaskSession;
+import org.apache.ignite.internal.executor.GridExecutorService;
import
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap;
import
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
import
org.apache.ignite.internal.processors.cache.persistence.filename.SharedFileTree;
@@ -51,8 +58,11 @@ import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.MarshallerExclusions;
import org.apache.ignite.marshaller.MarshallerUtils;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.plugin.PluginProvider;
import org.jetbrains.annotations.NotNull;
@@ -108,9 +118,10 @@ public class MarshallerContextImpl implements
MarshallerContext {
*/
public MarshallerContextImpl(@Nullable Collection<PluginProvider> plugins,
IgnitePredicate<String> clsFilter) {
this.clsFilter = clsFilter;
- this.jdkMarsh = new JdkMarshaller(clsFilter);
+ this.jdkMarsh = Marshallers.jdk(clsFilter);
initializeCaches();
+ initializeMarshallerExclusions();
try {
ClassLoader ldr = U.gridClassLoader();
@@ -143,6 +154,35 @@ public class MarshallerContextImpl implements
MarshallerContext {
}
}
+ /** */
+ private void initializeMarshallerExclusions() {
+ try {
+
MarshallerExclusions.exclude(Class.forName("org.springframework.context.ApplicationContext"));
+ }
+ catch (Exception ignored) {
+ // No-op.
+ }
+
+ // Non-Ignite classes.
+ MarshallerExclusions.exclude(MBeanServer.class);
+ MarshallerExclusions.exclude(ExecutorService.class);
+ MarshallerExclusions.exclude(ClassLoader.class);
+ MarshallerExclusions.exclude(Thread.class);
+
+ // Ignite classes.
+ MarshallerExclusions.exclude(IgniteLogger.class);
+ MarshallerExclusions.exclude(ComputeTaskSession.class);
+ MarshallerExclusions.exclude(ComputeLoadBalancer.class);
+ MarshallerExclusions.exclude(ComputeJobContext.class);
+ MarshallerExclusions.exclude(Marshaller.class);
+ MarshallerExclusions.exclude(GridComponent.class);
+ MarshallerExclusions.exclude(ComputeTaskContinuousMapper.class);
+
+ // Ignite classes.
+ MarshallerExclusions.include(GridLoggerProxy.class);
+ MarshallerExclusions.include(GridExecutorService.class);
+ }
+
/** */
private void initializeCaches() {
allCaches.add(new CombinedMap(new ConcurrentHashMap<Integer,
MappedName>(), sysTypesMap));
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
index fef7e7d746a..8279fc48f1c 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
@@ -35,6 +35,7 @@ import
org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -106,7 +107,7 @@ class BinaryArray implements BinaryObjectEx,
Externalizable, Comparable<BinaryAr
ClassLoader resolveLdr = ldr == null ? ctx.classLoader() : ldr;
if (ldr != null)
- GridBinaryMarshaller.USE_CACHE.set(Boolean.FALSE);
+ Marshallers.USE_CACHE.set(Boolean.FALSE);
try {
Class<?> compType = BinaryUtils.resolveClass(ctx, compTypeId,
compClsName, resolveLdr, false);
@@ -130,7 +131,7 @@ class BinaryArray implements BinaryObjectEx,
Externalizable, Comparable<BinaryAr
return (T)deserialized;
}
finally {
- GridBinaryMarshaller.USE_CACHE.set(Boolean.TRUE);
+ Marshallers.USE_CACHE.set(Boolean.TRUE);
}
}
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 4670e73f515..81b8035a3e3 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
@@ -71,6 +71,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -727,7 +728,7 @@ public class BinaryContext {
Class cls;
try {
- if (GridBinaryMarshaller.USE_CACHE.get()) {
+ if (Marshallers.USE_CACHE.get()) {
cls = marshCtx.getClass(typeId, ldr);
desc = descByCls.get(cls);
@@ -823,7 +824,7 @@ public class BinaryContext {
else {
BinaryClassDescriptor regDesc = desc.makeRegistered();
- if (GridBinaryMarshaller.USE_CACHE.get()) {
+ if (Marshallers.USE_CACHE.get()) {
BinaryClassDescriptor old =
descByCls.putIfAbsent(desc.describedClass(), regDesc);
if (old != null)
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
index 4d69956edff..6814a9e63ff 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
@@ -33,9 +33,11 @@ import
org.apache.ignite.internal.processors.cache.CacheObjectAdapter;
import org.apache.ignite.internal.processors.cache.CacheObjectContext;
import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
import
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.SB;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
import org.jetbrains.annotations.Nullable;
@@ -108,7 +110,7 @@ class BinaryEnumObjectImpl implements BinaryObjectEx,
Externalizable, CacheObjec
valBytes[0] = GridBinaryMarshaller.ENUM;
- U.arrayCopy(arr, 1, valBytes, 1, arr.length - 1);
+ GridUnsafe.arrayCopy(arr, 1, valBytes, 1, arr.length - 1);
}
this.ctx = ctx;
@@ -176,7 +178,7 @@ class BinaryEnumObjectImpl implements BinaryObjectEx,
Externalizable, CacheObjec
ClassLoader resolveLdr = ldr == null ? ctx.classLoader() : ldr;
if (ldr != null)
- GridBinaryMarshaller.USE_CACHE.set(Boolean.FALSE);
+ Marshallers.USE_CACHE.set(Boolean.FALSE);
try {
Class cls = BinaryUtils.resolveClass(ctx, typeId, clsName,
resolveLdr, false);
@@ -184,7 +186,7 @@ class BinaryEnumObjectImpl implements BinaryObjectEx,
Externalizable, CacheObjec
return (T)(ldr == null ? BinaryEnumCache.get(cls, ord) :
uncachedValue(cls));
}
finally {
- GridBinaryMarshaller.USE_CACHE.set(Boolean.TRUE);
+ Marshallers.USE_CACHE.set(Boolean.TRUE);
}
}
@@ -197,7 +199,7 @@ class BinaryEnumObjectImpl implements BinaryObjectEx,
Externalizable, CacheObjec
private <T> T uncachedValue(Class<?> cls) throws BinaryObjectException {
assert cls != null;
- assert !GridBinaryMarshaller.USE_CACHE.get();
+ assert !Marshallers.USE_CACHE.get();
if (ord >= 0) {
Object[] vals = cls.getEnumConstants();
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 5cbd148c31b..5c6ed595d19 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -43,8 +43,9 @@ import
org.apache.ignite.internal.processors.cache.CacheObjectTransformerUtils;
import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
import
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
import org.jetbrains.annotations.Nullable;
@@ -309,7 +310,7 @@ final class BinaryObjectImpl extends BinaryObjectExImpl
implements Externalizabl
byte[] detachedData = new byte[len];
- U.arrayCopy(arr, start, detachedData, 0, len);
+ GridUnsafe.arrayCopy(arr, start, detachedData, 0, len);
return new BinaryObjectImpl(ctx, detachedData, 0);
}
@@ -728,13 +729,13 @@ final class BinaryObjectImpl extends BinaryObjectExImpl
implements Externalizabl
if (ldr == null)
return deserialize();
- GridBinaryMarshaller.USE_CACHE.set(Boolean.FALSE);
+ Marshallers.USE_CACHE.set(Boolean.FALSE);
try {
return (T)reader(null, ldr, true).deserialize();
}
finally {
- GridBinaryMarshaller.USE_CACHE.set(Boolean.TRUE);
+ Marshallers.USE_CACHE.set(Boolean.TRUE);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
index 40ff9130c45..e5778190f52 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
@@ -40,6 +40,7 @@ import
org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.CacheObjectContext;
import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
import org.jetbrains.annotations.Nullable;
@@ -416,13 +417,13 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl
implements Externalizab
if (ldr == null)
return deserialize();
- GridBinaryMarshaller.USE_CACHE.set(Boolean.FALSE);
+ Marshallers.USE_CACHE.set(Boolean.FALSE);
try {
return (T)reader(null, ldr, true).deserialize();
}
finally {
- GridBinaryMarshaller.USE_CACHE.set(Boolean.TRUE);
+ Marshallers.USE_CACHE.set(Boolean.TRUE);
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
index 025e33eb52f..aad7833d34d 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
@@ -39,6 +39,7 @@ import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.SB;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -1399,7 +1400,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
if (cls == null)
cls = cls0;
- return BinaryUtils.doReadEnum(in, cls,
GridBinaryMarshaller.USE_CACHE.get());
+ return BinaryUtils.doReadEnum(in, cls,
Marshallers.USE_CACHE.get());
}
else
return null;
@@ -1923,7 +1924,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
case ENUM:
obj = BinaryUtils.doReadEnum(in, BinaryUtils.doReadClass(in,
ctx, ldr),
- GridBinaryMarshaller.USE_CACHE.get());
+ Marshallers.USE_CACHE.get());
break;
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 a20482004ca..aa2f44abd9d 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
@@ -81,6 +81,7 @@ import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.T2;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.platform.PlatformType;
import org.apache.ignite.plugin.extensions.communication.Message;
import org.jetbrains.annotations.Nullable;
@@ -1594,7 +1595,7 @@ public class BinaryUtils {
cls = ctx.descriptorForTypeId(true, typeId, ldr,
false).describedClass();
else {
String clsName = doReadClassName(in);
- boolean useCache = GridBinaryMarshaller.USE_CACHE.get();
+ boolean useCache = Marshallers.USE_CACHE.get();
try {
cls = U.forName(clsName, ldr, null);
@@ -1788,7 +1789,7 @@ public class BinaryUtils {
if (flag == GridBinaryMarshaller.NULL)
arr[i] = null;
else
- arr[i] = doReadEnum(in, doReadClass(in, ctx, ldr),
GridBinaryMarshaller.USE_CACHE.get());
+ arr[i] = doReadEnum(in, doReadClass(in, ctx, ldr),
Marshallers.USE_CACHE.get());
}
return arr;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
index 4ebac2bd59a..95e80e82a2a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
@@ -42,9 +42,6 @@ public class GridBinaryMarshaller {
private static final ThreadLocal<BinaryContextHolder> BINARY_CTX =
ThreadLocal.withInitial(BinaryContextHolder::new);
- /** Flag whether class caching should be used by the current thread. */
- public static final ThreadLocal<Boolean> USE_CACHE =
ThreadLocal.withInitial(() -> Boolean.TRUE);
-
/** */
public static final byte TRANSFORMED = -3;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
index 15d9e0c3e82..0bef412ca93 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
@@ -78,6 +78,7 @@ import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.logger.NullLogger;
import org.apache.ignite.marshaller.MarshallerContext;
import org.apache.ignite.marshaller.MarshallerUtils;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.jetbrains.annotations.Nullable;
@@ -881,7 +882,7 @@ public class TcpIgniteClient implements IgniteClient {
/** {@inheritDoc} */
@Override public JdkMarshaller jdkMarshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
/**
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
index 9af01eaaa45..1ce478c7c86 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
@@ -126,6 +126,7 @@ import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.logger.NullLogger;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.thread.IgniteThreadFactory;
import org.apache.ignite.transactions.TransactionIsolation;
@@ -2465,7 +2466,7 @@ public class JdbcThinConnection implements Connection {
/** {@inheritDoc} */
@Override public JdkMarshaller jdkMarshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBinaryBuffer.java
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBinaryBuffer.java
index f6d1839ac07..5948ecf7458 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBinaryBuffer.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBinaryBuffer.java
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Objects;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.GridUnsafe;
import static org.apache.ignite.internal.util.CommonUtils.MAX_ARRAY_SIZE;
@@ -195,7 +195,7 @@ public class JdbcBinaryBuffer {
int size = Math.min(resLen, len - pos);
- U.arrayCopy(arr, bufOff, resBuf, resOff, size);
+ GridUnsafe.arrayCopy(arr, bufOff, resBuf, resOff, size);
return size;
}
@@ -217,7 +217,7 @@ public class JdbcBinaryBuffer {
updateLength(Math.max(pos + inpLen, len));
- U.arrayCopy(inpBuf, inpOff, arr, pos, inpLen);
+ GridUnsafe.arrayCopy(inpBuf, inpOff, arr, pos, inpLen);
}
/**
@@ -294,7 +294,7 @@ public class JdbcBinaryBuffer {
private void reallocate(int newCapacity) {
byte[] newBuf = new byte[newCapacity];
- U.arrayCopy(arr, off, newBuf, 0, len);
+ GridUnsafe.arrayCopy(arr, off, newBuf, 0, len);
arr = newBuf;
off = 0;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcClob.java
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcClob.java
index ecef1abd6ab..7336006244e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcClob.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcClob.java
@@ -25,7 +25,7 @@ import java.io.Writer;
import java.sql.Clob;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.GridUnsafe;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -285,7 +285,7 @@ public class JdbcClob implements Clob {
int encodedChunkSize = Math.min(len - i, buf.length - bufPos);
- U.arrayCopy(buf, bufPos, b, off + i, encodedChunkSize);
+ GridUnsafe.arrayCopy(buf, bufPos, b, off + i,
encodedChunkSize);
bufPos += encodedChunkSize;
i += encodedChunkSize;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
index 1125622a325..67747d00807 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
@@ -45,12 +45,11 @@ import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
-
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.MarshallerContext;
import org.apache.ignite.marshaller.MarshallerExclusions;
+import org.apache.ignite.marshaller.Marshallers;
import static java.lang.reflect.Modifier.isFinal;
import static java.lang.reflect.Modifier.isPrivate;
@@ -725,7 +724,7 @@ class OptimizedClassDescriptor {
case OBJ_ARR:
OptimizedClassDescriptor compDesc =
OptimizedMarshallerUtils.classDescriptor(clsMap,
obj.getClass().getComponentType(),
- GridBinaryMarshaller.USE_CACHE.get(),
+ Marshallers.USE_CACHE.get(),
ctx,
mapper);
@@ -787,7 +786,7 @@ class OptimizedClassDescriptor {
case CLS:
OptimizedClassDescriptor clsDesc =
OptimizedMarshallerUtils.classDescriptor(
- clsMap, (Class<?>)obj,
GridBinaryMarshaller.USE_CACHE.get(), ctx, mapper);
+ clsMap, (Class<?>)obj, Marshallers.USE_CACHE.get(), ctx,
mapper);
clsDesc.writeTypeData(out);
@@ -798,7 +797,7 @@ class OptimizedClassDescriptor {
for (Class<?> intf : proxyIntfs) {
OptimizedClassDescriptor intfDesc =
OptimizedMarshallerUtils.classDescriptor(
- clsMap, intf, GridBinaryMarshaller.USE_CACHE.get(),
ctx, mapper);
+ clsMap, intf, Marshallers.USE_CACHE.get(), ctx,
mapper);
intfDesc.writeTypeData(out);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
index c694dd48782..f8738a6e58a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
@@ -27,10 +27,10 @@ import java.util.concurrent.ConcurrentMap;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.Nullable;
import sun.misc.Unsafe;
@@ -222,7 +222,7 @@ public class OptimizedMarshaller extends
AbstractNodeNameAwareMarshaller {
/** {@inheritDoc} */
@Override protected <T> T unmarshal0(InputStream in, @Nullable ClassLoader
clsLdr) throws IgniteCheckedException {
- return unmarshal0(in, clsLdr, GridBinaryMarshaller.USE_CACHE.get());
+ return unmarshal0(in, clsLdr, Marshallers.USE_CACHE.get());
}
/**
@@ -278,7 +278,7 @@ public class OptimizedMarshaller extends
AbstractNodeNameAwareMarshaller {
objIn = registry.in();
objIn.context(clsMap, ctx, mapper,
- clsLdr != null ? clsLdr : dfltClsLdr,
GridBinaryMarshaller.USE_CACHE.get());
+ clsLdr != null ? clsLdr : dfltClsLdr,
Marshallers.USE_CACHE.get());
objIn.in().bytes(arr, arr.length);
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
index f422246e329..d3ce371324a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
@@ -39,13 +39,13 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
import org.apache.ignite.internal.util.GridHandleTable;
import org.apache.ignite.internal.util.io.GridDataOutput;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import static
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HANDLE;
import static
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.JDK;
@@ -202,7 +202,7 @@ public class OptimizedObjectOutputStream extends
ObjectOutputStream {
OptimizedClassDescriptor desc = classDescriptor(
clsMap,
obj instanceof Object[] ? Object[].class : obj.getClass(),
- GridBinaryMarshaller.USE_CACHE.get(),
+ Marshallers.USE_CACHE.get(),
ctx,
mapper);
@@ -230,7 +230,7 @@ public class OptimizedObjectOutputStream extends
ObjectOutputStream {
desc = classDescriptor(clsMap,
obj instanceof Object[] ? Object[].class :
obj.getClass(),
- GridBinaryMarshaller.USE_CACHE.get(),
+ Marshallers.USE_CACHE.get(),
ctx,
mapper);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectTransformerUtils.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectTransformerUtils.java
index 58eff96b98c..6af164686ae 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectTransformerUtils.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectTransformerUtils.java
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.processors.cache;
import java.nio.ByteBuffer;
import org.apache.ignite.events.CacheObjectTransformedEvent;
import
org.apache.ignite.internal.cache.transform.CacheObjectTransformerProcessor;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.GridUnsafe;
import static org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_TRANSFORMED;
import static
org.apache.ignite.internal.binary.GridBinaryMarshaller.TRANSFORMED;
@@ -102,7 +102,7 @@ public class CacheObjectTransformerUtils {
byte[] res = new byte[length];
- U.arrayCopy(bytes, offset, res, 0, length);
+ GridUnsafe.arrayCopy(bytes, offset, res, 0, length);
return res;
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientHandshakeRequest.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientHandshakeRequest.java
index 4e1ba91efb1..747600656a0 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientHandshakeRequest.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientHandshakeRequest.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.rest.client.message;
import java.util.Arrays;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.U;
/**
@@ -82,7 +83,7 @@ public class GridClientHandshakeRequest extends
GridClientAbstractMessage {
if (arr == null)
arr = new byte[PACKET_SIZE];
- U.arrayCopy(buf, 0, arr, off, len);
+ GridUnsafe.arrayCopy(buf, 0, arr, off, len);
}
/**
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridMemcachedMessage.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridMemcachedMessage.java
index 3e83cb05fba..1e153086a6c 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridMemcachedMessage.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridMemcachedMessage.java
@@ -19,6 +19,7 @@ package
org.apache.ignite.internal.processors.rest.protocols.tcp;
import java.util.UUID;
import
org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.jetbrains.annotations.Nullable;
@@ -150,7 +151,7 @@ public class GridMemcachedMessage implements
GridClientMessage {
opCode = req.opCode;
opaque = new byte[req.opaque.length];
- U.arrayCopy(req.opaque, 0, opaque, 0, req.opaque.length);
+ GridUnsafe.arrayCopy(req.opaque, 0, opaque, 0, req.opaque.length);
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
index 8b72e5a7804..4ca84258c3b 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
@@ -34,12 +34,13 @@ import
org.apache.ignite.internal.processors.rest.client.message.GridRouterRespo
import
org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisMessage;
import
org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser;
import org.apache.ignite.internal.util.GridByteArrayList;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.nio.GridNioParser;
import org.apache.ignite.internal.util.nio.GridNioSession;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.Nullable;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -77,7 +78,7 @@ public class GridTcpRestParser implements GridNioParser {
* @param routerClient Router client flag.
*/
public GridTcpRestParser(boolean routerClient) {
- this(routerClient, new JdkMarshaller());
+ this(routerClient, Marshallers.jdk());
}
/**
@@ -819,7 +820,7 @@ public class GridTcpRestParser implements GridNioParser {
if (extras.length - len > 0) {
byte[] cacheName = new byte[extras.length - len];
- U.arrayCopy(extras, len, cacheName, 0, extras.length - len);
+ GridUnsafe.arrayCopy(extras, len, cacheName, 0, extras.length
- len);
req.cacheName(new String(cacheName, UTF_8));
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
index 2143027217e..d3d536db8b1 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
@@ -121,7 +121,7 @@ public class GridByteArrayList implements Message,
Externalizable {
public byte[] array() {
byte[] res = new byte[size];
- U.arrayCopy(data, 0, res, 0, size);
+ GridUnsafe.arrayCopy(data, 0, res, 0, size);
return res;
}
@@ -304,7 +304,7 @@ public class GridByteArrayList implements Message,
Externalizable {
public void add(byte[] bytes, int off, int len) {
requestFreeSize(len);
- U.arrayCopy(bytes, off, data, size, len);
+ GridUnsafe.arrayCopy(bytes, off, data, size, len);
size += len;
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index a0a391e6334..71e42f6a04b 100755
---
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -188,7 +188,6 @@ import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.internal.binary.BinaryMetadata;
import org.apache.ignite.internal.binary.BinaryMetadataHandler;
import org.apache.ignite.internal.binary.BinaryUtils;
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException;
import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import org.apache.ignite.internal.compute.ComputeTaskCancelledCheckedException;
@@ -200,7 +199,6 @@ import
org.apache.ignite.internal.managers.deployment.GridDeployment;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
import org.apache.ignite.internal.mxbean.IgniteStandardMXBean;
-import org.apache.ignite.internal.processors.cache.CacheClassLoaderMarker;
import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
import
org.apache.ignite.internal.processors.cache.IgnitePeerToPeerClassLoadingException;
import
org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException;
@@ -236,6 +234,7 @@ import org.apache.ignite.lifecycle.LifecycleAware;
import org.apache.ignite.logger.NullLogger;
import org.apache.ignite.logger.java.JavaLogger;
import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.plugin.PluginProvider;
import org.apache.ignite.plugin.extensions.communication.Message;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
@@ -252,7 +251,6 @@ import
org.apache.ignite.transactions.TransactionRollbackException;
import org.apache.ignite.transactions.TransactionTimeoutException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import sun.misc.Unsafe;
import static java.util.Objects.isNull;
import static
org.apache.ignite.IgniteSystemProperties.IGNITE_DISABLE_HOSTNAME_VERIFIER;
@@ -315,9 +313,6 @@ public abstract class IgniteUtils extends CommonUtils {
/** @see IgniteSystemProperties#IGNITE_MBEAN_APPEND_CLASS_LOADER_ID */
public static final boolean DFLT_MBEAN_APPEND_CLASS_LOADER_ID = true;
- /** {@code True} if {@code unsafe} should be used for array copy. */
- private static final boolean UNSAFE_BYTE_ARR_CP =
unsafeByteArrayCopyAvailable();
-
/** All grid event names. */
private static final Map<Integer, String> GRID_EVT_NAMES = new HashMap<>();
@@ -430,15 +425,9 @@ public abstract class IgniteUtils extends CommonUtils {
/** Supplier of network interfaces. Could be used for tests purposes, must
not be changed in production code. */
public static InterfaceSupplier INTERFACE_SUPPLIER =
NetworkInterface::getNetworkInterfaces;
- /** Primitive class map. */
- private static final Map<String, Class<?>> primitiveMap = new
HashMap<>(16, .5f);
-
/** Boxed class map. */
private static final Map<Class<?>, Class<?>> boxedClsMap = new
HashMap<>(16, .5f);
- /** Class loader used to load Ignite. */
- private static final ClassLoader gridClassLoader =
IgniteUtils.class.getClassLoader();
-
/** MAC OS invalid argument socket error message. */
public static final String MAC_INVALID_ARG_MSG = "On MAC OS you may have
too many file descriptors open " +
"(simple restart usually solves the issue)";
@@ -465,10 +454,6 @@ public abstract class IgniteUtils extends CommonUtils {
/** */
private static volatile IgniteBiTuple<Collection<String>,
Collection<String>> cachedLocalAddrAllHostNames;
- /** */
- private static final ConcurrentMap<ClassLoader, ConcurrentMap<String,
Class>> classCache =
- new ConcurrentHashMap<>();
-
/** Object.hashCode() */
private static Method hashCodeMtd;
@@ -478,16 +463,6 @@ public abstract class IgniteUtils extends CommonUtils {
/** Object.toString() */
private static Method toStringMtd;
- /** Empty local Ignite name. */
- public static final String LOC_IGNITE_NAME_EMPTY = new String();
-
- /** Local Ignite name thread local. */
- private static final ThreadLocal<String> LOC_IGNITE_NAME = new
ThreadLocal<String>() {
- @Override protected String initialValue() {
- return LOC_IGNITE_NAME_EMPTY;
- }
- };
-
/** Ignite MBeans disabled flag. */
public static boolean IGNITE_MBEANS_DISABLED =
IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_MBEANS_DISABLED);
@@ -609,16 +584,6 @@ public abstract class IgniteUtils extends CommonUtils {
jvm32Bit = "32".equals(jvmArchDataModel);
- primitiveMap.put("byte", byte.class);
- primitiveMap.put("short", short.class);
- primitiveMap.put("int", int.class);
- primitiveMap.put("long", long.class);
- primitiveMap.put("float", float.class);
- primitiveMap.put("double", double.class);
- primitiveMap.put("char", char.class);
- primitiveMap.put("boolean", boolean.class);
- primitiveMap.put("void", void.class);
-
boxedClsMap.put(byte.class, Byte.class);
boxedClsMap.put(short.class, Short.class);
boxedClsMap.put(int.class, Integer.class);
@@ -1260,45 +1225,6 @@ public abstract class IgniteUtils extends CommonUtils {
sb.a(NL).a(" ").a(info);
}
- /**
- * Gets class for the given name if it can be loaded or default given
class.
- *
- * @param cls Class.
- * @param dflt Default class to return.
- * @return Class or default given class if it can't be found.
- */
- @Nullable public static Class<?> classForName(@Nullable String cls,
@Nullable Class<?> dflt) {
- return classForName(cls, dflt, false);
- }
-
- /**
- * Gets class for the given name if it can be loaded or default given
class.
- *
- * @param cls Class.
- * @param dflt Default class to return.
- * @param includePrimitiveTypes Whether class resolution should include
primitive types
- * (i.e. "int" will resolve to int.class if
flag is set)
- * @return Class or default given class if it can't be found.
- */
- @Nullable public static Class<?> classForName(
- @Nullable String cls,
- @Nullable Class<?> dflt,
- boolean includePrimitiveTypes
- ) {
- Class<?> clazz;
- if (cls == null)
- clazz = dflt;
- else if (!includePrimitiveTypes || cls.length() > 7 || (clazz =
primitiveMap.get(cls)) == null) {
- try {
- clazz = Class.forName(cls);
- }
- catch (ClassNotFoundException ignore) {
- clazz = dflt;
- }
- }
- return clazz;
- }
-
/**
* Creates new instance of a class only if it has an empty constructor
(can be non-public).
*
@@ -2027,13 +1953,6 @@ public abstract class IgniteUtils extends CommonUtils {
return uri;
}
- /**
- * @return Class loader used to load Ignite itself.
- */
- public static ClassLoader gridClassLoader() {
- return gridClassLoader;
- }
-
/**
* @return ClassLoader at IgniteConfiguration in case it is not null or
* ClassLoader used to start Ignite.
@@ -2053,19 +1972,6 @@ public abstract class IgniteUtils extends CommonUtils {
return resolveClassLoader(ldr, cfg.getClassLoader());
}
- /**
- * @param ldr Custom class loader.
- * @param cfgLdr Class loader from config.
- * @return ClassLoader passed as param in case it is not null or cfgLdr
in case it is not null or ClassLoader used to start Ignite.
- */
- public static ClassLoader resolveClassLoader(@Nullable ClassLoader ldr,
@Nullable ClassLoader cfgLdr) {
- return (ldr != null && ldr != gridClassLoader)
- ? ldr
- : cfgLdr != null
- ? cfgLdr
- : gridClassLoader;
- }
-
/**
* @param parent Parent to find.
* @param ldr Loader to check.
@@ -2155,7 +2061,7 @@ public abstract class IgniteUtils extends CommonUtils {
byte[] res = new byte[size];
int position = 0;
for (byte[] buf : bufs) {
- arrayCopy(buf, 0, res, position, buf.length);
+ GridUnsafe.arrayCopy(buf, 0, res, position, buf.length);
position += buf.length;
}
@@ -5081,32 +4987,6 @@ public abstract class IgniteUtils extends CommonUtils {
return detectClassLoader(obj.getClass());
}
- /**
- * Tests whether or not given class is loadable provided class loader.
- *
- * @param clsName Class name to test.
- * @param ldr Class loader to test with. If {@code null} - we'll use
system class loader instead.
- * If System class loader is not set - this method will return {@code
false}.
- * @return {@code True} if class is loadable, {@code false} otherwise.
- */
- public static boolean isLoadableBy(String clsName, @Nullable ClassLoader
ldr) {
- assert clsName != null;
-
- if (ldr == null)
- ldr = gridClassLoader;
-
- String lambdaParent = lambdaEnclosingClassName(clsName);
-
- try {
- ldr.loadClass(lambdaParent == null ? clsName : lambdaParent);
-
- return true;
- }
- catch (ClassNotFoundException ignore) {
- return false;
- }
- }
-
/**
* Gets the peer deploy aware instance for the object with the widest
class loader.
* If collection is {@code null}, empty or contains only {@code null}s -
the peer
@@ -6927,7 +6807,7 @@ public abstract class IgniteUtils extends CommonUtils {
* @throws ClassNotFoundException If class not found.
*/
public static Class<?> forName(String clsName, @Nullable ClassLoader ldr)
throws ClassNotFoundException {
- return forName(clsName, ldr, null,
GridBinaryMarshaller.USE_CACHE.get());
+ return forName(clsName, ldr, null, Marshallers.USE_CACHE.get());
}
/**
@@ -6943,106 +6823,7 @@ public abstract class IgniteUtils extends CommonUtils {
@Nullable ClassLoader ldr,
IgnitePredicate<String> clsFilter
) throws ClassNotFoundException {
- return forName(clsName, ldr, clsFilter,
GridBinaryMarshaller.USE_CACHE.get());
- }
-
- /**
- * Gets class for provided name. Accepts primitive types names.
- *
- * @param clsName Class name.
- * @param ldr Class loader.
- * @param useCache If true class loader and result should be cached
internally, false otherwise.
- * @return Class.
- * @throws ClassNotFoundException If class not found.
- */
- public static Class<?> forName(
- String clsName,
- @Nullable ClassLoader ldr,
- IgnitePredicate<String> clsFilter,
- boolean useCache
- ) throws ClassNotFoundException {
- assert clsName != null;
-
- Class<?> cls = primitiveMap.get(clsName);
-
- if (cls != null)
- return cls;
-
- if (ldr != null) {
- if (ldr instanceof ClassCache)
- return ((ClassCache)ldr).getFromCache(clsName);
- else if (!useCache) {
- cls = Class.forName(clsName, true, ldr);
-
- return cls;
- }
- }
- else
- ldr = gridClassLoader;
-
- if (!useCache) {
- cls = Class.forName(clsName, true, ldr);
-
- return cls;
- }
-
- ConcurrentMap<String, Class> ldrMap = classCache.get(ldr);
-
- if (ldrMap == null) {
- ConcurrentMap<String, Class> old = classCache.putIfAbsent(ldr,
ldrMap = new ConcurrentHashMap<>());
-
- if (old != null)
- ldrMap = old;
- }
-
- cls = ldrMap.get(clsName);
-
- if (cls == null) {
- if (clsFilter != null && !clsFilter.apply(clsName))
- throw new ClassNotFoundException("Deserialization of class " +
clsName + " is disallowed.");
-
- // Avoid class caching inside Class.forName
- if (ldr instanceof CacheClassLoaderMarker)
- cls = ldr.loadClass(clsName);
- else
- cls = Class.forName(clsName, true, ldr);
-
- Class old = ldrMap.putIfAbsent(clsName, cls);
-
- if (old != null)
- cls = old;
- }
-
- return cls;
- }
-
- /**
- * Clears class associated with provided class loader from class cache.
- *
- * @param ldr Class loader.
- * @param clsName Class name of clearing class.
- */
- public static void clearClassFromClassCache(ClassLoader ldr, String
clsName) {
- ConcurrentMap<String, Class> map = classCache.get(ldr);
-
- if (map != null)
- map.remove(clsName);
- }
-
- /**
- * Clears class cache for provided loader.
- *
- * @param ldr Class loader.
- */
- public static void clearClassCache(ClassLoader ldr) {
- classCache.remove(ldr);
- }
-
- /**
- * Completely clears class cache.
- */
- public static void clearClassCache() {
- classCache.clear();
+ return forName(clsName, ldr, clsFilter, Marshallers.USE_CACHE.get());
}
/**
@@ -7123,47 +6904,6 @@ public abstract class IgniteUtils extends CommonUtils {
return ManagementFactory.getRuntimeMXBean().getInputArguments();
}
- /**
- * As long as array copying uses JVM-private API, which is not guaranteed
- * to be available on all JVM, this method should be called to ensure
- * logic could work properly.
- *
- * @return {@code True} if unsafe copying can work on the current JVM or
- * {@code false} if it can't.
- */
- @SuppressWarnings("TypeParameterExtendsFinalClass")
- private static boolean unsafeByteArrayCopyAvailable() {
- try {
- Class<? extends Unsafe> unsafeCls = Unsafe.class;
-
- unsafeCls.getMethod("copyMemory", Object.class, long.class,
Object.class, long.class, long.class);
-
- return true;
- }
- catch (Exception ignored) {
- return false;
- }
- }
-
- /**
- * @param src Buffer to copy from (length included).
- * @param off Offset in source buffer.
- * @param resBuf Result buffer.
- * @param resOff Result offset.
- * @param len Length.
- * @return Number of bytes overwritten in {@code bytes} array.
- */
- public static int arrayCopy(byte[] src, int off, byte[] resBuf, int
resOff, int len) {
- assert resBuf.length >= resOff + len;
-
- if (UNSAFE_BYTE_ARR_CP)
- GridUnsafe.copyMemory(src, GridUnsafe.BYTE_ARR_OFF + off, resBuf,
GridUnsafe.BYTE_ARR_OFF + resOff, len);
- else
- System.arraycopy(src, off, resBuf, resOff, len);
-
- return resOff + len;
- }
-
/**
* @param addrs Node's addresses.
* @return A string compatible with {@link ClusterNode#consistentId()}
requirements.
@@ -7694,23 +7434,6 @@ public abstract class IgniteUtils extends CommonUtils {
return e;
}
- /**
- * Extracts full name of enclosing class from JDK8 lambda class name.
- *
- * @param clsName JDK8 lambda class name.
- * @return Full name of enclosing class for JDK8 lambda class name or
- * {@code null} if passed in name is not related to lambda.
- */
- @Nullable public static String lambdaEnclosingClassName(String clsName) {
- int idx0 = clsName.indexOf("$$Lambda$"); // Java 8+
- int idx1 = clsName.indexOf("$$Lambda/"); // Java 21+
-
- if (idx0 == idx1)
- return null;
-
- return clsName.substring(0, idx0 >= 0 ? idx0 : idx1);
- }
-
/**
* Converts a hexadecimal character to an integer.
*
@@ -8392,54 +8115,6 @@ public abstract class IgniteUtils extends CommonUtils {
return marshal(ctx.marshaller(), obj);
}
- /**
- * Get current Ignite name.
- *
- * @return Current Ignite name.
- */
- @Nullable public static String getCurrentIgniteName() {
- return LOC_IGNITE_NAME.get();
- }
-
- /**
- * Check if current Ignite name is set.
- *
- * @param name Name to check.
- * @return {@code True} if set.
- */
- @SuppressWarnings("StringEquality")
- public static boolean isCurrentIgniteNameSet(@Nullable String name) {
- return name != LOC_IGNITE_NAME_EMPTY;
- }
-
- /**
- * Set current Ignite name.
- *
- * @param newName New name.
- * @return Old name.
- */
- @SuppressWarnings("StringEquality")
- @Nullable public static String setCurrentIgniteName(@Nullable String
newName) {
- String oldName = LOC_IGNITE_NAME.get();
-
- if (oldName != newName)
- LOC_IGNITE_NAME.set(newName);
-
- return oldName;
- }
-
- /**
- * Restore old Ignite name.
- *
- * @param oldName Old name.
- * @param curName Current name.
- */
- @SuppressWarnings("StringEquality")
- public static void restoreOldIgniteName(@Nullable String oldName,
@Nullable String curName) {
- if (oldName != curName)
- LOC_IGNITE_NAME.set(oldName);
- }
-
/**
* Zip binary payload using default compression.
*
diff --git
a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
index a0bdcc39c4c..9ea50a0819d 100644
---
a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
+++
b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
@@ -39,7 +39,7 @@ import org.apache.ignite.internal.util.typedef.internal.A;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.MarshallerUtils;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.stream.StreamAdapter;
import org.apache.ignite.stream.StreamTupleExtractor;
import org.jetbrains.annotations.Nullable;
@@ -229,7 +229,7 @@ public class SocketStreamer<T, K, V> extends
StreamAdapter<T, K, V> {
* @param igniteInstanceName Ignite instance name.
*/
private DefaultConverter(@Nullable String igniteInstanceName) {
- marsh = new
JdkMarshaller(((IgniteKernal)ignite).context().marshallerContext().classNameFilter());
+ marsh =
Marshallers.jdk(((IgniteKernal)ignite).context().marshallerContext().classNameFilter());
MarshallerUtils.setNodeName(marsh, igniteInstanceName);
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
index ce22ead4a64..5e8f420ed5b 100644
---
a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
@@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
/**
@@ -36,7 +36,7 @@ public class IgniteExternalizableAbstractTest extends
GridCommonAbstractTest {
BinaryMarshaller bin = createStandaloneBinaryMarshaller();
- marshallers.add(new JdkMarshaller());
+ marshallers.add(Marshallers.jdk());
marshallers.add(bin);
return marshallers;
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/binary/GridBinaryMarshallerCtxDisabledSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/binary/GridBinaryMarshallerCtxDisabledSelfTest.java
index 03d0b3752c6..e300dfc7532 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/binary/GridBinaryMarshallerCtxDisabledSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/binary/GridBinaryMarshallerCtxDisabledSelfTest.java
@@ -31,6 +31,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -128,7 +129,7 @@ public class GridBinaryMarshallerCtxDisabledSelfTest
extends GridCommonAbstractT
/** {@inheritDoc} */
@Override public JdkMarshaller jdkMarshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java
index 41dd2bc03b2..1f4fe14c8fa 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java
@@ -33,6 +33,7 @@ import
org.apache.ignite.internal.binary.streams.BinaryStreams;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -157,7 +158,7 @@ public class RawBinaryObjectExtractorTest extends
GridCommonAbstractTest {
/** {@inheritDoc} */
@Override public JdkMarshaller jdkMarshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
index c1bf64b46d7..b974f49f89b 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
@@ -51,6 +51,7 @@ import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Properties;
import java.util.Queue;
+import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.UUID;
@@ -1111,7 +1112,7 @@ public class OptimizedObjectStreamSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testExcludedClass() throws Exception {
- Class<?>[] exclClasses = U.staticField(MarshallerExclusions.class,
"EXCL_CLASSES");
+ Set<Class<?>> exclClasses = U.staticField(MarshallerExclusions.class,
"EXCL_CLASSES");
assertFalse(F.isEmpty(exclClasses));
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
index 000b208f7a3..3bd7c18923a 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Ignore;
@@ -160,7 +161,7 @@ public class GridCacheEntryMemorySizeSelfTest extends
GridCommonAbstractTest {
}
@Override public JdkMarshaller jdkMarshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
});
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
index 9db275ddd66..ce53a6a5e27 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
@@ -38,7 +38,7 @@ import
org.apache.ignite.internal.processors.cache.GridLocalConfigManager;
import org.apache.ignite.internal.processors.cache.StoredCacheData;
import
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -199,7 +199,7 @@ public class
IgnitePdsCacheConfigurationFileConsistencyCheckTest extends GridCom
* @throws IgniteCheckedException If fails.
*/
private void storeTmpCacheData(DynamicCacheDescriptor cacheDescr) throws
Exception {
- Marshaller marshaller = new JdkMarshaller();
+ Marshaller marshaller = Marshallers.jdk();
for (int i = 0; i < NODES; i++) {
IgniteEx ig = grid(i);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ServiceInfoSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ServiceInfoSelfTest.java
index 60b9531d45e..a67980f89d2 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ServiceInfoSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ServiceInfoSelfTest.java
@@ -27,6 +27,7 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.services.Service;
import org.apache.ignite.services.ServiceConfiguration;
@@ -141,7 +142,7 @@ public class ServiceInfoSelfTest {
/** */
private ServiceInfo serviceInfo(ServiceConfiguration cfg) {
try {
- JdkMarshaller marsh = new JdkMarshaller();
+ JdkMarshaller marsh = Marshallers.jdk();
byte[] srvcBytes = U.marshal(marsh, cfg.getService());
byte[] nodeFilterBytes = U.marshal(marsh, cfg.getNodeFilter());
diff --git
a/modules/core/src/test/java/org/apache/ignite/jvmtest/RegExpTest.java
b/modules/core/src/test/java/org/apache/ignite/jvmtest/RegExpTest.java
index 6add401663b..312386f8824 100644
--- a/modules/core/src/test/java/org/apache/ignite/jvmtest/RegExpTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/jvmtest/RegExpTest.java
@@ -19,8 +19,8 @@ package org.apache.ignite.jvmtest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.internal.util.typedef.internal.U;
import org.junit.Test;
/**
@@ -38,7 +38,7 @@ public class RegExpTest {
byte[] b1 = new byte[200];
byte[] b2 = normal.getBytes();
- U.arrayCopy(b2, 0, b1, 30, b2.length);
+ GridUnsafe.arrayCopy(b2, 0, b1, 30, b2.length);
CharSequence corrupt = new String(b1);
diff --git
a/modules/core/src/test/java/org/apache/ignite/lang/GridByteArrayListSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/lang/GridByteArrayListSelfTest.java
index 0c67dea93c8..3cd615b0160 100644
---
a/modules/core/src/test/java/org/apache/ignite/lang/GridByteArrayListSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/lang/GridByteArrayListSelfTest.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.apache.ignite.internal.util.GridByteArrayList;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.testframework.junits.common.GridCommonTest;
@@ -110,8 +111,8 @@ public class GridByteArrayListSelfTest extends
GridCommonAbstractTest {
byte[] arr2 = new byte[8];
- U.arrayCopy(U.intToBytes(num), 0, arr2, 0, 4);
- U.arrayCopy(U.intToBytes(num3), 0, arr2, 4, 4);
+ GridUnsafe.arrayCopy(U.intToBytes(num), 0, arr2, 0, 4);
+ GridUnsafe.arrayCopy(U.intToBytes(num3), 0, arr2, 4, 4);
assert Arrays.equals(list.array(), arr2);
diff --git
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerResourceBean.java
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerResourceBean.java
index b834eb0a059..20d01aeaa33 100644
---
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerResourceBean.java
+++
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerResourceBean.java
@@ -33,7 +33,6 @@ import org.apache.ignite.compute.ComputeLoadBalancer;
import org.apache.ignite.compute.ComputeTaskSession;
import
org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerAdapter;
import org.apache.ignite.logger.java.JavaLogger;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.thread.IgniteThreadFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
@@ -71,7 +70,7 @@ class GridMarshallerResourceBean implements Serializable {
*/
GridMarshallerResourceBean() {
log = new JavaLogger();
- marshaller = new JdkMarshaller();
+ marshaller = Marshallers.jdk();
mbeanSrv = ManagementFactory.getPlatformMBeanServer();
ses = new GridTestTaskSession();
execSvc = Executors.newSingleThreadExecutor(new
IgniteThreadFactory("testscope", "grid-marshaller"));
diff --git
a/modules/core/src/test/java/org/apache/ignite/marshaller/jdk/GridJdkMarshallerSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/marshaller/jdk/GridJdkMarshallerSelfTest.java
index ff7726dfcc4..f34baa36094 100644
---
a/modules/core/src/test/java/org/apache/ignite/marshaller/jdk/GridJdkMarshallerSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/marshaller/jdk/GridJdkMarshallerSelfTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.marshaller.jdk;
import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.testframework.junits.common.GridCommonTest;
/**
@@ -28,6 +29,6 @@ import
org.apache.ignite.testframework.junits.common.GridCommonTest;
public class GridJdkMarshallerSelfTest extends GridMarshallerAbstractTest {
/** {@inheritDoc} */
@Override protected Marshaller marshaller() {
- return new JdkMarshaller();
+ return Marshallers.jdk();
}
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/p2p/P2PScanQueryUndeployTest.java
b/modules/core/src/test/java/org/apache/ignite/p2p/P2PScanQueryUndeployTest.java
index f49c66b2c91..708dac51081 100644
---
a/modules/core/src/test/java/org/apache/ignite/p2p/P2PScanQueryUndeployTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/p2p/P2PScanQueryUndeployTest.java
@@ -33,7 +33,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.managers.communication.GridIoMessage;
import org.apache.ignite.internal.managers.deployment.GridDeploymentRequest;
-import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.lang.IgniteInClosure;
@@ -165,7 +165,7 @@ public class P2PScanQueryUndeployTest extends
GridCommonAbstractTest {
* @throws Exception if something wrong.
*/
private Set<String> igniteUtilsCachedClasses() throws Exception {
- Field f = IgniteUtils.class.getDeclaredField("classCache");
+ Field f = CommonUtils.class.getDeclaredField("classCache");
f.setAccessible(true);
diff --git
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/DiscoveryUnmarshalVulnerabilityTest.java
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/DiscoveryUnmarshalVulnerabilityTest.java
index 1cd4cc6d2b7..a184cd42fe4 100644
---
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/DiscoveryUnmarshalVulnerabilityTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/DiscoveryUnmarshalVulnerabilityTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.WithSystemProperty;
@@ -45,7 +46,7 @@ import static
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHALLER_WHITELI
@WithSystemProperty(key = IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION,
value = "false")
public class DiscoveryUnmarshalVulnerabilityTest extends
GridCommonAbstractTest {
/** Marshaller. */
- private static final JdkMarshaller MARSH = new JdkMarshaller();
+ private static final JdkMarshaller MARSH = Marshallers.jdk();
/** Shared value. */
private static final AtomicBoolean SHARED = new AtomicBoolean();
diff --git
a/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerSelfTest.java
index 75ead89642f..0897dbbfd39 100644
---
a/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerSelfTest.java
@@ -42,7 +42,7 @@ import org.apache.ignite.internal.util.GridConcurrentHashSet;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.stream.StreamMultipleTupleExtractor;
import org.apache.ignite.stream.StreamSingleTupleExtractor;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -99,7 +99,7 @@ public class SocketStreamerSelfTest extends
GridCommonAbstractTest {
@Override public void run() {
try (Socket sock = new Socket(InetAddress.getLocalHost(),
port);
OutputStream os = new
BufferedOutputStream(sock.getOutputStream())) {
- Marshaller marsh = new JdkMarshaller();
+ Marshaller marsh = Marshallers.jdk();
for (int i = 0; i < CNT; i++) {
byte[] msg = marsh.marshal(new Message(i));
@@ -128,7 +128,7 @@ public class SocketStreamerSelfTest extends
GridCommonAbstractTest {
@Override public void run() {
try (Socket sock = new Socket(InetAddress.getLocalHost(),
port);
OutputStream os = new
BufferedOutputStream(sock.getOutputStream())) {
- Marshaller marsh = new JdkMarshaller();
+ Marshaller marsh = Marshallers.jdk();
int[] values = new int[CNT];
for (int i = 0; i < CNT; i++)
@@ -199,7 +199,7 @@ public class SocketStreamerSelfTest extends
GridCommonAbstractTest {
@Override public void run() {
try (Socket sock = new Socket(InetAddress.getLocalHost(),
port);
OutputStream os = new
BufferedOutputStream(sock.getOutputStream())) {
- Marshaller marsh = new JdkMarshaller();
+ Marshaller marsh = Marshallers.jdk();
for (int i = 0; i < CNT; i++) {
byte[] msg = marsh.marshal(new Message(i));
diff --git
a/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerUnmarshalVulnerabilityTest.java
b/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerUnmarshalVulnerabilityTest.java
index 1502a5b294f..4c8e3abeb61 100644
---
a/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerUnmarshalVulnerabilityTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/stream/socket/SocketStreamerUnmarshalVulnerabilityTest.java
@@ -37,7 +37,7 @@ import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.stream.StreamSingleTupleExtractor;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.WithSystemProperty;
@@ -184,7 +184,7 @@ public class SocketStreamerUnmarshalVulnerabilityTest
extends GridCommonAbstract
try (Socket sock = new Socket(InetAddress.getLocalHost(),
port);
OutputStream os = new
BufferedOutputStream(sock.getOutputStream())) {
- Marshaller marsh = new JdkMarshaller();
+ Marshaller marsh = Marshallers.jdk();
byte[] msg = marsh.marshal(new Exploit());
diff --git
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index 8790dc9d5a7..d3d9efffaa5 100755
---
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -141,6 +141,7 @@ import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.marshaller.Marshaller;
import org.apache.ignite.marshaller.MarshallerContext;
import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.mxbean.MXBeanDescription;
import org.apache.ignite.resources.IgniteInstanceResource;
@@ -182,7 +183,7 @@ public abstract class GridCommonAbstractTest extends
GridAbstractTest {
protected static final int SERVICE_DEPLOYMENT_WAIT_TIMEOUT = 10_000;
/** */
- public static final JdkMarshaller TEST_JDK_MARSHALLER = new
JdkMarshaller();
+ public static final JdkMarshaller TEST_JDK_MARSHALLER = Marshallers.jdk();
/**
* @param startGrid If {@code true}, then grid node will be auto-started.
diff --git
a/modules/unsafe/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
index 8b5a5adda7d..a4ff4c7d38a 100644
---
a/modules/unsafe/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
+++
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
@@ -1573,6 +1573,19 @@ public abstract class GridUnsafe {
return (size + (OBJ_ALIGN - 1L)) & (-OBJ_ALIGN);
}
+ /**
+ * @param src Buffer to copy from (length included).
+ * @param off Offset in source buffer.
+ * @param resBuf Result buffer.
+ * @param resOff Result offset.
+ * @param len Number of bytes to copy from src to resBuf.
+ */
+ public static void arrayCopy(byte[] src, int off, byte[] resBuf, int
resOff, int len) {
+ assert resBuf.length >= resOff + len;
+
+ copyMemory(src, BYTE_ARR_OFF + off, resBuf, BYTE_ARR_OFF + resOff,
len);
+ }
+
/**
* Returns unaligned flag.
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
similarity index 98%
rename from
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
rename to
modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
index c3cdc156655..ae3b95a3aaf 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
+++
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayInputStream.java
@@ -19,8 +19,8 @@ package org.apache.ignite.internal.util.io;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
/**
* This class defines input stream backed by byte array.
@@ -114,7 +114,7 @@ public class GridByteArrayInputStream extends InputStream {
if (len <= 0)
return 0;
- U.arrayCopy(buf, pos, b, off, len);
+ GridUnsafe.arrayCopy(buf, pos, b, off, len);
pos += len;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
similarity index 98%
rename from
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
rename to
modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
index d14030bb913..908f8fb8baf 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
+++
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridByteArrayOutputStream.java
@@ -22,8 +22,8 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
+import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
/**
* This class defines output stream backed by byte array.
@@ -102,7 +102,7 @@ public class GridByteArrayOutputStream extends OutputStream
{
if (newCnt > buf.length)
buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newCnt));
- U.arrayCopy(b, off, buf, cnt, len);
+ GridUnsafe.arrayCopy(b, off, buf, cnt, len);
cnt = newCnt;
}
diff --git
a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
index 588082283fd..74f78083b09 100644
---
a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
+++
b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
@@ -38,6 +38,7 @@ import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.internal.util.typedef.T2;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.yardstick.IgniteAbstractBenchmark;
import org.apache.ignite.yardstick.cache.model.SampleValue;
@@ -127,7 +128,7 @@ public abstract class IgniteCacheAbstractBenchmark<K, V>
extends IgniteAbstractB
List<CacheConfiguration> toCreate = new ArrayList<>();
for (int i = 0; i < caches - 1; i++) {
- JdkMarshaller marsh = new JdkMarshaller();
+ JdkMarshaller marsh = Marshallers.jdk();
CacheConfiguration ccfg0 =
marsh.unmarshal(marsh.marshal(ccfg), null);