improved debugging dumps

git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2625 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
Greg Wilkins 2011-01-04 17:44:11 +00:00
parent fd08937fab
commit 68323125b6
10 changed files with 76 additions and 7 deletions

View File

@ -320,6 +320,11 @@ public class MBeanContainer extends AbstractLifeCycle implements Container.Liste
{ {
out.append(toString()).append("\n"); out.append(toString()).append("\n");
AggregateLifeCycle.dump(out,indent,_beans.entrySet()); AggregateLifeCycle.dump(out,indent,_beans.entrySet());
} }
/* ------------------------------------------------------------ */
public String dump()
{
return AggregateLifeCycle.dump(this);
}
} }

View File

@ -0,0 +1,2 @@
Dumpable: Dumpable Object
dump():Object:INFO:Dump the nested Object state as a String

View File

@ -21,6 +21,7 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.EventListener; import java.util.EventListener;
@ -61,6 +62,8 @@ import org.eclipse.jetty.util.LazyList;
import org.eclipse.jetty.util.Loader; import org.eclipse.jetty.util.Loader;
import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.URIUtil; import org.eclipse.jetty.util.URIUtil;
import org.eclipse.jetty.util.component.AggregateLifeCycle;
import org.eclipse.jetty.util.component.Dumpable;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger; import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.util.resource.Resource;
@ -191,9 +194,11 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server.
public void dump(Appendable out,String indent) throws IOException public void dump(Appendable out,String indent) throws IOException
{ {
dumpThis(out); dumpThis(out);
dump(out,indent,TypeUtil.asList(getHandlers()),getBeans(),_initParams.entrySet(), _attributes.getAttributeEntrySet(),_contextAttributes.getAttributeEntrySet()); dump(out,indent,Collections.singletonList(new CLDump(getClassLoader())),TypeUtil.asList(getHandlers()),getBeans(),_initParams.entrySet(), _attributes.getAttributeEntrySet(),_contextAttributes.getAttributeEntrySet());
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
public Context getServletContext() public Context getServletContext()
{ {
@ -1913,4 +1918,39 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server.
} }
private static class CLDump implements Dumpable
{
final ClassLoader _loader;
CLDump(ClassLoader loader)
{
_loader=loader;
}
public String dump()
{
return AggregateLifeCycle.dump(this);
}
public void dump(Appendable out, String indent) throws IOException
{
out.append(String.valueOf(_loader)).append("\n");
if (_loader!=null)
{
Object parent = _loader.getParent();
if (parent!=null)
{
if (!(parent instanceof Dumpable))
parent=new CLDump((ClassLoader)parent);
if (_loader instanceof URLClassLoader)
AggregateLifeCycle.dump(out,indent,TypeUtil.asList(((URLClassLoader)_loader).getURLs()),Collections.singleton(parent));
else
AggregateLifeCycle.dump(out,indent,Collections.singleton(parent));
}
}
}
}
} }

View File

@ -71,6 +71,7 @@ public class ConnectHandlerConnectTest extends AbstractProxyHandlerTest
"Host: " + hostPort + "\r\n" + "Host: " + hostPort + "\r\n" +
"\r\n"; "\r\n";
Socket socket = newSocket(); Socket socket = newSocket();
socket.setSoTimeout(30000);
try try
{ {
OutputStream output = socket.getOutputStream(); OutputStream output = socket.getOutputStream();
@ -499,7 +500,7 @@ public class ConnectHandlerConnectTest extends AbstractProxyHandlerTest
while ((read = input.read()) >= 0) while ((read = input.read()) >= 0)
baos.write(read); baos.write(read);
baos.close(); baos.close();
ServletOutputStream output = httpResponse.getOutputStream(); ServletOutputStream output = httpResponse.getOutputStream();
output.println(builder.toString()); output.println(builder.toString());
output.write(baos.toByteArray()); output.write(baos.toByteArray());

View File

@ -22,6 +22,7 @@ import org.eclipse.jetty.server.DispatcherType;
import org.eclipse.jetty.http.PathMap; import org.eclipse.jetty.http.PathMap;
import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.component.AggregateLifeCycle;
import org.eclipse.jetty.util.component.Dumpable; import org.eclipse.jetty.util.component.Dumpable;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
@ -267,4 +268,9 @@ public class FilterMapping implements Dumpable
out.append(String.valueOf(this)).append("\n"); out.append(String.valueOf(this)).append("\n");
} }
/* ------------------------------------------------------------ */
public String dump()
{
return AggregateLifeCycle.dump(this);
}
} }

View File

@ -259,6 +259,12 @@ public class Holder<T> extends AbstractLifeCycle implements Dumpable
out.append(_name).append("==").append(_className).append("\n"); out.append(_name).append("==").append(_className).append("\n");
AggregateLifeCycle.dump(out,indent,_initParams.entrySet()); AggregateLifeCycle.dump(out,indent,_initParams.entrySet());
} }
/* ------------------------------------------------------------ */
public String dump()
{
return AggregateLifeCycle.dump(this);
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */

View File

@ -8,8 +8,6 @@ import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import javax.naming.Binding;
import javax.naming.Reference;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
@ -182,11 +180,17 @@ public class AggregateLifeCycle extends AbstractLifeCycle implements Destroyable
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
public String dump() public String dump()
{
return dump(this);
}
/* ------------------------------------------------------------ */
public static String dump(Dumpable dumpable)
{ {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
try try
{ {
dump(b,""); dumpable.dump(b,"");
} }
catch (IOException e) catch (IOException e)
{ {

View File

@ -4,5 +4,6 @@ import java.io.IOException;
public interface Dumpable public interface Dumpable
{ {
String dump();
void dump(Appendable out,String indent) throws IOException; void dump(Appendable out,String indent) throws IOException;
} }

View File

@ -31,6 +31,9 @@ import java.util.StringTokenizer;
import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.util.LazyList; import org.eclipse.jetty.util.LazyList;
import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.component.AggregateLifeCycle;
import org.eclipse.jetty.util.component.Dumpable;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.util.resource.ResourceCollection; import org.eclipse.jetty.util.resource.ResourceCollection;
@ -54,7 +57,7 @@ import org.eclipse.jetty.util.resource.ResourceCollection;
* classloader that loaded this class is used as the parent. * classloader that loaded this class is used as the parent.
* *
*/ */
public class WebAppClassLoader extends URLClassLoader public class WebAppClassLoader extends URLClassLoader
{ {
private final Context _context; private final Context _context;
private final ClassLoader _parent; private final ClassLoader _parent;
@ -433,4 +436,5 @@ public class WebAppClassLoader extends URLClassLoader
{ {
return "WebAppClassLoader=" + _name+"@"+Long.toHexString(hashCode()); return "WebAppClassLoader=" + _name+"@"+Long.toHexString(hashCode());
} }
} }