IGNITE-141 - Marshallers refactoring

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9d63a88d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9d63a88d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9d63a88d

Branch: refs/heads/ignite-410
Commit: 9d63a88d8c052b7abdcf14f9c05ba36d9b25f992
Parents: cc32cce
Author: Valentin Kulichenko <vkuliche...@gridgain.com>
Authored: Fri Mar 6 15:10:31 2015 -0800
Committer: Valentin Kulichenko <vkuliche...@gridgain.com>
Committed: Fri Mar 6 15:10:31 2015 -0800

----------------------------------------------------------------------
 .../ignite/internal/ClassesGenerator.java       |   60 +-
 .../internal/MarshallerContextAdapter.java      |   47 +-
 .../ignite/internal/MarshallerContextImpl.java  |    4 +-
 .../ignite/internal/classnames-jdk.properties   |  325 ----
 .../ignite/internal/classnames.properties       | 1547 ------------------
 .../GridClientOptimizedMarshaller.java          |    3 +-
 .../ignite/internal/util/IgniteUtils.java       |   30 -
 .../optimized/OptimizedClassDescriptor.java     |    2 +-
 .../META-INF/classnames-jdk.properties          |  325 ++++
 .../resources/META-INF/classnames.properties    | 1547 ++++++++++++++++++
 .../marshaller/MarshallerContextTestImpl.java   |   41 +-
 .../config/benchmark-multicast.properties       |   24 +-
 12 files changed, 1955 insertions(+), 2000 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9d63a88d/modules/core/src/main/java/org/apache/ignite/internal/ClassesGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/ClassesGenerator.java 
