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 mo...@apache.org on 2009/05/29 17:13:42 UTC

svn commit: r780036 - in /incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands: TomcatCommand.java helpers/KatoSearch.java

Author: monteith
Date: Fri May 29 17:13:42 2009
New Revision: 780036

URL: http://svn.apache.org/viewvc?rev=780036&view=rev
Log:
Add missing JSP command

Modified:
    incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/TomcatCommand.java
    incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/helpers/KatoSearch.java

Modified: incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/TomcatCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/TomcatCommand.java?rev=780036&r1=780035&r2=780036&view=diff
==============================================================================
--- incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/TomcatCommand.java (original)
+++ incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/TomcatCommand.java Fri May 29 17:13:42 2009
@@ -16,6 +16,7 @@
 import java.util.Vector;
 
 import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.tomcat.TomcatJSPCommand;
 import org.apache.kato.katoview.commands.tomcat.TomcatThreadPoolsCommand;
 import org.apache.kato.katoview.commands.tomcat.TomcatVersionCommand;
 
@@ -34,6 +35,8 @@
 		child_commands = new Vector();
 		child_commands.add(new TomcatVersionCommand(o));
 		child_commands.add(new TomcatThreadPoolsCommand(o));
+		child_commands.add(new TomcatJSPCommand(o));
+
 	}
 	
 }

Modified: incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/helpers/KatoSearch.java
URL: http://svn.apache.org/viewvc/incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/helpers/KatoSearch.java?rev=780036&r1=780035&r2=780036&view=diff
==============================================================================
--- incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/helpers/KatoSearch.java (original)
+++ incubator/kato/branches/experimental/maven_restructure/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/helpers/KatoSearch.java Fri May 29 17:13:42 2009
@@ -19,6 +19,7 @@
 
 import org.apache.kato.image.CorruptData;
 import org.apache.kato.image.CorruptDataException;
+import org.apache.kato.image.DataUnavailable;
 import org.apache.kato.image.Image;
 import org.apache.kato.image.ImageAddressSpace;
 import org.apache.kato.image.ImageProcess;
@@ -27,8 +28,12 @@
 import org.apache.kato.java.JavaClassLoader;
 import org.apache.kato.java.JavaField;
 import org.apache.kato.java.JavaHeap;
+import org.apache.kato.java.JavaLocation;
+import org.apache.kato.java.JavaMethod;
 import org.apache.kato.java.JavaObject;
 import org.apache.kato.java.JavaRuntime;
+import org.apache.kato.java.JavaStackFrame;
+import org.apache.kato.java.JavaThread;
 
 /**
  * Provides utility classes for retrieving things from dumps
@@ -241,6 +246,56 @@
 	}
 	
 	/**
+	 * Find all instances of a JavaClass with a passed name, and all of it's
+	 * subclasses.
+	 * 
+	 * @param runtime JavaRuntime 
+	 * @param className name o
+	 * @return List of JavaClasses
+	 */
+	public static List<JavaClass> findClasses(JavaRuntime runtime, String className) {
+		LinkedList<JavaClass> list = new LinkedList<JavaClass>();
+		
+		SubclassFinder finder = new SubclassFinder(className, list);
+		
+		visitClasses(runtime, finder);
+		
+		return list;
+	}
+	
+	/**
+	 * Supports findClasses method. 
+	 *
+	 */
+	private static class SubclassFinder implements JavaClassVisitor {
+		private String clazzName;
+		private List<JavaClass> list;
+		
+		public SubclassFinder(String name, List<JavaClass> list) {
+			if (name == null) {
+				throw new IllegalArgumentException("Cannot accept null class name");
+			}
+			this.clazzName = name;
+			this.list = list;
+		}
+		
+		public boolean visit(JavaClass clazz) throws KatoException {
+			JavaClass subClass = clazz;
+			while((clazz != null) 
+					&& !(clazzName.equals(clazz.getName()))) {
+				clazz = clazz.getSuperclass();
+			}
+			
+			if (clazz != null) {
+				list.add(subClass);
+			}
+			
+			return true;
+		}
+		
+	}
+	
+	/**
 	 * Executes the passed JavaObjectVisitor over all objects on all the heaps in
 	 * the given JavaRuntime.
 	 * CorruptData objects are not passed.
@@ -283,4 +338,56 @@
 			 }
 		}
 	}
+	
+	/**
+	 * Given a JavaClass, find all threads that are executing a method in that class.
+	 * 
+	 * @param runtime JavaRuntime to search
+	 * @param clazz JavaClass to look for
+	 * @return List of JavaThreads
+	 */
+	public static List<JavaThread> findClassInThreads(JavaRuntime runtime, JavaClass clazz) {
+		List<JavaThread> list = new LinkedList<JavaThread>();
+		
+		for (Object nextThread : runtime.getThreads()) {
+			if (nextThread instanceof CorruptData) {
+				continue;
+			}
+			
+			JavaThread thread = (JavaThread) nextThread;
+			
+			// Iterate over all frames. If method is in passed class, add it to the list.
+	FRAMES:	for (Object nextFrame : thread.getStackFrames()) {
+				if (nextFrame instanceof CorruptData) {
+					continue;
+				}
+				
+				JavaStackFrame frame = (JavaStackFrame) nextFrame;
+				
+				JavaLocation location;
+				try {
+					location = frame.getLocation();
+				} catch (CorruptDataException e) {
+					continue FRAMES;
+				}
+				
+				if (location != null) {
+					try {
+						JavaMethod method = location.getMethod();
+						if (clazz.equals(method.getDeclaringClass())) {
+							list.add(thread);
+							break FRAMES;
+						}
+					} catch (CorruptDataException e) {
+						continue FRAMES;
+					} catch (DataUnavailable e) {
+						
+					}					
+				}				
+			}
+		}
+		
+		return list;
+	}
+	
 }