diff --git a/VERSION.txt b/VERSION.txt index 822079f3aca..149b4ddb5a1 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -2,6 +2,7 @@ jetty-7.2.3-SNAPSHOT + 332432 Scanner.java now always scanning the canonical form of File + 332179 Fixed formatting of negative dates + + 332703 Cleanup context scope JNDI at stop jetty-7.2.2.v20101205 5 December 2010 + JETTY-1308 327109 (re)fixed AJP handling of empty packets diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java index d6db8dda0fc..9eede93e287 100644 --- a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java +++ b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java @@ -136,6 +136,9 @@ public class LikeJettyXml server.setSendServerVersion(true); server.start(); + + System.err.println(server.dump()); + server.join(); } diff --git a/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/NamingContext.java b/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/NamingContext.java index 47f60c6f9d2..357963e58cd 100644 --- a/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/NamingContext.java +++ b/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/NamingContext.java @@ -15,8 +15,12 @@ package org.eclipse.jetty.jndi; import java.io.IOException; +import java.util.Collections; import java.util.Enumeration; +import java.util.HashMap; import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -62,27 +66,15 @@ import org.eclipse.jetty.util.log.Logger; public class NamingContext implements Context, Cloneable { private final static Logger __log=NamingUtil.__log; + private final static List __empty = Collections.emptyList(); public static final String LOCK_PROPERTY = "org.eclipse.jndi.lock"; public static final String UNLOCK_PROPERTY = "org.eclipse.jndi.unlock"; - public static final Enumeration EMPTY_ENUM = new Enumeration () - { - public boolean hasMoreElements() - { - return false; - } - - public Object nextElement () - { - throw new NoSuchElementException(); - } - }; + protected final Hashtable _env = new Hashtable(); + protected Map _bindings = new HashMap(); - protected Context _parent = null; protected String _name = null; - protected Hashtable _env = null; - protected Hashtable _bindings = new Hashtable(); protected NameParser _parser = null; @@ -103,11 +95,11 @@ public class NamingContext implements Context, Cloneable * @see * */ - public class NameEnumeration implements NamingEnumeration + public class NameEnumeration implements NamingEnumeration { - Enumeration _delegate; + Iterator _delegate; - public NameEnumeration (Enumeration e) + public NameEnumeration (Iterator e) { _delegate = e; } @@ -120,25 +112,25 @@ public class NamingContext implements Context, Cloneable public boolean hasMore () throws NamingException { - return _delegate.hasMoreElements(); + return _delegate.hasNext(); } - public Object next() + public NameClassPair next() throws NamingException { - Binding b = (Binding)_delegate.nextElement(); - return new NameClassPair (b.getName(), b.getClassName(), true); + Binding b = _delegate.next(); + return new NameClassPair(b.getName(),b.getClassName(),true); } public boolean hasMoreElements() { - return _delegate.hasMoreElements(); + return _delegate.hasNext(); } - public Object nextElement() + public NameClassPair nextElement() { - Binding b = (Binding)_delegate.nextElement(); - return new NameClassPair (b.getName(), b.getClassName(), true); + Binding b = _delegate.next(); + return new NameClassPair(b.getName(),b.getClassName(),true); } } @@ -163,11 +155,11 @@ public class NamingContext implements Context, Cloneable * @see * */ - public class BindingEnumeration implements NamingEnumeration + public class BindingEnumeration implements NamingEnumeration { - Enumeration _delegate; + Iterator _delegate; - public BindingEnumeration (Enumeration e) + public BindingEnumeration (Iterator e) { _delegate = e; } @@ -180,24 +172,24 @@ public class NamingContext implements Context, Cloneable public boolean hasMore () throws NamingException { - return _delegate.hasMoreElements(); + return _delegate.hasNext(); } - public Object next() + public Binding next() throws NamingException { - Binding b = (Binding)_delegate.nextElement(); + Binding b = (Binding)_delegate.next(); return new Binding (b.getName(), b.getClassName(), b.getObject(), true); } public boolean hasMoreElements() { - return _delegate.hasMoreElements(); + return _delegate.hasNext(); } - public Object nextElement() + public Binding nextElement() { - Binding b = (Binding)_delegate.nextElement(); + Binding b = (Binding)_delegate.next(); return new Binding (b.getName(), b.getClassName(), b.getObject(),true); } } @@ -213,39 +205,31 @@ public class NamingContext implements Context, Cloneable * @param parent immediate ancestor Context (can be null) * @param parser NameParser for this Context */ - public NamingContext(Hashtable env, + public NamingContext(Hashtable env, String name, Context parent, NameParser parser) { - if (env == null) - _env = new Hashtable(); - else - _env = new Hashtable(env); + if (env != null) + _env.putAll(env); _name = name; _parent = parent; _parser = parser; } - /*------------------------------------------------*/ /** * Creates a new NamingContext instance. * * @param env a Hashtable value */ - public NamingContext (Hashtable env) + public NamingContext (Hashtable env) { - if (env == null) - _env = new Hashtable(); - else - _env = new Hashtable(env); + if (env != null) + _env.putAll(env); } - - - /*------------------------------------------------*/ /** * Constructor @@ -253,7 +237,6 @@ public class NamingContext implements Context, Cloneable */ public NamingContext () { - _env = new Hashtable(); } @@ -268,8 +251,8 @@ public class NamingContext implements Context, Cloneable throws CloneNotSupportedException { NamingContext ctx = (NamingContext)super.clone(); - ctx._env = (Hashtable)_env.clone(); - ctx._bindings = (Hashtable)_bindings.clone(); + ctx._env.putAll(_env); + ctx._bindings.putAll(_bindings); return ctx; } @@ -564,7 +547,7 @@ public class NamingContext implements Context, Cloneable { __log.debug("Null or empty name, returning copy of this context"); NamingContext ctx = new NamingContext (_env, _name, _parent, _parser); - ctx._bindings = _bindings; + ctx._bindings=_bindings; return ctx; } @@ -698,7 +681,7 @@ public class NamingContext implements Context, Cloneable if (cname == null) { NamingContext ctx = new NamingContext (_env, _name, _parent, _parser); - ctx._bindings = _bindings; + ctx._bindings=_bindings; return ctx; } if (cname.size() == 0) @@ -812,13 +795,13 @@ public class NamingContext implements Context, Cloneable if (cname == null) { - return new NameEnumeration(EMPTY_ENUM); + return new NameEnumeration(__empty.iterator()); } if (cname.size() == 0) { - return new NameEnumeration (_bindings.elements()); + return new NameEnumeration (_bindings.values().iterator()); } @@ -895,12 +878,12 @@ public class NamingContext implements Context, Cloneable if (cname == null) { - return new BindingEnumeration(EMPTY_ENUM); + return new BindingEnumeration(__empty.iterator()); } if (cname.size() == 0) { - return new BindingEnumeration (_bindings.elements()); + return new BindingEnumeration (_bindings.values().iterator()); } diff --git a/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/local/localContextRoot.java b/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/local/localContextRoot.java index 8f61ec25253..7c187a7166e 100644 --- a/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/local/localContextRoot.java +++ b/jetty-jndi/src/main/java/org/eclipse/jetty/jndi/local/localContextRoot.java @@ -36,8 +36,7 @@ import org.eclipse.jetty.jndi.NamingContext; public class localContextRoot implements Context { private static final NamingContext __root = new NamingContext(); - - private final Hashtable _env; + private final Hashtable _env; // make a root for the static namespace local: static diff --git a/jetty-plus/src/main/java/org/eclipse/jetty/plus/jndi/NamingEntryUtil.java b/jetty-plus/src/main/java/org/eclipse/jetty/plus/jndi/NamingEntryUtil.java index ac1c705b397..1db27610b8f 100644 --- a/jetty-plus/src/main/java/org/eclipse/jetty/plus/jndi/NamingEntryUtil.java +++ b/jetty-plus/src/main/java/org/eclipse/jetty/plus/jndi/NamingEntryUtil.java @@ -185,7 +185,6 @@ public class NamingEntryUtil public static Context getContextForScope(Object scope) throws NamingException { - InitialContext ic = new InitialContext(); NameParser parser = ic.getNameParser(""); Name name = parser.parse(""); @@ -240,7 +239,7 @@ public class NamingEntryUtil if (scope==null) return ""; - String str = scope.getClass().getName()+"@"+scope.hashCode(); + String str = scope.getClass().getName()+"@"+Long.toHexString(scope.hashCode()); str=str.replace('/', '_').replace(' ', '_'); return str; } diff --git a/jetty-plus/src/main/java/org/eclipse/jetty/plus/webapp/EnvConfiguration.java b/jetty-plus/src/main/java/org/eclipse/jetty/plus/webapp/EnvConfiguration.java index 867eb93df88..f2193f86580 100644 --- a/jetty-plus/src/main/java/org/eclipse/jetty/plus/webapp/EnvConfiguration.java +++ b/jetty-plus/src/main/java/org/eclipse/jetty/plus/webapp/EnvConfiguration.java @@ -23,7 +23,9 @@ import javax.naming.Name; import javax.naming.NameNotFoundException; import javax.naming.NamingException; +import org.eclipse.jetty.jndi.NamingContext; import org.eclipse.jetty.jndi.NamingUtil; +import org.eclipse.jetty.jndi.local.localContextRoot; import org.eclipse.jetty.plus.jndi.EnvEntry; import org.eclipse.jetty.plus.jndi.NamingEntry; import org.eclipse.jetty.plus.jndi.NamingEntryUtil; @@ -128,8 +130,8 @@ public class EnvConfiguration extends AbstractConfiguration //unbind any NamingEntries that were configured in this webapp's name space try { - Context scopeContext = NamingEntryUtil.getContextForScope(context); - scopeContext.destroySubcontext(NamingEntry.__contextName); + NamingContext scopeContext = (NamingContext)NamingEntryUtil.getContextForScope(context); + scopeContext.getParent().destroySubcontext(scopeContext.getName()); } catch (NameNotFoundException e) { diff --git a/jetty-plus/src/test/java/org/eclipse/jetty/plus/jndi/TestNamingEntryUtil.java b/jetty-plus/src/test/java/org/eclipse/jetty/plus/jndi/TestNamingEntryUtil.java index ad56aa295d6..3a43c374a09 100644 --- a/jetty-plus/src/test/java/org/eclipse/jetty/plus/jndi/TestNamingEntryUtil.java +++ b/jetty-plus/src/test/java/org/eclipse/jetty/plus/jndi/TestNamingEntryUtil.java @@ -42,7 +42,7 @@ public class TestNamingEntryUtil { public String toString() { - return this.getClass().getName()+"@"+super.hashCode(); + return this.getClass().getName()+"@"+Long.toHexString(super.hashCode()); } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index c9601df3ad6..5270c5079e9 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -190,8 +190,11 @@ public class ContextHandler extends ScopedHandler implements Attributes, Server. protected void dump(Appendable out,String indent) throws IOException { out.append(toString()).append(isStarted()?" started":" STOPPED").append('\n'); - out.append(indent).append(" +-").append(String.valueOf(_attributes)).append('\n'); - out.append(indent).append(" +-").append(String.valueOf(_contextAttributes)).append('\n'); + if (Log.isDebugEnabled()) + { + out.append(indent).append(" +-").append(String.valueOf(_attributes)).append('\n'); + out.append(indent).append(" +-").append(String.valueOf(_contextAttributes)).append('\n'); + } dumpHandlers(out,indent); } diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java index c73ecc4e79e..2779affb027 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java @@ -1487,7 +1487,8 @@ public class ServletHandler extends ScopedHandler out.append(indent); out.append(" +-"); out.append(String.valueOf(f.toString())); - out.append(String.valueOf(f.getFilterHolder().getInitParameters())); + if (Log.isDebugEnabled()) + out.append(String.valueOf(f.getFilterHolder().getInitParameters())); out.append('\n'); } } @@ -1501,7 +1502,7 @@ public class ServletHandler extends ScopedHandler out.append(" +-"); out.append(String.valueOf(m)); ServletHolder h = getServlet(m.getServletName()); - if (h!=null) + if (h!=null && Log.isDebugEnabled()) out.append(String.valueOf(h.getInitParameters())); out.append('\n'); } @@ -1516,7 +1517,8 @@ public class ServletHandler extends ScopedHandler out.append(indent); out.append(" +-[]==>"); out.append(h.getName()); - out.append(String.valueOf(h.getInitParameters())); + if (Log.isDebugEnabled()) + out.append(String.valueOf(h.getInitParameters())); out.append('\n'); } } diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java index b52199aec1d..71db6d20ccc 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java @@ -1075,7 +1075,15 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL if (dir!=null && ( !dir.exists() || !dir.isDirectory() || !dir.canWrite())) throw new IllegalArgumentException("Bad temp directory: "+dir); - + + try + { + dir=dir.getCanonicalFile(); + } + catch(Exception e) + { + Log.warn(e); + } _tmpDir=dir; setAttribute(TEMPDIR,_tmpDir); }