b/modules/core/src/main/java/org/apache/ignite/internal/ClassesGenerator.java
index 4d06dea..6a03f0a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/ClassesGenerator.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/ClassesGenerator.java
@@ -30,10 +30,10 @@ import java.util.jar.*;
  */
 public class ClassesGenerator {
     /** */
-    private static final String DFLT_BASE_PATH = U.getIgniteHome() + 
"/modules/core/src/main/java";
+    private static final String FILE_PATH = "META-INF/classnames.properties";
 
     /** */
-    private static final String FILE_PATH = 
"org/apache/ignite/internal/classnames.properties";
+    private static final String DFLT_BASE_PATH = U.getIgniteHome() + 
"/modules/core/src/main/resources";
 
     /** */
     private static final String HEADER =
@@ -55,7 +55,7 @@ public class ClassesGenerator {
         "#";
 
     /** */
-    private static final String[] INCLUDED_PACKAGES = {
+    private static final String[] PACKAGES = {
         "org.apache.ignite",
         "org.jdk8.backport",
         "org.pcollections",
@@ -69,26 +69,9 @@ public class ClassesGenerator {
     public static void main(String[] args) throws Exception {
         String basePath = args.length > 0 ? args[0] : DFLT_BASE_PATH;
 
-        File file = new File(basePath, FILE_PATH);
+        ClassesGenerator gen = new ClassesGenerator(basePath, HEADER, 
PACKAGES);
 
-        ClassesGenerator gen = new ClassesGenerator();
-
-        write(file, gen.generate());
-    }
-
-    /**
-     * @param file File.
-     * @param classes Classes.
-     * @throws Exception In case of error.
-     */
-    private static void write(File file, Collection<Class> classes) throws 
Exception {
-        PrintStream out = new PrintStream(file);
-
-        out.println(HEADER);
-        out.println();
-
-        for (Class cls : classes)
-            out.println(cls.getName());
+        gen.generate();
     }
 
     /** */
@@ -104,11 +87,30 @@ public class ClassesGenerator {
     /** */
     private final Collection<String> errs = new ArrayList<>();
 
+    /** */
+    private final String basePath;
+
+    /** */
+    private final String header;
+
+    /** */
+    private final String[] packages;
+
+    /**
+     * @param basePath Base file path.
+     * @param header Header.
+     * @param packages Included packages.
+     */
+    public ClassesGenerator(String basePath, String header, String[] packages) 
{
+        this.basePath = basePath;
+        this.header = header;
+        this.packages = packages;
+    }
+
     /**
      * @throws Exception In case of error.
-     * @return Classes.
      */
-    private Collection<Class> generate() throws Exception {
+    public void generate() throws Exception {
         System.out.println("Generating classnames.properties...");
 
         for (URL url : ldr.getURLs())
@@ -123,7 +125,13 @@ public class ClassesGenerator {
             throw new Exception(sb.toString().trim());
         }
 
-        return classes;
+        PrintStream out = new PrintStream(new File(basePath, FILE_PATH));
+
+        out.println(header);
+        out.println();
+
+        for (Class cls : classes)
+            out.println(cls.getName());
     }
 
     /**
@@ -183,7 +191,7 @@ public class ClassesGenerator {
 
         boolean included = false;
 
-        for (String pkg : INCLUDED_PACKAGES) {
+        for (String pkg : packages) {
             if (clsName.startsWith(pkg)) {
                 included = true;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9d63a88d/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
index 1fc6c5a..5e71a17 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
@@ -21,6 +21,8 @@ import org.apache.ignite.marshaller.*;
 import org.jdk8.backport.*;
 
 import java.io.*;
+import java.net.*;
+import java.util.*;
 import java.util.concurrent.*;
 
 /**
@@ -28,10 +30,10 @@ import java.util.concurrent.*;
  */
 public abstract class MarshallerContextAdapter implements MarshallerContext {
     /** */
-    private static final String[] CLS_NAMES_FILES = {
-        "org/apache/ignite/internal/classnames.properties",
-        "org/apache/ignite/internal/classnames-jdk.properties"
-    };
+    private static final String CLS_NAMES_FILE = 
"META-INF/classnames.properties";
+
+    /** */
+    private static final String JDK_CLS_NAMES_FILE = 
"META-INF/classnames-jdk.properties";
 
     /** */
     protected final ConcurrentMap<Integer, String> clsNameById = new 
ConcurrentHashMap8<>();
@@ -43,23 +45,36 @@ public abstract class MarshallerContextAdapter implements 
MarshallerContext {
         try {
             ClassLoader ldr = getClass().getClassLoader();
 
-            for (String file : CLS_NAMES_FILES) {
-                BufferedReader rdr = new BufferedReader(new 
InputStreamReader(ldr.getResourceAsStream(file)));
-
-                String line;
-
-                while ((line = rdr.readLine()) != null) {
-                    if (line.isEmpty() || line.startsWith("#"))
-                        continue;
+            Enumeration<URL> urls = ldr.getResources(CLS_NAMES_FILE);
 
-                    String clsName = line.trim();
+            while (urls.hasMoreElements())
+                processResource(urls.nextElement());
 
-                    clsNameById.put(clsName.hashCode(), clsName);
-                }
-            }
+            processResource(ldr.getResource(JDK_CLS_NAMES_FILE));
         }
         catch (IOException e) {
             throw new IllegalStateException("Failed to initialize marshaller 
context.", e);
         }
     }
+
+    /**
+     * @param url Resource URL.
+     * @throws IOException In case of error.
+     */
+    private void processResource(URL url) throws IOException {
+        try (InputStream in = url.openStream()) {
+            BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
+
+            String line;
+
+            while ((line = rdr.readLine()) != null) {
+                if (line.isEmpty() || line.startsWith("#"))
+                    continue;
+
+                String clsName = line.trim();
+
+                clsNameById.put(clsName.hashCode(), clsName);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9d63a88d/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
----------------------------------------------------------------------
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 4a254fb..5c47235 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
@@ -47,6 +47,8 @@ public class MarshallerContextImpl extends 
MarshallerContextAdapter {
     /** {@inheritDoc} */
     @Override public void registerClass(int id, Class cls) {
         if (!clsNameById.containsKey(id)) {
+            U.debug("REG: " + cls.getName());
+
             try {
                 if (cache == null)
                     U.awaitQuiet(latch);
@@ -89,6 +91,6 @@ public class MarshallerContextImpl extends 
MarshallerContextAdapter {
             }
         }
 
-        return U.forName(clsName, ldr);
+        return Class.forName(clsName, false, ldr);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9d63a88d/modules/core/src/main/java/org/apache/ignite/internal/classnames-jdk.properties
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/classnames-jdk.properties
 
b/modules/core/src/main/java/org/apache/ignite/internal/classnames-jdk.properties
deleted file mode 100644
index 0cae0f7..0000000
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/classnames-jdk.properties
+++ /dev/null
@@ -1,325 +0,0 @@
-#
-# 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.
-#
-
-[B
-[C
-[D
-[F
-[I
-[J
-[S
-[Z
-[Ljava.lang.Object;
-java.lang.AbstractMethodError
-java.lang.ArithmeticException
-java.lang.ArrayIndexOutOfBoundsException
-java.lang.ArrayStoreException
-java.lang.AssertionError
-java.lang.Boolean
-java.lang.BootstrapMethodError
-java.lang.Byte
-java.lang.Character
-java.lang.Character$UnicodeScript
-java.lang.Class
-java.lang.ClassCastException
-java.lang.ClassCircularityError
-java.lang.ClassFormatError
-java.lang.ClassNotFoundException
-java.lang.CloneNotSupportedException
-java.lang.Double
-java.lang.EnumConstantNotPresentException
-java.lang.Error
-java.lang.Exception
-java.lang.ExceptionInInitializerError
-java.lang.Float
-java.lang.IllegalAccessError
-java.lang.IllegalAccessException
-java.lang.IllegalArgumentException
-java.lang.IllegalMonitorStateException
-java.lang.IllegalStateException
-java.lang.IllegalThreadStateException
-java.lang.IncompatibleClassChangeError
-java.lang.IndexOutOfBoundsException
-java.lang.InstantiationError
-java.lang.InstantiationException
-java.lang.Integer
-java.lang.InternalError
-java.lang.InterruptedException
-java.lang.LinkageError
-java.lang.Long
-java.lang.NegativeArraySizeException
-java.lang.NoClassDefFoundError
-java.lang.NoSuchFieldError
-java.lang.NoSuchFieldException
-java.lang.NoSuchMethodError
-java.lang.NoSuchMethodException
-java.lang.NullPointerException
-java.lang.NumberFormatException
-java.lang.OutOfMemoryError
-java.lang.ProcessBuilder$Redirect$Type
-java.lang.ReflectiveOperationException
-java.lang.RuntimeException
-java.lang.RuntimePermission
-java.lang.SecurityException
-java.lang.Short
-java.lang.StackOverflowError
-java.lang.StackTraceElement
-java.lang.String
-java.lang.String$CaseInsensitiveComparator
-java.lang.StringBuffer
-java.lang.StringBuilder
-java.lang.StringIndexOutOfBoundsException
-java.lang.Thread$State
-java.lang.ThreadDeath
-java.lang.Throwable
-java.lang.TypeNotPresentException
-java.lang.UNIXProcess$LaunchMechanism
-java.lang.UnknownError
-java.lang.UnsatisfiedLinkError
-java.lang.UnsupportedClassVersionError
-java.lang.UnsupportedOperationException
-java.lang.VerifyError
-java.lang.annotation.AnnotationFormatError
-java.lang.annotation.AnnotationTypeMismatchException
-java.lang.annotation.ElementType
-java.lang.annotation.IncompleteAnnotationException
-java.lang.annotation.RetentionPolicy
-java.lang.instrument.IllegalClassFormatException
-java.lang.instrument.UnmodifiableClassException
-java.lang.invoke.MethodType
-java.lang.invoke.WrongMethodTypeException
-java.lang.management.ManagementPermission
-java.lang.management.MemoryType
-java.lang.management.PlatformComponent
-java.lang.reflect.GenericSignatureFormatError
-java.lang.reflect.InvocationTargetException
-java.lang.reflect.MalformedParameterizedTypeException
-java.lang.reflect.Proxy
-java.lang.reflect.ReflectPermission
-java.lang.reflect.UndeclaredThrowableException
-java.net.Authenticator$RequestorType
-java.net.BindException
-java.net.ConnectException
-java.net.HttpRetryException
-java.net.Inet4Address
-java.net.Inet6Address
-java.net.InetAddress
-java.net.InetAddress$Cache$Type
-java.net.InetSocketAddress
-java.net.MalformedURLException
-java.net.NetPermission
-java.net.NoRouteToHostException
-java.net.PortUnreachableException
-java.net.ProtocolException
-java.net.Proxy$Type
-java.net.SocketException
-java.net.SocketPermission
-java.net.SocketPermissionCollection
-java.net.SocketTimeoutException
-java.net.StandardProtocolFamily
-java.net.URI
-java.net.URISyntaxException
-java.net.URL
-java.net.UnknownHostException
-java.net.UnknownServiceException
-java.util.AbstractMap$SimpleEntry
-java.util.AbstractMap$SimpleImmutableEntry
-java.util.ArrayDeque
-java.util.ArrayList
-java.util.Arrays$ArrayList
-java.util.BitSet
-java.util.Collections$AsLIFOQueue
-java.util.Collections$CheckedCollection
-java.util.Collections$CheckedList
-java.util.Collections$CheckedMap
-java.util.Collections$CheckedRandomAccessList
-java.util.Collections$CheckedSet
-java.util.Collections$CheckedSortedMap
-java.util.Collections$CheckedSortedSet
-java.util.Collections$CopiesList
-java.util.Collections$EmptyList
-java.util.Collections$EmptyMap
-java.util.Collections$EmptySet
-java.util.Collections$ReverseComparator
-java.util.Collections$ReverseComparator2
-java.util.Collections$SetFromMap
-java.util.Collections$SingletonList
-java.util.Collections$SingletonMap
-java.util.Collections$SingletonSet
-java.util.Collections$SynchronizedCollection
-java.util.Collections$SynchronizedList
-java.util.Collections$SynchronizedMap
-java.util.Collections$SynchronizedRandomAccessList
-java.util.Collections$SynchronizedSet
-java.util.Collections$SynchronizedSortedMap
-java.util.Collections$SynchronizedSortedSet
-java.util.Collections$UnmodifiableCollection
-java.util.Collections$UnmodifiableList
-java.util.Collections$UnmodifiableMap
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
-java.util.Collections$UnmodifiableRandomAccessList
-java.util.Collections$UnmodifiableSet
-java.util.Collections$UnmodifiableSortedMap
-java.util.Collections$UnmodifiableSortedSet
-java.util.ConcurrentModificationException
-java.util.Currency
-java.util.Date
-java.util.DuplicateFormatFlagsException
-java.util.EmptyStackException
-java.util.EnumMap
-java.util.EnumSet$SerializationProxy
-java.util.EventObject
-java.util.FormatFlagsConversionMismatchException
-java.util.Formatter$BigDecimalLayoutForm
-java.util.FormatterClosedException
-java.util.GregorianCalendar
-java.util.HashMap
-java.util.HashSet
-java.util.Hashtable
-java.util.IdentityHashMap
-java.util.IllegalFormatCodePointException
-java.util.IllegalFormatConversionException
-java.util.IllegalFormatException
-java.util.IllegalFormatFlagsException
-java.util.IllegalFormatPrecisionException
-java.util.IllegalFormatWidthException
-java.util.IllformedLocaleException
-java.util.InputMismatchException
-java.util.InvalidPropertiesFormatException
-java.util.JapaneseImperialCalendar
-java.util.JumboEnumSet
-java.util.LinkedHashMap
-java.util.LinkedHashSet
-java.util.LinkedList
-java.util.Locale
-java.util.Locale$Category
-java.util.MissingFormatArgumentException
-java.util.MissingFormatWidthException
-java.util.MissingResourceException
-java.util.NoSuchElementException
-java.util.PriorityQueue
-java.util.Properties
-java.util.PropertyPermission
-java.util.PropertyPermissionCollection
-java.util.Random
-java.util.RegularEnumSet
-java.util.ServiceConfigurationError
-java.util.SimpleTimeZone
-java.util.Stack
-java.util.TooManyListenersException
-java.util.TreeMap
-java.util.TreeMap$AscendingSubMap
-java.util.TreeMap$DescendingSubMap
-java.util.TreeMap$SubMap
-java.util.TreeSet
-java.util.UUID
-java.util.UnknownFormatConversionException
-java.util.UnknownFormatFlagsException
-java.util.Vector
-java.util.concurrent.ArrayBlockingQueue
-java.util.concurrent.BrokenBarrierException
-java.util.concurrent.CancellationException
-java.util.concurrent.ConcurrentHashMap
-java.util.concurrent.ConcurrentHashMap$Segment
-java.util.concurrent.ConcurrentHashMap$WriteThroughEntry
-java.util.concurrent.ConcurrentLinkedDeque
-java.util.concurrent.ConcurrentLinkedQueue
-java.util.concurrent.ConcurrentSkipListMap
-java.util.concurrent.ConcurrentSkipListMap$SubMap
-java.util.concurrent.ConcurrentSkipListSet
-java.util.concurrent.CopyOnWriteArrayList
-java.util.concurrent.CopyOnWriteArraySet
-java.util.concurrent.CountDownLatch$Sync
-java.util.concurrent.Exchanger$Node
-java.util.concurrent.Exchanger$Slot
-java.util.concurrent.ExecutionException
-java.util.concurrent.ForkJoinPool$InvokeAll
-java.util.concurrent.ForkJoinTask$AdaptedCallable
-java.util.concurrent.ForkJoinTask$AdaptedRunnable
-java.util.concurrent.LinkedBlockingDeque
-java.util.concurrent.LinkedBlockingQueue
-java.util.concurrent.LinkedTransferQueue
-java.util.concurrent.PriorityBlockingQueue
-java.util.concurrent.RejectedExecutionException
-java.util.concurrent.Semaphore
-java.util.concurrent.Semaphore$FairSync
-java.util.concurrent.Semaphore$NonfairSync
-java.util.concurrent.SynchronousQueue
-java.util.concurrent.SynchronousQueue$FifoWaitQueue
-java.util.concurrent.SynchronousQueue$LifoWaitQueue
-java.util.concurrent.SynchronousQueue$WaitQueue
-java.util.concurrent.ThreadLocalRandom
-java.util.concurrent.ThreadPoolExecutor$Worker
-java.util.concurrent.TimeUnit$1
-java.util.concurrent.TimeUnit$2
-java.util.concurrent.TimeUnit$3
-java.util.concurrent.TimeUnit$4
-java.util.concurrent.TimeUnit$5
-java.util.concurrent.TimeUnit$6
-java.util.concurrent.TimeUnit$7
-java.util.concurrent.TimeoutException
-java.util.concurrent.atomic.AtomicBoolean
-java.util.concurrent.atomic.AtomicInteger
-java.util.concurrent.atomic.AtomicIntegerArray
-java.util.concurrent.atomic.AtomicLong
-java.util.concurrent.atomic.AtomicLongArray
-java.util.concurrent.atomic.AtomicReference
-java.util.concurrent.atomic.AtomicReferenceArray
-java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject
-java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
-java.util.concurrent.locks.ReentrantLock
-java.util.concurrent.locks.ReentrantLock$FairSync
-java.util.concurrent.locks.ReentrantLock$NonfairSync
-java.util.concurrent.locks.ReentrantReadWriteLock
-java.util.concurrent.locks.ReentrantReadWriteLock$FairSync
-java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
-java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
-java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
-java.util.jar.JarException
-java.util.jar.JarVerifier$VerifierCodeSource
-java.util.logging.Level
-java.util.logging.LogRecord
-java.util.logging.LoggingPermission
-java.util.prefs.AbstractPreferences$NodeAddedEvent
-java.util.prefs.AbstractPreferences$NodeRemovedEvent
-java.util.prefs.BackingStoreException
-java.util.prefs.InvalidPreferencesFormatException
-java.util.prefs.NodeChangeEvent
-java.util.prefs.PreferenceChangeEvent
-java.util.regex.Pattern
-java.util.regex.PatternSyntaxException
-java.util.regex.UnicodeProp$1
-java.util.regex.UnicodeProp$10
-java.util.regex.UnicodeProp$11
-java.util.regex.UnicodeProp$12
-java.util.regex.UnicodeProp$13
-java.util.regex.UnicodeProp$14
-java.util.regex.UnicodeProp$15
-java.util.regex.UnicodeProp$16
-java.util.regex.UnicodeProp$17
-java.util.regex.UnicodeProp$18
-java.util.regex.UnicodeProp$2
-java.util.regex.UnicodeProp$3
-java.util.regex.UnicodeProp$4
-java.util.regex.UnicodeProp$5
-java.util.regex.UnicodeProp$6
-java.util.regex.UnicodeProp$7
-java.util.regex.UnicodeProp$8
-java.util.regex.UnicodeProp$9
-java.util.zip.DataFormatException
-java.util.zip.ZipError
-java.util.zip.ZipException

Reply via email to