Repository: ignite Updated Branches: refs/heads/ignite-1526 [created] e7a0b931c
ignite-1526 IBM JDK is not fully supported by the platfrom Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e7a0b931 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e7a0b931 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e7a0b931 Branch: refs/heads/ignite-1526 Commit: e7a0b931c795a0436a45d7dffdd65f6400b0f13b Parents: fd091c8 Author: agura <[email protected]> Authored: Tue Sep 29 17:45:06 2015 +0300 Committer: agura <[email protected]> Committed: Thu Oct 1 18:15:40 2015 +0300 ---------------------------------------------------------------------- .../internal/portable/PortableContext.java | 7 + .../portable/api/PortableMarshaller.java | 16 +- .../ignite/internal/util/GridJavaProcess.java | 15 +- .../ignite/internal/util/lang/GridFunc.java | 12 ++ .../apache/ignite/marshaller/Marshaller.java | 2 +- .../optimized/OptimizedClassDescriptor.java | 6 +- .../optimized/OptimizedMarshallerUtils.java | 13 +- .../CacheNoValueClassOnServerNodeTest.java | 2 +- .../testframework/junits/GridAbstractTest.java | 42 ++++- .../junits/IgniteTestResources.java | 8 +- .../junits/common/GridCommonAbstractTest.java | 5 +- .../multijvm/IgniteCacheProcessProxy.java | 173 ++++++++++--------- .../junits/multijvm/IgniteNodeRunner.java | 39 ++--- .../junits/multijvm/IgniteProcessProxy.java | 13 +- .../cache/CacheConfigurationP2PTest.java | 3 + .../ignite/tools/classgen/ClassesGenerator.java | 21 ++- 16 files changed, 221 insertions(+), 156 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java index 2ee96b7..1ad42ab 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java @@ -967,6 +967,9 @@ public class PortableContext implements Externalizable { } } + /** + * Basic class ID mapper. + */ private static class BasicClassIdMapper implements PortableIdMapper { /** {@inheritDoc} */ @Override public int typeId(String clsName) { @@ -1121,6 +1124,10 @@ public class PortableContext implements Externalizable { /** Whether the following type is registered in a cache or not */ private final boolean registered; + /** + * @param id Id. + * @param registered Registered. + */ public Type(int id, boolean registered) { this.id = id; this.registered = registered; http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java index de0df8d..eebcf5a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java @@ -29,12 +29,6 @@ import org.apache.ignite.internal.portable.GridPortableMarshaller; import org.apache.ignite.internal.portable.PortableContext; import org.apache.ignite.marshaller.AbstractMarshaller; import org.apache.ignite.marshaller.MarshallerContext; -import org.apache.ignite.internal.portable.api.PortableException; -import org.apache.ignite.internal.portable.api.PortableIdMapper; -import org.apache.ignite.internal.portable.api.PortableObject; -import org.apache.ignite.internal.portable.api.PortableProtocolVersion; -import org.apache.ignite.internal.portable.api.PortableSerializer; -import org.apache.ignite.internal.portable.api.PortableTypeConfiguration; import org.jetbrains.annotations.Nullable; /** @@ -96,7 +90,7 @@ public class PortableMarshaller extends AbstractMarshaller { private boolean useTs = true; /** Whether to convert string to bytes using UTF-8 encoding. */ - private boolean convertString = true; + private boolean convertStr = true; /** Meta data enabled flag. */ private boolean metaDataEnabled = true; @@ -211,7 +205,7 @@ public class PortableMarshaller extends AbstractMarshaller { * @return Flag indicating whether string must be converted to byte array using UTF-8 encoding. */ public boolean isConvertStringToBytes() { - return convertString; + return convertStr; } /** @@ -219,10 +213,10 @@ public class PortableMarshaller extends AbstractMarshaller { * <p> * Default value is {@code true}. * - * @param convertString Flag indicating whether string must be converted to byte array using UTF-8 encoding. + * @param convertStr Flag indicating whether string must be converted to byte array using UTF-8 encoding. */ - public void setConvertStringToBytes(boolean convertString) { - this.convertString = convertString; + public void setConvertStringToBytes(boolean convertStr) { + this.convertStr = convertStr; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java index 92c20fe..b5215c6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java @@ -89,7 +89,7 @@ public final class GridJavaProcess { */ public static GridJavaProcess exec(Class cls, String params, @Nullable IgniteLogger log, @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC) throws Exception { - return exec(cls.getCanonicalName(), params, log, printC, procKilledC, null, null); + return exec(cls.getCanonicalName(), params, log, printC, procKilledC, null, null, null); } /** @@ -108,7 +108,7 @@ public final class GridJavaProcess { public static GridJavaProcess exec(Class cls, String params, @Nullable IgniteLogger log, @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC, @Nullable Collection<String> jvmArgs, @Nullable String cp) throws Exception { - return exec(cls.getCanonicalName(), params, log, printC, procKilledC, jvmArgs, cp); + return exec(cls.getCanonicalName(), params, log, printC, procKilledC, null, jvmArgs, cp); } /** @@ -116,17 +116,17 @@ public final class GridJavaProcess { * * @param clsName Class with main() method to be run. * @param params main() method parameters. + * @param log Log to use. * @param printC Optional closure to be called each time wrapped process prints line to system.out or system.err. * @param procKilledC Optional closure to be called when process termination is detected. - * @param log Log to use. + * @param javaHome Java home location. The process will be started under given JVM. * @param jvmArgs JVM arguments to use. - * @param cp Additional classpath. - * @return Wrapper around {@link Process} + * @param cp Additional classpath. @return Wrapper around {@link Process} * @throws Exception If any problem occurred. */ public static GridJavaProcess exec(String clsName, String params, @Nullable IgniteLogger log, @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC, - @Nullable Collection<String> jvmArgs, @Nullable String cp) throws Exception { + @Nullable String javaHome, @Nullable Collection<String> jvmArgs, @Nullable String cp) throws Exception { if (!(U.isLinux() || U.isMacOs() || U.isWindows())) throw new Exception("Your OS is not supported."); @@ -140,7 +140,8 @@ public final class GridJavaProcess { List<String> procCommands = new ArrayList<>(); - String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; + String javaBin = (javaHome == null ? System.getProperty("java.home") : javaHome) + + File.separator + "bin" + File.separator + "java"; procCommands.add(javaBin); procCommands.addAll(jvmArgs == null ? U.jvmArgs() : jvmArgs); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java index ffeeca0..43bc5f3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java @@ -103,6 +103,9 @@ public class GridFunc { /** */ private static final IgniteClosure IDENTITY = new C1() { + /** */ + private static final long serialVersionUID = -6338573080046225172L; + @Override public Object apply(Object o) { return o; } @@ -1196,6 +1199,9 @@ public class GridFunc { A.notNull(nodeId, "nodeId"); return new P1<T>() { + /** */ + private static final long serialVersionUID = -7082730222779476623L; + @Override public boolean apply(ClusterNode e) { return e.id().equals(nodeId); } @@ -1705,6 +1711,9 @@ public class GridFunc { assert c != null; return new GridSerializableList<T2>() { + /** */ + private static final long serialVersionUID = 3126625219739967068L; + @Override public T2 get(int idx) { return trans.apply(c.get(idx)); } @@ -1766,6 +1775,9 @@ public class GridFunc { assert m != null; return isEmpty(p) || isAlwaysTrue(p) ? m : new GridSerializableMap<K, V>() { + /** */ + private static final long serialVersionUID = 5531745605372387948L; + /** Entry predicate. */ private IgnitePredicate<Entry<K, V>> ep = new P1<Map.Entry<K, V>>() { @Override public boolean apply(Entry<K, V> e) { http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java index 3e815fd..a76daa8 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java @@ -92,7 +92,7 @@ public interface Marshaller { public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException; /** - * Unmarshals object from the output stream using given class loader. + * Unmarshals object from the input stream using given class loader. * This method should not close given input stream. * * @param <T> Type of unmarshalled object. http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java index a4f4cdc..2ba0c01 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java @@ -820,10 +820,14 @@ class OptimizedClassDescriptor { * @throws IOException In case of error. */ private void verifyChecksum(short checksum) throws ClassNotFoundException, IOException { - if (checksum != this.checksum) + if (checksum != this.checksum) { + + System.out.println("CHECK: " + this.cls.getName() + " " + this.checksum + " " + checksum); + throw new ClassNotFoundException("Optimized stream class checksum mismatch " + "(is same version of marshalled class present on all nodes?) " + "[expected=" + this.checksum + ", actual=" + checksum + ", cls=" + cls + ']'); + } } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java index 4abbd04..82c7517 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java @@ -42,6 +42,10 @@ class OptimizedMarshallerUtils { /** */ private static final Unsafe UNSAFE = GridUnsafe.unsafe(); + /** Use default {@code serialVersionUid} for {@link Serializable} classes. */ + private static final boolean USE_DFLT_SUID = + Boolean.valueOf(System.getProperty("ignite.marsh.optimized.useDefaultSUID", Boolean.FALSE.toString())); + /** */ static final long HASH_SET_MAP_OFF; @@ -283,8 +287,13 @@ class OptimizedMarshallerUtils { */ @SuppressWarnings("ForLoopReplaceableByForEach") static short computeSerialVersionUid(Class cls, List<Field> fields) throws IOException { - if (Serializable.class.isAssignableFrom(cls) && !Enum.class.isAssignableFrom(cls)) - return (short)ObjectStreamClass.lookup(cls).getSerialVersionUID(); + if (USE_DFLT_SUID && Serializable.class.isAssignableFrom(cls) && !Enum.class.isAssignableFrom(cls)) { + short uid = (short)ObjectStreamClass.lookup(cls).getSerialVersionUID(); + + System.out.println("SUID: " + cls.getName() + " " + uid); + + return uid; + } MessageDigest md; http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheNoValueClassOnServerNodeTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheNoValueClassOnServerNodeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheNoValueClassOnServerNodeTest.java index da694b5..225ab29 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheNoValueClassOnServerNodeTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheNoValueClassOnServerNodeTest.java @@ -111,7 +111,7 @@ public class CacheNoValueClassOnServerNodeTest extends GridCommonAbstractTest { } }, null, - jvmArgs, + null, jvmArgs, cp ); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java index f54fe06..10af3b9 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java @@ -1546,15 +1546,7 @@ public abstract class GridAbstractTest extends TestCase { * @param job Job. */ public static <R> R executeRemotely(IgniteProcessProxy proxy, final TestIgniteCallable<R> job) { - final UUID id = proxy.getId(); - - return proxy.remoteCompute().call(new IgniteCallable<R>() { - @Override public R call() throws Exception { - Ignite ignite = Ignition.ignite(id); - - return job.call(ignite); - } - }); + return proxy.remoteCompute().call(new TestRemoteTask<>(proxy.getId(), job)); } /** @@ -1571,6 +1563,8 @@ public abstract class GridAbstractTest extends TestCase { final String cacheName = cache.getName(); return proxy.remoteCompute().call(new IgniteCallable<R>() { + private static final long serialVersionUID = -3868429485920845137L; + @Override public R call() throws Exception { Ignite ignite = Ignition.ignite(id); IgniteCache<K,V> cache = ignite.cache(cacheName); @@ -1781,6 +1775,36 @@ public abstract class GridAbstractTest extends TestCase { } /** + * Remote computation task. + */ + private static class TestRemoteTask<R> implements IgniteCallable<R> { + /** */ + private static final long serialVersionUID = 0L; + + /** Node ID. */ + private final UUID id; + + /** Job. */ + private final TestIgniteCallable<R> job; + + /** + * @param id Id. + * @param job Job. + */ + public TestRemoteTask(UUID id, TestIgniteCallable<R> job) { + this.id = id; + this.job = job; + } + + /** {@inheritDoc} */ + @Override public R call() throws Exception { + Ignite ignite = Ignition.ignite(id); + + return job.call(ignite); + } + } + + /** * Test counters. */ protected class TestCounters { http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java index eb72252..406318f 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java @@ -42,6 +42,9 @@ import org.jetbrains.annotations.Nullable; * Test resources for injection. */ public class IgniteTestResources { + /** Marshaller class name. */ + public static final String MARSH_CLASS_NAME = "test.marshaller.class"; + /** */ private static final IgniteLogger rootLog = new GridTestLog4jLogger(false); @@ -230,8 +233,9 @@ public class IgniteTestResources { * @throws IgniteCheckedException If failed. */ @SuppressWarnings("unchecked") - public synchronized Marshaller getMarshaller() throws IgniteCheckedException { - String marshallerName = GridTestProperties.getProperty(GridTestProperties.MARSH_CLASS_NAME); + public static synchronized Marshaller getMarshaller() throws IgniteCheckedException { + String marshallerName = + System.getProperty(MARSH_CLASS_NAME, GridTestProperties.getProperty(GridTestProperties.MARSH_CLASS_NAME)); Marshaller marsh; http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java ---------------------------------------------------------------------- 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 4bcf51e..c86fea1 100644 --- 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 @@ -285,10 +285,13 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest { * @throws Exception If failed. */ @SuppressWarnings("unchecked") - protected static <K> void loadAll(Cache<K, ?> cache, final Set<K> keys, final boolean replaceExistingValues) throws Exception { + protected static <K> void loadAll(Cache<K, ?> cache, final Set<K> keys, final boolean replaceExistingValues) + throws Exception { IgniteCache<K, Object> cacheCp = (IgniteCache<K, Object>)cache; GridAbstractTest.executeOnLocalOrRemoteJvm(cacheCp, new TestCacheRunnable<K, Object>() { + private static final long serialVersionUID = -3030833765012500545L; + @Override public void run(Ignite ignite, IgniteCache<K, Object> cache) throws Exception { final AtomicReference<Exception> ex = new AtomicReference<>(); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java index ac8c5af..e330f4e 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java @@ -82,7 +82,7 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** * @param name Name. - * @param async + * @param async Async flag. * @param proxy Ignite Process Proxy. */ public IgniteCacheProcessProxy(String name, boolean async, IgniteProcessProxy proxy) { @@ -98,8 +98,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { * * @return Cache. */ - private IgniteCache<Object, Object> cache() { - IgniteCache cache = Ignition.ignite(gridId).cache(cacheName); + private IgniteCache<K, V> cache() { + IgniteCache<K, V> cache = Ignition.ignite(gridId).cache(cacheName); if (isAsync) cache = cache.withAsync(); @@ -125,11 +125,9 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public <C extends Configuration<K, V>> C getConfiguration(final Class<C> clazz) { - final Class cl = clazz; - - return (C)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - return cache().getConfiguration(cl); + return compute.call(new IgniteCallable<C>() { + @Override public C call() throws Exception { + return cache().getConfiguration(clazz); } }); } @@ -149,6 +147,7 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { throw new UnsupportedOperationException("Method should be supported."); } + /** {@inheritDoc} */ @Override public IgniteCache<K, V> withNoRetries() { throw new UnsupportedOperationException("Method should be supported."); } @@ -159,20 +158,19 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { } /** {@inheritDoc} */ - @Override public void localLoadCache(@Nullable final IgniteBiPredicate<K, V> p, @Nullable final Object... args) throws CacheException { - final IgniteBiPredicate pCopy = p; - + @Override public void localLoadCache(@Nullable final IgniteBiPredicate<K, V> p, @Nullable final Object... args) + throws CacheException { compute.run(new IgniteRunnable() { @Override public void run() { - cache().localLoadCache(pCopy, args); + cache().localLoadCache(p, args); } }); } /** {@inheritDoc} */ @Override public V getAndPutIfAbsent(final K key, final V val) throws CacheException { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().getAndPutIfAbsent(key, val); } }); @@ -203,14 +201,13 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { } /** {@inheritDoc} */ - @SuppressWarnings("unchecked") @Override public Iterable<Entry<K, V>> localEntries(final CachePeekMode... peekModes) throws CacheException { - return (Iterable<Entry<K, V>>)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - Collection<Entry> res = new ArrayList<>(); + return compute.call(new IgniteCallable<Iterable<Entry<K, V>>>() { + @Override public Iterable<Entry<K, V>> call() throws Exception { + Collection<Entry<K, V>> res = new ArrayList<>(); - for (Entry e : cache().localEntries(peekModes)) - res.add(new CacheEntryImpl(e.getKey(), e.getValue())); + for (Entry<K, V> e : cache().localEntries(peekModes)) + res.add(new CacheEntryImpl<>(e.getKey(), e.getValue())); return res; } @@ -233,8 +230,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public V localPeek(final K key, final CachePeekMode... peekModes) { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().localPeek(key, peekModes); } }); @@ -247,8 +244,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public int size(final CachePeekMode... peekModes) throws CacheException { - return (int)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Integer>() { + @Override public Integer call() throws Exception { return cache().size(peekModes); } }); @@ -256,23 +253,25 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public int localSize(final CachePeekMode... peekModes) { - return (int)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Integer>() { + @Override public Integer call() throws Exception { return cache().localSize(peekModes); } }); } /** {@inheritDoc} */ - @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll(Map<? extends K, ? extends EntryProcessor<K, V, T>> map, - Object... args) { + @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll( + Map<? extends K, ? extends EntryProcessor<K, V, T>> map, + Object... args) + { throw new UnsupportedOperationException("Method should be supported."); } /** {@inheritDoc} */ @Override public V get(final K key) { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().get(key); } }); @@ -280,16 +279,17 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public Map<K, V> getAll(final Set<? extends K> keys) { - return (Map<K, V>)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Map<K, V>>() { + @Override public Map<K, V> call() throws Exception { return cache().getAll(keys); } }); } + /** {@inheritDoc} */ @Override public Map<K, V> getAllOutTx(final Set<? extends K> keys) { - return (Map<K, V>)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Map<K, V>>() { + @Override public Map<K, V> call() throws Exception { return cache().getAllOutTx(keys); } }); @@ -297,29 +297,29 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean containsKey(final K key) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().containsKey(key); } }); } /** {@inheritDoc} */ - @Override public void loadAll(Set<? extends K> keys, boolean replaceExistingValues, CompletionListener completionLsnr) { + @Override public void loadAll(Set<? extends K> keys, boolean replaceExistVals, CompletionListener completionLsnr) { throw new UnsupportedOperationException("Oparetion can't be supported automatically."); } /** {@inheritDoc} */ @Override public boolean containsKeys(final Set<? extends K> keys) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().containsKeys(keys); } }); } /** {@inheritDoc} */ - @Override public void put(final K key, final V val) {; + @Override public void put(final K key, final V val) { compute.run(new IgniteRunnable() { @Override public void run() { cache().put(key, val); @@ -329,8 +329,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public V getAndPut(final K key, final V val) { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().getAndPut(key, val); } }); @@ -339,6 +339,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public void putAll(final Map<? extends K, ? extends V> map) { compute.run(new IgniteRunnable() { + private static final long serialVersionUID = 0L; + @Override public void run() { cache().putAll(map); } @@ -347,8 +349,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean putIfAbsent(final K key, final V val) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().putIfAbsent(key, val); } }); @@ -356,8 +358,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean remove(final K key) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().remove(key); } }); @@ -365,8 +367,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean remove(final K key, final V oldVal) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().remove(key, oldVal); } }); @@ -374,8 +376,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public V getAndRemove(final K key) { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().getAndRemove(key); } }); @@ -383,8 +385,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean replace(final K key, final V oldVal, final V newVal) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().replace(key, oldVal, newVal); } }); @@ -392,8 +394,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean replace(final K key, final V val) { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().replace(key, val); } }); @@ -401,8 +403,8 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public V getAndReplace(final K key, final V val) { - return (V)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<V>() { + @Override public V call() throws Exception { return cache().getAndReplace(key, val); } }); @@ -421,7 +423,7 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { @Override public void removeAll() { compute.run(new IgniteRunnable() { @Override public void run() { - IgniteCache<Object, Object> cache = cache(); + IgniteCache<K, V> cache = cache(); cache.removeAll(); @@ -477,40 +479,40 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { } /** {@inheritDoc} */ - @Override public <T> T invoke(final K key, final EntryProcessor<K, V, T> entryProcessor, final Object... arguments) { - return (T)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - return cache().invoke(key, - (EntryProcessor<Object, Object, Object>)entryProcessor, arguments); + @Override public <T> T invoke(final K key, final EntryProcessor<K, V, T> processor, final Object... args) { + return compute.call(new IgniteCallable<T>() { + @Override public T call() throws Exception { + return cache().invoke(key, processor, args); } }); } /** {@inheritDoc} */ - @Override public <T> T invoke(final K key, final CacheEntryProcessor<K, V, T> entryProcessor, final Object... arguments) { - return (T)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - return cache().invoke(key, - (CacheEntryProcessor<Object, Object, Object>)entryProcessor, arguments); + @Override public <T> T invoke(final K key, final CacheEntryProcessor<K, V, T> processor, final Object... args) { + return compute.call(new IgniteCallable<T>() { + @Override public T call() throws Exception { + return cache().invoke(key, processor, args); } }); } /** {@inheritDoc} */ - @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll(final Set<? extends K> keys, final EntryProcessor<K, V, T> entryProcessor, - final Object... args) { - return (Map<K, EntryProcessorResult<T>>)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - return cache().invokeAll(keys, - (EntryProcessor<Object, Object, Object>)entryProcessor, args); + @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll( + final Set<? extends K> keys, + final EntryProcessor<K, V, T> processor, + final Object... args) + { + return compute.call(new IgniteCallable<Map<K, EntryProcessorResult<T>>>() { + @Override public Map<K, EntryProcessorResult<T>> call() throws Exception { + return cache().invokeAll(keys, processor, args); } }); } /** {@inheritDoc} */ @Override public String getName() { - return (String)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<String>() { + @Override public String call() throws Exception { return cache().getName(); } }); @@ -541,21 +543,22 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { /** {@inheritDoc} */ @Override public boolean isClosed() { - return (boolean)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<Boolean>() { + @Override public Boolean call() throws Exception { return cache().isClosed(); } }); } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public <T> T unwrap(final Class<T> clazz) { if (Ignite.class.equals(clazz)) return (T)igniteProxy; try { - return (T)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { + return compute.call(new IgniteCallable<T>() { + @Override public T call() throws Exception { return cache().unwrap(clazz); } }); @@ -566,22 +569,22 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> { } /** {@inheritDoc} */ - @Override public void registerCacheEntryListener(CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { + @Override public void registerCacheEntryListener(CacheEntryListenerConfiguration<K, V> cacheEntryLsnrConfiguration) { throw new UnsupportedOperationException("Method should be supported."); } /** {@inheritDoc} */ - @Override public void deregisterCacheEntryListener(CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) { + @Override public void deregisterCacheEntryListener(CacheEntryListenerConfiguration<K, V> cacheEntryLsnrConfiguration) { throw new UnsupportedOperationException("Method should be supported."); } /** {@inheritDoc} */ @Override public Iterator<Entry<K, V>> iterator() { - final Collection<Entry<K, V>> col = (Collection<Entry<K, V>>)compute.call(new IgniteCallable<Object>() { - @Override public Object call() throws Exception { - Collection res = new ArrayList(); + final Collection<Entry<K, V>> col = compute.call(new IgniteCallable<Collection<Entry<K, V>>>() { + @Override public Collection<Entry<K, V>> call() throws Exception { + Collection<Entry<K, V>> res = new ArrayList<>(); - for (Object o : cache()) + for (Entry<K, V> o : cache()) res.add(o); return res; http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteNodeRunner.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteNodeRunner.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteNodeRunner.java index f46e8e9..0597eda 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteNodeRunner.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteNodeRunner.java @@ -25,13 +25,12 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import org.apache.ignite.Ignite; -import org.apache.ignite.IgniteException; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.Ignition; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; @@ -39,8 +38,9 @@ import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfT import org.apache.ignite.internal.util.GridJavaProcess; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.marshaller.optimized.OptimizedMarshaller; +import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.testframework.junits.IgniteTestResources; import sun.jvmstat.monitor.HostIdentifier; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; @@ -99,30 +99,6 @@ public class IgniteNodeRunner { public static String storeToFile(IgniteConfiguration cfg) throws IOException { String fileName = IGNITE_CONFIGURATION_FILE + cfg.getNodeId(); - // Check marshaller configuration, because read configuration method expect specific marshaller. - if (cfg.getMarshaller() instanceof OptimizedMarshaller){ - OptimizedMarshaller marsh = (OptimizedMarshaller)cfg.getMarshaller(); - - try { - Field isRequireFiled = marsh.getClass().getDeclaredField("requireSer"); - - isRequireFiled.setAccessible(true); - - boolean isRequireSer = isRequireFiled.getBoolean(marsh); - - if (isRequireSer) - throw new UnsupportedOperationException("Unsupported marshaller configuration. " + - "readCfgFromFileAndDeleteFile method expect " + OptimizedMarshaller.class.getSimpleName() + - "with requireSerializeble flag in 'false'."); - } - catch (NoSuchFieldException|IllegalAccessException e) { - throw new IgniteException("Failed to check filed of " + OptimizedMarshaller.class.getSimpleName(), e); - } - } - else - throw new UnsupportedOperationException("Unsupported marshaller. " + - "readCfgFromFileAndDeleteFile method expect " + OptimizedMarshaller.class.getSimpleName()); - try(OutputStream out = new BufferedOutputStream(new FileOutputStream(fileName))) { cfg.setMBeanServer(null); cfg.setMarshaller(null); @@ -143,11 +119,16 @@ public class IgniteNodeRunner { * @throws IOException If failed. * @see #storeToFile(IgniteConfiguration) */ - private static IgniteConfiguration readCfgFromFileAndDeleteFile(String fileName) throws IOException { + private static IgniteConfiguration readCfgFromFileAndDeleteFile(String fileName) + throws IOException, IgniteCheckedException { try(BufferedReader cfgReader = new BufferedReader(new FileReader(fileName))) { IgniteConfiguration cfg = (IgniteConfiguration)new XStream().fromXML(cfgReader); - cfg.setMarshaller(new OptimizedMarshaller(false)); + Marshaller marsh = IgniteTestResources.getMarshaller(); + + cfg.setMarshaller(marsh); + + X.println("Configured marshaller class: " + marsh.getClass().getName()); TcpDiscoverySpi disco = new TcpDiscoverySpi(); disco.setIpFinder(GridCacheAbstractFullApiSelfTest.LOCAL_IP_FINDER); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java index ec7dab7..a84c3654 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java @@ -41,7 +41,6 @@ import org.apache.ignite.IgniteFileSystem; import org.apache.ignite.IgniteIllegalStateException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.IgniteMessaging; -import org.apache.ignite.internal.portable.api.IgnitePortables; import org.apache.ignite.IgniteQueue; import org.apache.ignite.IgniteScheduler; import org.apache.ignite.IgniteServices; @@ -62,6 +61,7 @@ import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.cluster.IgniteClusterEx; +import org.apache.ignite.internal.portable.api.IgnitePortables; import org.apache.ignite.internal.processors.cache.GridCacheUtilityKey; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; import org.apache.ignite.internal.processors.hadoop.Hadoop; @@ -78,6 +78,7 @@ import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.lang.IgniteRunnable; import org.apache.ignite.plugin.IgnitePlugin; import org.apache.ignite.plugin.PluginNotFoundException; +import org.apache.ignite.testframework.junits.IgniteTestResources; import org.jetbrains.annotations.Nullable; /** @@ -88,6 +89,9 @@ public class IgniteProcessProxy implements IgniteEx { /** Grid proxies. */ private static final transient ConcurrentMap<String, IgniteProcessProxy> gridProxies = new ConcurrentHashMap<>(); + /** Property that specify alternative {@code JAVA_HOME}. */ + private static final String TEST_MULTIJVM_JAVA_HOME = "test.multijvm.java.home"; + /** Jvm process with ignite instance. */ private final transient GridJavaProcess proc; @@ -121,7 +125,9 @@ public class IgniteProcessProxy implements IgniteEx { Collection<String> filteredJvmArgs = new ArrayList<>(); for (String arg : jvmArgs) { - if(!arg.toLowerCase().startsWith("-agentlib")) + if(arg.startsWith("-Xmx") || arg.startsWith("-Xms") || + arg.startsWith("-cp") || arg.startsWith("-classpath") || + arg.startsWith("-D" + IgniteTestResources.MARSH_CLASS_NAME)) filteredJvmArgs.add(arg); } @@ -130,7 +136,7 @@ public class IgniteProcessProxy implements IgniteEx { locJvmGrid.events().localListen(new NodeStartedListener(id, rmtNodeStartedLatch), EventType.EVT_NODE_JOINED); proc = GridJavaProcess.exec( - IgniteNodeRunner.class, + IgniteNodeRunner.class.getCanonicalName(), cfgFileName, // Params. this.log, // Optional closure to be called each time wrapped process prints line to system.out or system.err. @@ -140,6 +146,7 @@ public class IgniteProcessProxy implements IgniteEx { } }, null, + System.getProperty(TEST_MULTIJVM_JAVA_HOME), filteredJvmArgs, // JVM Args. System.getProperty("surefire.test.class.path") ); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java index 5298dd4..3777154 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java @@ -103,6 +103,7 @@ public class CacheConfigurationP2PTest extends GridCommonAbstractTest { } }, null, + null, jvmArgs, null ); @@ -119,6 +120,7 @@ public class CacheConfigurationP2PTest extends GridCommonAbstractTest { } }, null, + null, jvmArgs, null ); @@ -139,6 +141,7 @@ public class CacheConfigurationP2PTest extends GridCommonAbstractTest { } }, null, + null, jvmArgs, cp ); http://git-wip-us.apache.org/repos/asf/ignite/blob/e7a0b931/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java ---------------------------------------------------------------------- diff --git a/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java b/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java index 0b10a75..7f0bd78 100644 --- a/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java +++ b/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java @@ -83,6 +83,9 @@ public class ClassesGenerator { private final Collection<String> errs = new ArrayList<>(); /** */ + private final Collection<String> warns = new ArrayList<>(); + + /** */ private final String basePath; /** */ @@ -125,6 +128,15 @@ public class ClassesGenerator { throw new Exception(sb.toString().trim()); } + if (!warns.isEmpty()) { + StringBuilder sb = new StringBuilder("Failed to generate classnames.properties due to errors:\n"); + + for (String err : warns) + sb.append("SUID ").append(err).append('\n'); + + System.out.println(sb); + } + PrintStream out = new PrintStream(new File(basePath, (fileName == null || fileName.isEmpty()) ? DEFAULT_FILE_PATH : META_INF + fileName)); @@ -209,8 +221,7 @@ public class ClassesGenerator { Class<?> cls = Class.forName(clsName, false, ldr); if (Serializable.class.isAssignableFrom(cls) && !AbstractQueuedSynchronizer.class.isAssignableFrom(cls)) { - if (!cls.isInterface() && !Modifier.isAbstract(cls.getModifiers()) && !cls.isEnum() && - !cls.getSimpleName().isEmpty()) { + if (!cls.isInterface() && !Modifier.isAbstract(cls.getModifiers()) && !cls.isEnum()) { try { Field field = cls.getDeclaredField("serialVersionUID"); @@ -226,10 +237,12 @@ public class ClassesGenerator { errs.add("serialVersionUID field is not final in class: " + cls.getName()); } catch (NoSuchFieldException ignored) { - errs.add("No serialVersionUID field in class: " + cls.getName()); + Collection<String> dst = cls.getSimpleName().isEmpty() ? warns : errs; + + dst.add("No serialVersionUID field in class: " + cls.getName()); } - if (Externalizable.class.isAssignableFrom(cls)) { + if (Externalizable.class.isAssignableFrom(cls) && !cls.getSimpleName().isEmpty()) { try { Constructor<?> cons = cls.getConstructor();
