You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by to...@apache.org on 2007/06/18 09:38:48 UTC

svn commit: r548246 - in /harmony/enhanced/classlib/trunk/modules/jndi/src/main/java: javax/naming/spi/ org/apache/harmony/jndi/provider/dns/

Author: tonywu
Date: Mon Jun 18 00:38:47 2007
New Revision: 548246

URL: http://svn.apache.org/viewvc?view=rev&rev=548246
Log:
Apply patch HARMONY-4201 ([classlib][jndi] Performance improvement for JNDI module)

Modified:
    harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/NamingManager.java
    harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/Resolver.java
    harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/ResolverCache.java
    harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/SList.java

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/NamingManager.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/NamingManager.java?view=diff&rev=548246&r1=548245&r2=548246
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/NamingManager.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/NamingManager.java Mon Jun 18 00:38:47 2007
@@ -106,7 +106,7 @@
     static InitialContextFactoryBuilder icfb;
 
     static ObjectFactoryBuilder ofb;
-
+    
     NamingManager() {
         super();
         // package private to prevent it being instanced but make it can be
@@ -129,22 +129,21 @@
      * @throws NamingException
      *             for other errors encountered.
      */
-    public static synchronized void setInitialContextFactoryBuilder(
+    public static  void setInitialContextFactoryBuilder(
             InitialContextFactoryBuilder icfb) throws IllegalStateException,
             SecurityException, NamingException {
-
-        if (null != NamingManager.icfb) {
-            // jndi.1E=InitialContextFactoryBuilder cannot be reset
-            throw new IllegalStateException(Messages.getString("jndi.1E"));  //$NON-NLS-1$
-        }
-
         // check security access
         SecurityManager sm = System.getSecurityManager();
         if (null != sm) {
             sm.checkSetFactory();
         }
-
-        NamingManager.icfb = icfb;
+        synchronized (NamingManager.class) {
+            if (null != NamingManager.icfb) {
+                // jndi.1E=InitialContextFactoryBuilder cannot be reset
+                throw new IllegalStateException(Messages.getString("jndi.1E")); //$NON-NLS-1$
+            }
+            NamingManager.icfb = icfb;
+        }
     }
 
     /**

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/Resolver.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/Resolver.java?view=diff&rev=548246&r1=548245&r2=548246
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/Resolver.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/Resolver.java Mon Jun 18 00:38:47 2007
@@ -25,6 +25,7 @@
 
 import java.net.InetAddress;
 import java.net.SocketTimeoutException;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Hashtable;
@@ -33,7 +34,6 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.Vector;
-//import java.util.logging.Level;
 
 import javax.naming.NameNotFoundException;
 import javax.naming.NamingException;
@@ -99,9 +99,9 @@
     private int threadNumberLimit;
     
     // vector with currently running Resolver threads 
-    private final Vector<ThreadListEntry> resolverThreads = new Vector<ThreadListEntry>();
+    private final ArrayList<ThreadListEntry> resolverThreads = new ArrayList<ThreadListEntry>();
     // the list of host names that should be resolved
-    private final Vector<ThreadListEntry> hostnamesToResolve = new Vector<ThreadListEntry>();
+    private final ArrayList<ThreadListEntry> hostnamesToResolve = new ArrayList<ThreadListEntry>();
     // semaphore that controls access to both lists above
     private class ThreadListSemaphore {}
     private final Object threadListSemaphore = new ThreadListSemaphore();
@@ -1428,7 +1428,7 @@
         synchronized (threadListSemaphore) {
             // check that no currently running thread looks for this hostname 
             for (int i = 0; i < resolverThreads.size(); i++) {
-                Resolver.ThreadListEntry entry = resolverThreads.elementAt(i);
+                Resolver.ThreadListEntry entry = resolverThreads.get(i);
                 if (ProviderMgr.namesAreEqual(hostname,
                                               entry.serverNameToResolve) &&
                     entry.dnsClass == dnsClass)
@@ -1440,7 +1440,7 @@
             }
             // check if the hostname is already scheduled for resolving
             for (int i = 0; i < hostnamesToResolve.size(); i++) {
-                Resolver.ThreadListEntry entry = hostnamesToResolve.elementAt(i);
+                Resolver.ThreadListEntry entry = hostnamesToResolve.get(i);
                 if (ProviderMgr.namesAreEqual(hostname,
                                               entry.serverNameToResolve) &&
                     entry.dnsClass == dnsClass)
@@ -1459,7 +1459,7 @@
             newEntry = new Resolver.ThreadListEntry();
             newEntry.serverNameToResolve = hostname;
             newEntry.dnsClass = dnsClass;
-            hostnamesToResolve.addElement(newEntry);
+            hostnamesToResolve.add(newEntry);
             // starting new thread that should make further updates by itself
             newThread = new Thread(this);
             //if (LogConst.DEBUG) {                            
@@ -1483,10 +1483,10 @@
         // update lists
         synchronized (threadListSemaphore) {
             if (hostnamesToResolve.size() > 0) {
-                entryToProcess = hostnamesToResolve.elementAt(0);
+                entryToProcess = hostnamesToResolve.get(0);
                 hostnamesToResolve.remove(0);
                 entryToProcess.thread = Thread.currentThread();
-                resolverThreads.addElement(entryToProcess);
+                resolverThreads.add(entryToProcess);
             } else {
                 //ProviderMgr.logger.warning(
                 //        "Resolver thread: no host name to resolve");
@@ -1515,7 +1515,7 @@
         // update resolver threads list, remove info about current thread
         synchronized (threadListSemaphore) {
             for (int i = 0; i < resolverThreads.size(); i++) {
-                Resolver.ThreadListEntry entry = resolverThreads.elementAt(i);
+                Resolver.ThreadListEntry entry = resolverThreads.get(i);
 
                 if (ProviderMgr.namesAreEqual(
                         entryToProcess.serverNameToResolve,

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/ResolverCache.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/ResolverCache.java?view=diff&rev=548246&r1=548245&r2=548246
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/ResolverCache.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/ResolverCache.java Mon Jun 18 00:38:47 2007
@@ -24,7 +24,7 @@
 package org.apache.harmony.jndi.provider.dns;
 
 import java.util.Enumeration;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Vector;
 
 /**
@@ -37,14 +37,14 @@
 class ResolverCache {
 
     /** keys - zone & host names; values - vectors with RRs */
-    Hashtable<String, Vector<CacheEntry>> names = new Hashtable<String, Vector<CacheEntry>>();
+    HashMap<String, Vector<CacheEntry>> names = new HashMap<String, Vector<CacheEntry>>();
 
     /** 
      * Since <code>ResolverCache</code> is singleton class its constructor
      *  should be hidden.
      */
     private ResolverCache() {
-        names = new Hashtable<String, Vector<CacheEntry>>();
+        names = new HashMap<String, Vector<CacheEntry>>();
     }
 
     private static ResolverCache instance = null;
@@ -146,7 +146,7 @@
      * Removes all cached entries.
      */
     synchronized void clear() {
-        names = new Hashtable<String, Vector<CacheEntry>>();
+        names = new HashMap<String, Vector<CacheEntry>>();
     }
 
     // additional class

Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/SList.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/SList.java?view=diff&rev=548246&r1=548245&r2=548246
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/SList.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/provider/dns/SList.java Mon Jun 18 00:38:47 2007
@@ -23,9 +23,9 @@
 
 package org.apache.harmony.jndi.provider.dns;
 
-import java.util.Vector;
-import java.util.Hashtable;
 import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
 
 import org.apache.harmony.jndi.internal.nls.Messages;
 
@@ -60,16 +60,13 @@
         servers = new Vector<Server>();
     }
 
-    private static SList instance = null;
+    private static SList instance = new SList();
 
     /**
      * <code>SList</code> is a singleton class.
      * @return instance of <code>SList</code>
      */
     static SList getInstance() {
-        if (instance == null) {
-            instance = new SList();
-        }
         return instance;
     }