You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by sp...@apache.org on 2009/10/06 15:28:10 UTC

svn commit: r822316 - in /incubator/kato/trunk/org.apache.kato: kato.api/src/main/java/javax/tools/diagnostics/ kato.api/src/main/java/javax/tools/diagnostics/image/ kato.api/src/main/java/javax/tools/diagnostics/runtime/java/ kato.api/src/test/java/te...

Author: spoole
Date: Tue Oct  6 15:28:10 2009
New Revision: 822316

URL: http://svn.apache.org/viewvc?rev=822316&view=rev
Log:
updated API to allow JavaRuntime to be directly retrieved from Factory Registry

Modified:
    incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/FactoryRegistry.java
    incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/image/ImageFactory.java
    incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/runtime/java/JavaClassLoader.java
    incubator/kato/trunk/org.apache.kato/kato.api/src/test/java/test/apache/kato/TestFactoryRegistry.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java
    incubator/kato/trunk/org.apache.kato/kato.hprof.api/src/main/java/org/apache/kato/hprof/image/ImageFactoryImpl.java
    incubator/kato/trunk/org.apache.kato/kato.jvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java

Modified: incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/FactoryRegistry.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/FactoryRegistry.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/FactoryRegistry.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/FactoryRegistry.java Tue Oct  6 15:28:10 2009
@@ -22,6 +22,7 @@
 import javax.imageio.spi.ServiceRegistry;
 import javax.tools.diagnostics.image.Image;
 import javax.tools.diagnostics.image.ImageFactory;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
 
 
 /**
@@ -181,4 +182,52 @@
 			}
 			return null; // no matches
 	}
+
+	/**
+	 * <p>
+	 * Returns an appropriate {@link javax.tools.diagnostics.image.Image} for the
+	 * provide file by locating the first registered image factory that can handle
+	 * the case insensitive file name extension of the provided file. 
+	 * If no factory can be found to handle the file then null is returned. 
+	 * <p>
+	 * File names without extension will always return null  
+	 *  
+	 * @throws IllegalArgumentException if file is null
+	 * @throws IOException if errors occur during image creation
+	 * 
+	 * @param file to create image from
+	 * @return Image or null
+	 * 
+	 */
+	public JavaRuntime getJavaRuntime(File file) throws IOException {
+			if(file==null) throw new IllegalArgumentException("file is null");
+		
+			String fileName=file.getName();
+			
+			int lastDot=fileName.lastIndexOf('.');
+			
+			if(lastDot<0) {  
+				return null; // no suffix
+			}
+			
+			if( (lastDot+1)==fileName.length()) {
+				return null;  // no suffix
+			}
+			
+			String suffix=fileName.substring(lastDot+1);
+			
+			for(ImageFactory factory:factories) {
+				String[] extensions=factory.getValidFileExtensions();
+				if(extensions==null) continue;
+				for(String value:extensions) {
+					if(suffix.equalsIgnoreCase(value)) {
+						// found match
+						return factory.getJavaRuntime(file);
+						
+					}
+				}
+				
+			}
+			return null; // no matches
+	}
 }

Modified: incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/image/ImageFactory.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/image/ImageFactory.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/image/ImageFactory.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/image/ImageFactory.java Tue Oct  6 15:28:10 2009
@@ -16,6 +16,8 @@
 import java.io.File;
 import java.io.IOException;
 
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+
 /**
  * <p>
  * This interface is used for classes which can produce instances of Image
@@ -107,4 +109,16 @@
 	 * @return an array of case insensitive file extension names.
 	 */
 	public String[] getValidFileExtensions();
+	
+	/**
+	 * <p>
+	 * Creates a new JavaRuntime object based on the contents of the file;
+	 * <p>
+	 * Note that this method is only intended to be called by the {@link javax.tools.diagnostics.FactoryRegistry}
+	 * 
+	 * @param file a file with JavaRuntime information
+	 * @return an instance of JavaRuntime
+	 * @throws IOException if unable to create a runtime from the provided file 
+	 */
+	public JavaRuntime getJavaRuntime(File file) throws IOException;
 }

