[jboss-cvs] JBossAS SVN: r106950 - projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 20 15:49:09 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-07-20 15:49:09 -0400 (Tue, 20 Jul 2010)
New Revision: 106950

Modified:
   projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassLoaderBenchmarkTestDelegate.java
   projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassPathElementInfo.java
Log:
Automatic exclusion of duplicate classes/packages

Modified: projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassLoaderBenchmarkTestDelegate.java
===================================================================
--- projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassLoaderBenchmarkTestDelegate.java	2010-07-20 19:01:15 UTC (rev 106949)
+++ projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassLoaderBenchmarkTestDelegate.java	2010-07-20 19:49:09 UTC (rev 106950)
@@ -22,10 +22,16 @@
 package org.jboss.test.cl.benchmark;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 
 import javax.resource.spi.IllegalStateException;
 
@@ -59,32 +65,75 @@
       String classpath = System.getProperty("java.class.path");
       String[] jars = classpath.split(File.pathSeparator);
       
+      createClassPathElements(jars);
+      
+      URL commonUrl = getClass().getResource("/org/jboss/test/cl/benchmark/Common.xml");
+      if (commonUrl == null)
+         throw new IllegalStateException("Null common url");
+      deploy(commonUrl);      
+   }
+   
+   private void createClassPathElements(String[] jars) throws IOException
+   {
+      Set<String> doneAlready = new HashSet<String>();
+      int skippedPackages = 0;
+      int skippedClasses = 0;
       int packages = 0;
       int classes = 0;
-      int excluded = 0;
+      int noclasses = 0;
       for (String jar : jars)
       {
-         if (ClassPathElementInfo.isJar(jar))
+         if (isJar(jar))
          {
-            ClassPathElementInfo info = ClassPathElementInfo.of(jar); 
-            if (info != null)
+            File file = new File(jar);
+            if (!file.exists())
+               throw new IllegalArgumentException("Could not find " + file);
+
+            List<String> classNames = new ArrayList<String>();
+            List<String> packageNames = new ArrayList<String>();
+            JarFile jarFile = new JarFile(file);
+            for (Enumeration<JarEntry> e = jarFile.entries() ; e.hasMoreElements() ; )
             {
-               classPathElements.add(info);
-               packages += info.getPackageNames().size();
-               classes += info.getClassNames().size();
+               JarEntry entry = e.nextElement();
+               
+               //TODO - replace '/' with '.'?
+               if (entry.getName().endsWith("/")) 
+               {
+                  if (doneAlready.contains(entry.getName()))
+                  {
+                     skippedPackages++;
+                     continue;
+                  }
+                  packageNames.add(entry.getName().replace('/', '.'));
+               }
+               else if (entry.getName().endsWith(".class"))
+               {
+                  if (doneAlready.contains(entry.getName()))
+                  {
+                     skippedClasses++;
+                     continue;
+                  }
+                  classNames.add(entry.getName().substring(0, entry.getName().indexOf(".class")).replace('/', '.'));
+               }
+
+               doneAlready.add(entry.getName());
             }
+            
+            
+            if (classNames.size() > 0)
+            {
+               classPathElements.add(new ClassPathElementInfo(jar, new File(jar).toURI().toURL(), packageNames, classNames));
+               packages += packageNames.size();
+               classes += classNames.size();
+            }
             else
-               excluded++;
+               noclasses++;
          }
       }
-         
-      System.out.println(classPathElements.size() + " jars indexed. Classes: " + classes + ". Packages: " + packages + ". Excluded: " + excluded);
-      
-      URL commonUrl = getClass().getResource("/org/jboss/test/cl/benchmark/Common.xml");
-      if (commonUrl == null)
-         throw new IllegalStateException("Null common url");
-      deploy(commonUrl);      
+      System.out.println(classPathElements.size() + " jars indexed. Classes: " + classes + ". Packages: " + packages + 
+            ". Excluded: (Empty jars: " + noclasses + ". Duplicate packages: " + skippedPackages + ". Duplicate classes: " + skippedClasses + ")");
    }