Modified: incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/runtime/java/JavaClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/runtime/java/JavaClassLoader.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/runtime/java/JavaClassLoader.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.api/src/main/java/javax/tools/diagnostics/runtime/java/JavaClassLoader.java Tue Oct  6 15:28:10 2009
@@ -53,7 +53,7 @@
      *    
      * <p>The returned list follows the standard semantics for javax.tools.diagnostics collections.</p>
      * <p>The returned value is never null but can be an empty list.</p>
-     *  
+     *   
      * @return an list of classes which are defined in this JavaClassLoader 
      * @see JavaClass
      */

Modified: incubator/kato/trunk/org.apache.kato/kato.api/src/test/java/test/apache/kato/TestFactoryRegistry.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.api/src/test/java/test/apache/kato/TestFactoryRegistry.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.api/src/test/java/test/apache/kato/TestFactoryRegistry.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.api/src/test/java/test/apache/kato/TestFactoryRegistry.java Tue Oct  6 15:28:10 2009
@@ -23,6 +23,17 @@
 import javax.tools.diagnostics.image.DataUnavailable;
 import javax.tools.diagnostics.image.Image;
 import javax.tools.diagnostics.image.ImageFactory;
+import javax.tools.diagnostics.image.ImagePointer;
+import javax.tools.diagnostics.image.MemoryAccessException;
+import javax.tools.diagnostics.runtime.java.JavaClassLoader;
+import javax.tools.diagnostics.runtime.java.JavaHeap;
+import javax.tools.diagnostics.runtime.java.JavaMethod;
+import javax.tools.diagnostics.runtime.java.JavaMonitor;
+import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaReference;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+import javax.tools.diagnostics.runtime.java.JavaThread;
+import javax.tools.diagnostics.runtime.java.JavaVMInitArgs;
 
 import junit.framework.TestCase;
 
@@ -67,8 +78,91 @@
 		
 			return suffixes;
 		}
+		@Override
+		public JavaRuntime getJavaRuntime(File file) {
+			
+			return new MockRuntime();
+		}
 	}
+	private final class MockRuntime implements JavaRuntime {
+
+		@Override
+		public List<JavaMethod> getCompiledMethods() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public List<JavaReference> getHeapRoots() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public List<JavaHeap> getHeaps() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public List<JavaClassLoader> getJavaClassLoaders() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public ImagePointer getJavaVM() throws CorruptDataException {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public JavaVMInitArgs getJavaVMInitArgs() throws DataUnavailable,
+				CorruptDataException {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public List<JavaMonitor> getMonitors() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public JavaObject getObjectAtAddress(ImagePointer address)
+				throws CorruptDataException, IllegalArgumentException,
+				MemoryAccessException, DataUnavailable {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public List<JavaThread> getThreads() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public Object getTraceBuffer(String bufferName, boolean formatted)
+				throws CorruptDataException {
+			// TODO Auto-generated method stub
+			return null;
+		}
 
+		@Override
+		public String getFullVersion() throws CorruptDataException {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public String getVersion() throws CorruptDataException {
+			// TODO Auto-generated method stub
+			return null;
+		}
+		
+	}
 	private final class MockImage implements Image {
 		public List getAddressSpaces() {
 			
@@ -140,7 +234,7 @@
 		
 	}
 	
-	public void testNullFileNameThrowsError() throws IOException {
+	public void testNullImageFileNameThrowsError() throws IOException {
 		
 		FactoryRegistry reg=new FactoryRegistry();
 		try {
@@ -153,7 +247,19 @@
 		
 	}
 	
-	public void testNoSuffixFileNameReturnsNull() throws IOException {
+	public void testNullRutimeFileNameThrowsError() throws IOException {
+		
+		FactoryRegistry reg=new FactoryRegistry();
+		try {
+		reg.getJavaRuntime(null);
+		fail("Expected illegal argument exception");
+		
+		} catch(IllegalArgumentException e) {
+			; // ok
+		}
+		
+	}
+	public void testNoSuffixImageFileNameReturnsNull() throws IOException {
 		
 		FactoryRegistry reg=new FactoryRegistry();
 		File f=new File("testfile");
@@ -162,7 +268,15 @@
 		assertNull(result);
 		
 	}
-	
+public void testNoSuffixRuntimeFileNameReturnsNull() throws IOException {
+		
+		FactoryRegistry reg=new FactoryRegistry();
+		File f=new File("testfile");
+		
+		JavaRuntime result=reg.getJavaRuntime(f);
+		assertNull(result);
+		
+	}
 	public void testDotSuffixFileNameReturnsNull() throws IOException {
 		
 		FactoryRegistry reg=new FactoryRegistry();

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java Tue Oct  6 15:28:10 2009
@@ -18,7 +18,11 @@
 import java.io.IOException;
 
 import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageAddressSpace;
 import javax.tools.diagnostics.image.ImageFactory;
+import javax.tools.diagnostics.image.ImageProcess;
+import javax.tools.diagnostics.runtime.ManagedRuntime;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
 
 public class ImageFactoryImpl implements ImageFactory{
 
@@ -57,4 +61,18 @@
 		return 0;
 	}
 
+	@Override
+	public JavaRuntime getJavaRuntime(File file) throws IOException {
+		 Image i=getImage(file);
+		 if(i==null) return null;
+		 
+		for(ImageAddressSpace space:i.getAddressSpaces()) {
+			ImageProcess process=space.getCurrentProcess();
+			for(ManagedRuntime r : process.getRuntimes()) {
+				if(r instanceof JavaRuntime) return (JavaRuntime) r;
+			}
+		}
+		return null;
+	}
+
 }

Modified: incubator/kato/trunk/org.apache.kato/kato.hprof.api/src/main/java/org/apache/kato/hprof/image/ImageFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.hprof.api/src/main/java/org/apache/kato/hprof/image/ImageFactoryImpl.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.hprof.api/src/main/java/org/apache/kato/hprof/image/ImageFactoryImpl.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.hprof.api/src/main/java/org/apache/kato/hprof/image/ImageFactoryImpl.java Tue Oct  6 15:28:10 2009
@@ -17,7 +17,11 @@
 import java.io.IOException;
 
 import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageAddressSpace;
 import javax.tools.diagnostics.image.ImageFactory;
+import javax.tools.diagnostics.image.ImageProcess;
+import javax.tools.diagnostics.runtime.ManagedRuntime;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
 
 import org.apache.kato.hprof.datalayer.HProfFactory;
 import org.apache.kato.hprof.datalayer.HProfFile;
@@ -66,5 +70,18 @@
 	public String[] getValidFileExtensions() {
 		return suffixes;
 	}
+	@Override
+	public JavaRuntime getJavaRuntime(File file) throws IOException {
+		 Image i=getImage(file);
+		 if(i==null) return null;
+		 
+		for(ImageAddressSpace space:i.getAddressSpaces()) {
+			ImageProcess process=space.getCurrentProcess();
+			for(ManagedRuntime r : process.getRuntimes()) {
+				if(r instanceof JavaRuntime) return (JavaRuntime) r;
+			}
+		}
+		return null;
+	}
 
 }

Modified: incubator/kato/trunk/org.apache.kato/kato.jvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.jvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java?rev=822316&r1=822315&r2=822316&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.jvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.jvmti/src/main/java/org/apache/kato/jvmti/process/ImageFactoryImpl.java Tue Oct  6 15:28:10 2009
@@ -18,7 +18,11 @@
 import java.io.IOException;
 
 import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageAddressSpace;
 import javax.tools.diagnostics.image.ImageFactory;
+import javax.tools.diagnostics.image.ImageProcess;
+import javax.tools.diagnostics.runtime.ManagedRuntime;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
 
 
 public class ImageFactoryImpl implements ImageFactory{
@@ -58,5 +62,18 @@
 	public String[] getValidFileExtensions() {
 		return suffixes;
 	}
+	@Override
+	public JavaRuntime getJavaRuntime(File file) throws IOException {
+		 Image i=getImage(file);
+		 if(i==null) return null;
+		 
+		for(ImageAddressSpace space:i.getAddressSpaces()) {
+			ImageProcess process=space.getCurrentProcess();
+			for(ManagedRuntime r : process.getRuntimes()) {
+				if(r instanceof JavaRuntime) return (JavaRuntime) r;
+			}
+		}
+		return null;
+	}
 
 }