+   
 
    List<ClassPathElementInfo> getClassPathElements()
    {
@@ -112,4 +161,9 @@
          contextName = factory.getName() + ":" + factory.getVersion();
       return contextName;
    }
+
+   static boolean isJar(String name)
+   {
+      return name.endsWith(".jar");
+   }
 }

Modified: projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassPathElementInfo.java
===================================================================
--- projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassPathElementInfo.java	2010-07-20 19:01:15 UTC (rev 106949)
+++ projects/cl-benchmark/trunk/src/test/java/org/jboss/test/cl/benchmark/ClassPathElementInfo.java	2010-07-20 19:49:09 UTC (rev 106950)
@@ -21,14 +21,8 @@
 */ 
 package org.jboss.test.cl.benchmark;
 
-import java.io.File;
-import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
 import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
 
 /**
  * 
@@ -37,35 +31,12 @@
  */
 public class ClassPathElementInfo
 {
-   //Exclude
-   private static final String[] EXCLUDED_JARS = new String[]{"-client", 
-      "aspects", 
-      "jboss-metadata-ejb", 
-      "jboss-integration", 
-      "ejb3", 
-      "jboss-as-connector", 
-      ".osgi.",
-      "-osgi-",
-      "pax-web-extender",
-      "pax-swissbox",
-      "-jmx-adaptor-plugin",
-      "-jboss.jar",
-      "jasper",
-      "-jboss-web-service.jar",
-      "jboss-web-deployer.jar",
-      "-srp.jar",
-      "wstx-asl",
-      "hibernate-3.2",
-      "quartz",
-      "slf4j",
-      "stax-ex-1.2"};
-   
    private final String name;
    private final URL url;
    private final List<String> packageNames;
    private final List<String> classNames;
 
-   private ClassPathElementInfo(String name, URL url, List<String> packageNames, List<String> classNames)
+   ClassPathElementInfo(String name, URL url, List<String> packageNames, List<String> classNames)
    {
       this.name = name;
       this.packageNames = packageNames;
@@ -73,42 +44,6 @@
       this.url = url;
    }
    
-   public static ClassPathElementInfo of(String name) throws Exception
-   {
-      if (!isJar(name))
-         throw new IllegalArgumentException("Not a jar " + name);
-      
-      File file = new File(name);
-      if (!file.exists())
-         throw new IllegalArgumentException("Could not find " + file);
-      
-      if (isExcluded(name))
-         return null;
-      
-      
-      List<String> packages = new ArrayList<String>();
-      List<String> classes = new ArrayList<String>();
-      try
-      {
-         JarFile jar = new JarFile(file);
-         for (Enumeration<JarEntry> e = jar.entries() ; e.hasMoreElements() ; )
-         {
-            JarEntry entry = e.nextElement();
-            
-            //TODO - replace '/' with '.'?
-            if (entry.getName().endsWith("/"))
-               packages.add(entry.getName().replace('/', '.'));
-            else if (entry.getName().endsWith(".class"))
-               classes.add(entry.getName().substring(0, entry.getName().indexOf(".class")).replace('/', '.'));
-         }
-         
-         return new ClassPathElementInfo(name, new File(name).toURI().toURL(), packages, classes);
-      }
-      catch (IOException e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
 
    public List<String> getPackageNames()
    {
@@ -130,19 +65,4 @@
       return url;
    }
 
-   static boolean isJar(String name)
-   {
-      return name.endsWith(".jar");
-   }
-   
-   private static boolean isExcluded(String name)
-   {
-      for (String excluded : EXCLUDED_JARS)
-      {
-         if (name.contains(excluded))
-            return true;
-      }
-      return false;
-   }
-   
 }



More information about the jboss-cvs-commits mailing list