diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java index 21e8b0f89e9..0b5581ed984 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java @@ -16,20 +16,20 @@ package org.eclipse.jetty.client; import java.io.IOException; import java.io.InputStream; import java.net.UnknownHostException; -import java.util.Arrays; import java.util.Enumeration; import java.util.LinkedList; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; - import javax.net.ssl.SSLContext; import org.eclipse.jetty.client.security.Authentication; import org.eclipse.jetty.client.security.RealmResolver; import org.eclipse.jetty.client.security.SecurityListener; import org.eclipse.jetty.http.HttpBuffers; +import org.eclipse.jetty.http.HttpBuffersImpl; import org.eclipse.jetty.http.HttpSchemes; +import org.eclipse.jetty.io.Buffers; import org.eclipse.jetty.io.Buffers.Type; import org.eclipse.jetty.util.Attributes; import org.eclipse.jetty.util.AttributesMap; @@ -66,7 +66,7 @@ import org.eclipse.jetty.util.thread.Timeout; * @see HttpExchange * @see HttpDestination */ -public class HttpClient extends HttpBuffers implements Attributes, Dumpable +public class HttpClient extends AggregateLifeCycle implements HttpBuffers, Attributes, Dumpable { public static final int CONNECTOR_SOCKET = 0; public static final int CONNECTOR_SELECT_CHANNEL = 2; @@ -91,44 +91,46 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable private int _maxRedirects = 20; private LinkedList _registeredListeners; - private SslContextFactory _sslContextFactory; + private final SslContextFactory _sslContextFactory; private RealmResolver _realmResolver; private AttributesMap _attributes=new AttributesMap(); + private final HttpBuffersImpl _buffers= new HttpBuffersImpl(); /* ------------------------------------------------------------------------------- */ private void setBufferTypes() { if (_connectorType==CONNECTOR_SOCKET) { - setRequestBufferType(Type.BYTE_ARRAY); - setRequestHeaderType(Type.BYTE_ARRAY); - setResponseBufferType(Type.BYTE_ARRAY); - setResponseHeaderType(Type.BYTE_ARRAY); + _buffers.setRequestBufferType(Type.BYTE_ARRAY); + _buffers.setRequestHeaderType(Type.BYTE_ARRAY); + _buffers.setResponseBufferType(Type.BYTE_ARRAY); + _buffers.setResponseHeaderType(Type.BYTE_ARRAY); } else { - setRequestBufferType(Type.DIRECT); - setRequestHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT); - setResponseBufferType(Type.DIRECT); - setResponseHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT); + _buffers.setRequestBufferType(Type.DIRECT); + _buffers.setRequestHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT); + _buffers.setResponseBufferType(Type.DIRECT); + _buffers.setResponseHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT); } + } /* ------------------------------------------------------------------------------- */ public HttpClient() { this(new SslContextFactory()); - setBufferTypes(); } /* ------------------------------------------------------------------------------- */ public HttpClient(SslContextFactory sslContextFactory) { _sslContextFactory = sslContextFactory; - setBufferTypes(); + addBean(_sslContextFactory); + addBean(_buffers); } /* ------------------------------------------------------------------------------- */ @@ -149,25 +151,6 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable _connectBlocking = connectBlocking; } - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.util.component.Dumpable#dump() - */ - public String dump() - { - return AggregateLifeCycle.dump(this); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.util.component.Dumpable#dump(java.lang.Appendable, java.lang.String) - */ - public void dump(Appendable out, String indent) throws IOException - { - out.append(String.valueOf(this)).append("\n"); - AggregateLifeCycle.dump(out,indent,Arrays.asList(_threadPool,_connector),_destinations.values()); - } - /* ------------------------------------------------------------------------------- */ public void send(HttpExchange exchange) throws IOException { @@ -183,25 +166,20 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable */ public ThreadPool getThreadPool() { - if (_threadPool==null) - { - QueuedThreadPool pool = new QueuedThreadPool(); - pool.setMaxThreads(16); - pool.setDaemon(true); - pool.setName("HttpClient"); - _threadPool = pool; - } - return _threadPool; } /* ------------------------------------------------------------ */ - /** + /** Set the ThreadPool. + * The threadpool passed is added via {@link #addBean(Object)} so that + * it's lifecycle may be managed as a {@link AggregateLifeCycle}. * @param threadPool the threadPool to set */ public void setThreadPool(ThreadPool threadPool) { + removeBean(_threadPool); _threadPool = threadPool; + addBean(_threadPool); } @@ -338,6 +316,7 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable } + /* ------------------------------------------------------------ */ /** * Registers a listener that can listen to the stream of execution between the client and the * server and influence events. Sequential calls to the method wrapper sequentially wrap the preceding @@ -422,33 +401,26 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable protected void doStart() throws Exception { setBufferTypes(); - super.doStart(); _timeoutQ.setDuration(_timeout); _timeoutQ.setNow(); _idleTimeoutQ.setDuration(_idleTimeout); _idleTimeoutQ.setNow(); - if (_threadPool == null) - getThreadPool(); - - if (_threadPool instanceof LifeCycle) + if (_threadPool==null) { - ((LifeCycle)_threadPool).start(); + QueuedThreadPool pool = new LocalQueuedThreadPool(); + pool.setMaxThreads(16); + pool.setDaemon(true); + pool.setName("HttpClient"); + _threadPool = pool; + addBean(_threadPool,true); } - _sslContextFactory.start(); + _connector=(_connectorType == CONNECTOR_SELECT_CHANNEL)?new SelectConnector(this):new SocketConnector(this); + addBean(_connector,true); - if (_connectorType == CONNECTOR_SELECT_CHANNEL) - { - - _connector = new SelectConnector(this); - } - else - { - _connector = new SocketConnector(this); - } - _connector.start(); + super.doStart(); _threadPool.dispatch(new Runnable() { @@ -462,7 +434,7 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable { Thread.sleep(200); } - catch (InterruptedException e) + catch (InterruptedException ignored) { } } @@ -470,32 +442,25 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable }); } - /* ------------------------------------------------------------ */ - long getNow() - { - return _timeoutQ.getNow(); - } - /* ------------------------------------------------------------ */ @Override protected void doStop() throws Exception { - _connector.stop(); - _connector = null; - _sslContextFactory.stop(); - - if (_threadPool instanceof LifeCycle) - { - ((LifeCycle)_threadPool).stop(); - } for (HttpDestination destination : _destinations.values()) - { destination.close(); - } _timeoutQ.cancelAll(); _idleTimeoutQ.cancelAll(); + super.doStop(); + + if (_threadPool instanceof LocalQueuedThreadPool) + { + removeBean(_threadPool); + _threadPool = null; + } + + removeBean(_connector); } /* ------------------------------------------------------------ */ @@ -667,6 +632,96 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable _maxRedirects = redirects; } + public int getRequestBufferSize() + { + return _buffers.getRequestBufferSize(); + } + + public void setRequestBufferSize(int requestBufferSize) + { + _buffers.setRequestBufferSize(requestBufferSize); + } + + public int getRequestHeaderSize() + { + return _buffers.getRequestHeaderSize(); + } + + public void setRequestHeaderSize(int requestHeaderSize) + { + _buffers.setRequestHeaderSize(requestHeaderSize); + } + + public int getResponseBufferSize() + { + return _buffers.getResponseBufferSize(); + } + + public void setResponseBufferSize(int responseBufferSize) + { + _buffers.setResponseBufferSize(responseBufferSize); + } + + public int getResponseHeaderSize() + { + return _buffers.getResponseHeaderSize(); + } + + public void setResponseHeaderSize(int responseHeaderSize) + { + _buffers.setResponseHeaderSize(responseHeaderSize); + } + + public Type getRequestBufferType() + { + return _buffers.getRequestBufferType(); + } + + public Type getRequestHeaderType() + { + return _buffers.getRequestHeaderType(); + } + + public Type getResponseBufferType() + { + return _buffers.getResponseBufferType(); + } + + public Type getResponseHeaderType() + { + return _buffers.getResponseHeaderType(); + } + + public void setRequestBuffers(Buffers requestBuffers) + { + _buffers.setRequestBuffers(requestBuffers); + } + + public void setResponseBuffers(Buffers responseBuffers) + { + _buffers.setResponseBuffers(responseBuffers); + } + + public Buffers getRequestBuffers() + { + return _buffers.getRequestBuffers(); + } + + public Buffers getResponseBuffers() + { + return _buffers.getResponseBuffers(); + } + + public void setMaxBuffers(int maxBuffers) + { + _buffers.setMaxBuffers(maxBuffers); + } + + public int getMaxBuffers() + { + return _buffers.getMaxBuffers(); + } + /* ------------------------------------------------------------ */ @Deprecated public String getTrustStoreLocation() @@ -839,4 +894,8 @@ public class HttpClient extends HttpBuffers implements Attributes, Dumpable { _sslContextFactory.setSecureRandomAlgorithm(secureRandomAlgorithm); } + + private static class LocalQueuedThreadPool extends QueuedThreadPool + { + } } diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/SelectConnector.java b/jetty-client/src/main/java/org/eclipse/jetty/client/SelectConnector.java index b3c93a7dee8..e1c282e74db 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/SelectConnector.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/SelectConnector.java @@ -18,10 +18,8 @@ import java.net.SocketTimeoutException; import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; import java.nio.channels.UnresolvedAddressException; -import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - import javax.net.ssl.SSLEngine; import org.eclipse.jetty.io.AsyncEndPoint; @@ -32,7 +30,6 @@ import org.eclipse.jetty.io.nio.AsyncConnection; import org.eclipse.jetty.io.nio.SelectChannelEndPoint; import org.eclipse.jetty.io.nio.SelectorManager; import org.eclipse.jetty.io.nio.SslConnection; -import org.eclipse.jetty.util.component.AbstractLifeCycle; import org.eclipse.jetty.util.component.AggregateLifeCycle; import org.eclipse.jetty.util.component.Dumpable; import org.eclipse.jetty.util.log.Log; @@ -41,7 +38,7 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.Timeout; import org.eclipse.jetty.util.thread.Timeout.Task; -class SelectConnector extends AbstractLifeCycle implements HttpClient.Connector, Dumpable +class SelectConnector extends AggregateLifeCycle implements HttpClient.Connector, Dumpable { private static final Logger LOG = Log.getLogger(SelectConnector.class); @@ -49,39 +46,16 @@ class SelectConnector extends AbstractLifeCycle implements HttpClient.Connector, private final Manager _selectorManager=new Manager(); private final Map _connectingChannels = new ConcurrentHashMap(); + /* ------------------------------------------------------------ */ /** - * @param httpClient the HttpClient this connector is associated to + * @param httpClient the HttpClient this connector is associated to. It is + * added via the {@link #addBean(Object, boolean)} as an unmanaged bean. */ SelectConnector(HttpClient httpClient) { _httpClient = httpClient; - } - - /* ------------------------------------------------------------ */ - @Override - protected void doStart() throws Exception - { - super.doStart(); - - _selectorManager.start(); - } - - /* ------------------------------------------------------------ */ - @Override - protected void doStop() throws Exception - { - _selectorManager.stop(); - } - - public String dump() - { - return AggregateLifeCycle.dump(this); - } - - public void dump(Appendable out, String indent) throws IOException - { - out.append(String.valueOf(this)).append("\n"); - AggregateLifeCycle.dump(out, indent, Arrays.asList(_selectorManager)); + addBean(_httpClient,false); + addBean(_selectorManager,true); } /* ------------------------------------------------------------ */ @@ -97,9 +71,9 @@ class SelectConnector extends AbstractLifeCycle implements HttpClient.Connector, if (_httpClient.isConnectBlocking()) { - channel.socket().connect(address.toSocketAddress(), _httpClient.getConnectTimeout()); - channel.configureBlocking(false); - _selectorManager.register( channel, destination ); + channel.socket().connect(address.toSocketAddress(), _httpClient.getConnectTimeout()); + channel.configureBlocking(false); + _selectorManager.register( channel, destination ); } else { @@ -451,11 +425,10 @@ class SelectConnector extends AbstractLifeCycle implements HttpClient.Connector, { return _endp.isCheckForIdle(); } - + public String toString() { return "Upgradable:"+_endp.toString(); } - } } diff --git a/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/DeploymentManager.java b/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/DeploymentManager.java index fb8e1a5d36b..afe06a80e1f 100644 --- a/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/DeploymentManager.java +++ b/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/DeploymentManager.java @@ -139,6 +139,12 @@ public class DeploymentManager extends AggregateLifeCycle } } + /* ------------------------------------------------------------ */ + /** Set the AppProviders. + * The providers passed are added via {@link #addBean(Object)} so that + * their lifecycles may be managed as a {@link AggregateLifeCycle}. + * @param providers + */ public void setAppProviders(Collection providers) { if (isRunning()) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffers.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffers.java index 28c5ad13bdf..a502e72567f 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffers.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffers.java @@ -19,211 +19,85 @@ import org.eclipse.jetty.util.component.AbstractLifeCycle; /* ------------------------------------------------------------ */ /** Abstract Buffer pool. - * simple unbounded pool of buffers for header, request and response sizes. - * */ -public class HttpBuffers extends AbstractLifeCycle +public interface HttpBuffers { - private int _requestBufferSize=16*1024; - private int _requestHeaderSize=6*1024; - private int _responseBufferSize=32*1024; - private int _responseHeaderSize=6*1024; - private int _maxBuffers=1024; - - private Buffers.Type _requestBufferType=Buffers.Type.BYTE_ARRAY; - private Buffers.Type _requestHeaderType=Buffers.Type.BYTE_ARRAY; - private Buffers.Type _responseBufferType=Buffers.Type.BYTE_ARRAY; - private Buffers.Type _responseHeaderType=Buffers.Type.BYTE_ARRAY; - - private Buffers _requestBuffers; - private Buffers _responseBuffers; - - - public HttpBuffers() - { - super(); - } - /** * @return the requestBufferSize */ - public int getRequestBufferSize() - { - return _requestBufferSize; - } + public int getRequestBufferSize(); /** * @param requestBufferSize the requestBufferSize to set */ - public void setRequestBufferSize(int requestBufferSize) - { - _requestBufferSize = requestBufferSize; - } + public void setRequestBufferSize(int requestBufferSize); /** * @return the requestHeaderSize */ - public int getRequestHeaderSize() - { - return _requestHeaderSize; - } + public int getRequestHeaderSize(); /** * @param requestHeaderSize the requestHeaderSize to set */ - public void setRequestHeaderSize(int requestHeaderSize) - { - _requestHeaderSize = requestHeaderSize; - } + public void setRequestHeaderSize(int requestHeaderSize); /** * @return the responseBufferSize */ - public int getResponseBufferSize() - { - return _responseBufferSize; - } + public int getResponseBufferSize(); /** * @param responseBufferSize the responseBufferSize to set */ - public void setResponseBufferSize(int responseBufferSize) - { - _responseBufferSize = responseBufferSize; - } + public void setResponseBufferSize(int responseBufferSize); /** * @return the responseHeaderSize */ - public int getResponseHeaderSize() - { - return _responseHeaderSize; - } + public int getResponseHeaderSize(); /** * @param responseHeaderSize the responseHeaderSize to set */ - public void setResponseHeaderSize(int responseHeaderSize) - { - _responseHeaderSize = responseHeaderSize; - } + public void setResponseHeaderSize(int responseHeaderSize); /** * @return the requestBufferType */ - public Buffers.Type getRequestBufferType() - { - return _requestBufferType; - } - - /** - * @param requestBufferType the requestBufferType to set - */ - protected void setRequestBufferType(Buffers.Type requestBufferType) - { - _requestBufferType = requestBufferType; - } + public Buffers.Type getRequestBufferType(); /** * @return the requestHeaderType */ - public Buffers.Type getRequestHeaderType() - { - return _requestHeaderType; - } - - /** - * @param requestHeaderType the requestHeaderType to set - */ - protected void setRequestHeaderType(Buffers.Type requestHeaderType) - { - _requestHeaderType = requestHeaderType; - } + public Buffers.Type getRequestHeaderType(); /** * @return the responseBufferType */ - public Buffers.Type getResponseBufferType() - { - return _responseBufferType; - } - - /** - * @param responseBufferType the responseBufferType to set - */ - protected void setResponseBufferType(Buffers.Type responseBufferType) - { - _responseBufferType = responseBufferType; - } + public Buffers.Type getResponseBufferType(); /** * @return the responseHeaderType */ - public Buffers.Type getResponseHeaderType() - { - return _responseHeaderType; - } - - /** - * @param responseHeaderType the responseHeaderType to set - */ - protected void setResponseHeaderType(Buffers.Type responseHeaderType) - { - _responseHeaderType = responseHeaderType; - } + public Buffers.Type getResponseHeaderType(); /** * @param requestBuffers the requestBuffers to set */ - public void setRequestBuffers(Buffers requestBuffers) - { - _requestBuffers = requestBuffers; - } + public void setRequestBuffers(Buffers requestBuffers); /** * @param responseBuffers the responseBuffers to set */ - public void setResponseBuffers(Buffers responseBuffers) - { - _responseBuffers = responseBuffers; - } + public void setResponseBuffers(Buffers responseBuffers); - @Override - protected void doStart() - throws Exception - { - _requestBuffers=BuffersFactory.newBuffers(_requestHeaderType,_requestHeaderSize,_requestBufferType,_requestBufferSize,_requestBufferType,getMaxBuffers()); - _responseBuffers=BuffersFactory.newBuffers(_responseHeaderType,_responseHeaderSize,_responseBufferType,_responseBufferSize,_responseBufferType,getMaxBuffers()); - super.doStart(); - } - - @Override - protected void doStop() - throws Exception - { - _requestBuffers=null; - _responseBuffers=null; - } + public Buffers getRequestBuffers(); - public Buffers getRequestBuffers() - { - return _requestBuffers; - } - + public Buffers getResponseBuffers(); - public Buffers getResponseBuffers() - { - return _responseBuffers; - } + public void setMaxBuffers(int maxBuffers); - public void setMaxBuffers(int maxBuffers) - { - _maxBuffers = maxBuffers; - } - - public int getMaxBuffers() - { - return _maxBuffers; - } + public int getMaxBuffers(); } diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffersImpl.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffersImpl.java new file mode 100644 index 00000000000..43db337e73c --- /dev/null +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpBuffersImpl.java @@ -0,0 +1,233 @@ +// ======================================================================== +// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== + +package org.eclipse.jetty.http; + +import org.eclipse.jetty.io.Buffers; +import org.eclipse.jetty.io.BuffersFactory; +import org.eclipse.jetty.util.component.AbstractLifeCycle; + +/* ------------------------------------------------------------ */ +/** Abstract Buffer pool. + * simple unbounded pool of buffers for header, request and response sizes. + * + */ +public class HttpBuffersImpl extends AbstractLifeCycle implements HttpBuffers +{ + private int _requestBufferSize=16*1024; + private int _requestHeaderSize=6*1024; + private int _responseBufferSize=32*1024; + private int _responseHeaderSize=6*1024; + private int _maxBuffers=1024; + + private Buffers.Type _requestBufferType=Buffers.Type.BYTE_ARRAY; + private Buffers.Type _requestHeaderType=Buffers.Type.BYTE_ARRAY; + private Buffers.Type _responseBufferType=Buffers.Type.BYTE_ARRAY; + private Buffers.Type _responseHeaderType=Buffers.Type.BYTE_ARRAY; + + private Buffers _requestBuffers; + private Buffers _responseBuffers; + + + public HttpBuffersImpl() + { + super(); + } + + /** + * @return the requestBufferSize + */ + public int getRequestBufferSize() + { + return _requestBufferSize; + } + + /** + * @param requestBufferSize the requestBufferSize to set + */ + public void setRequestBufferSize(int requestBufferSize) + { + _requestBufferSize = requestBufferSize; + } + + /** + * @return the requestHeaderSize + */ + public int getRequestHeaderSize() + { + return _requestHeaderSize; + } + + /** + * @param requestHeaderSize the requestHeaderSize to set + */ + public void setRequestHeaderSize(int requestHeaderSize) + { + _requestHeaderSize = requestHeaderSize; + } + + /** + * @return the responseBufferSize + */ + public int getResponseBufferSize() + { + return _responseBufferSize; + } + + /** + * @param responseBufferSize the responseBufferSize to set + */ + public void setResponseBufferSize(int responseBufferSize) + { + _responseBufferSize = responseBufferSize; + } + + /** + * @return the responseHeaderSize + */ + public int getResponseHeaderSize() + { + return _responseHeaderSize; + } + + /** + * @param responseHeaderSize the responseHeaderSize to set + */ + public void setResponseHeaderSize(int responseHeaderSize) + { + _responseHeaderSize = responseHeaderSize; + } + + /** + * @return the requestBufferType + */ + public Buffers.Type getRequestBufferType() + { + return _requestBufferType; + } + + /** + * @param requestBufferType the requestBufferType to set + */ + public void setRequestBufferType(Buffers.Type requestBufferType) + { + _requestBufferType = requestBufferType; + } + + /** + * @return the requestHeaderType + */ + public Buffers.Type getRequestHeaderType() + { + return _requestHeaderType; + } + + /** + * @param requestHeaderType the requestHeaderType to set + */ + public void setRequestHeaderType(Buffers.Type requestHeaderType) + { + _requestHeaderType = requestHeaderType; + } + + /** + * @return the responseBufferType + */ + public Buffers.Type getResponseBufferType() + { + return _responseBufferType; + } + + /** + * @param responseBufferType the responseBufferType to set + */ + public void setResponseBufferType(Buffers.Type responseBufferType) + { + _responseBufferType = responseBufferType; + } + + /** + * @return the responseHeaderType + */ + public Buffers.Type getResponseHeaderType() + { + return _responseHeaderType; + } + + /** + * @param responseHeaderType the responseHeaderType to set + */ + public void setResponseHeaderType(Buffers.Type responseHeaderType) + { + _responseHeaderType = responseHeaderType; + } + + /** + * @param requestBuffers the requestBuffers to set + */ + public void setRequestBuffers(Buffers requestBuffers) + { + _requestBuffers = requestBuffers; + } + + /** + * @param responseBuffers the responseBuffers to set + */ + public void setResponseBuffers(Buffers responseBuffers) + { + _responseBuffers = responseBuffers; + } + + @Override + protected void doStart() + throws Exception + { + _requestBuffers=BuffersFactory.newBuffers(_requestHeaderType,_requestHeaderSize,_requestBufferType,_requestBufferSize,_requestBufferType,getMaxBuffers()); + _responseBuffers=BuffersFactory.newBuffers(_responseHeaderType,_responseHeaderSize,_responseBufferType,_responseBufferSize,_responseBufferType,getMaxBuffers()); + super.doStart(); + } + + @Override + protected void doStop() + throws Exception + { + _requestBuffers=null; + _responseBuffers=null; + } + + public Buffers getRequestBuffers() + { + return _requestBuffers; + } + + + public Buffers getResponseBuffers() + { + return _responseBuffers; + } + + public void setMaxBuffers(int maxBuffers) + { + _maxBuffers = maxBuffers; + } + + public int getMaxBuffers() + { + return _maxBuffers; + } + + public String toString() + { + return _requestBuffers+"/"+_responseBuffers; + } +} diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractBuffers.java b/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractBuffers.java index ef828361357..b94710af5ca 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractBuffers.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractBuffers.java @@ -58,7 +58,7 @@ public abstract class AbstractBuffers implements Buffers } throw new IllegalStateException(); } - + /* ------------------------------------------------------------ */ /** * Create a new content Buffer @@ -77,7 +77,7 @@ public abstract class AbstractBuffers implements Buffers } throw new IllegalStateException(); } - + /* ------------------------------------------------------------ */ /** * Create a new content Buffer @@ -142,4 +142,9 @@ public abstract class AbstractBuffers implements Buffers return false; } -} \ No newline at end of file + /* ------------------------------------------------------------ */ + public String toString() + { + return String.format("%s [%d,%d]", getClass().getSimpleName(), _headerSize, _bufferSize); + } +} diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/PooledBuffers.java b/jetty-io/src/main/java/org/eclipse/jetty/io/PooledBuffers.java index 90f297e73d4..194eb9bf71b 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/PooledBuffers.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/PooledBuffers.java @@ -25,7 +25,7 @@ public class PooledBuffers extends AbstractBuffers _otherBuffers=bufferType==otherType; _maxSize=maxSize; } - + /* ------------------------------------------------------------ */ public Buffer getHeader() { @@ -55,17 +55,17 @@ public class PooledBuffers extends AbstractBuffers return getHeader(); if (_otherBuffers && size==getBufferSize()) return getBuffer(); - + // Look for an other buffer Buffer buffer = _others.poll(); - + // consume all other buffers until one of the right size is found while (buffer!=null && buffer.capacity()!=size) { _size.decrementAndGet(); buffer = _others.poll(); } - + if (buffer==null) buffer=newBuffer(size); else @@ -89,7 +89,16 @@ public class PooledBuffers extends AbstractBuffers else if (isBuffer(buffer)) _buffers.add(buffer); else - _others.add(buffer); + _others.add(buffer); } } + + public String toString() + { + return String.format("%s [%d/%d@%d,%d/%d@%d,%d/%d@-]", + getClass().getSimpleName(), + _headers.size(),_maxSize,_headerSize, + _buffers.size(),_maxSize,_bufferSize, + _others.size(),_maxSize); + } } diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java index eaeabc88624..a28b46ab824 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java @@ -260,7 +260,7 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa for (int i=0;i javax.mail mail - ${javax-mail-version} javax.activation diff --git a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java b/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java index 5cc7bdfd2d0..c9be35939cd 100644 --- a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java +++ b/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java @@ -4,17 +4,15 @@ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. -// The Eclipse Public License is available at +// The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php -// You may elect to redistribute this code under either of these licenses. +// You may elect to redistribute this code under either of these licenses. // ======================================================================== package org.eclipse.jetty.monitor; -import static org.junit.Assert.assertEquals; - import java.io.File; import java.io.IOException; import java.io.PrintWriter; @@ -22,7 +20,6 @@ import java.lang.management.ManagementFactory; import java.util.Collection; import java.util.Iterator; import java.util.TreeSet; - import javax.management.MBeanServer; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -35,13 +32,12 @@ import org.eclipse.jetty.client.security.SimpleRealmResolver; import org.eclipse.jetty.http.HttpMethods; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.jmx.MBeanContainer; -import org.eclipse.jetty.monitor.JMXMonitor; import org.eclipse.jetty.monitor.jmx.ConsoleNotifier; import org.eclipse.jetty.monitor.jmx.EventNotifier; import org.eclipse.jetty.monitor.jmx.EventState; +import org.eclipse.jetty.monitor.jmx.EventState.TriggerState; import org.eclipse.jetty.monitor.jmx.EventTrigger; import org.eclipse.jetty.monitor.jmx.MonitorAction; -import org.eclipse.jetty.monitor.jmx.EventState.TriggerState; import org.eclipse.jetty.monitor.triggers.AndEventTrigger; import org.eclipse.jetty.monitor.triggers.AttrEventTrigger; import org.eclipse.jetty.monitor.triggers.EqualToAttrEventTrigger; @@ -61,6 +57,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.assertEquals; + /* ------------------------------------------------------------ */ /** @@ -81,93 +79,93 @@ public class AttrEventTriggerTest File docRoot = new File("target/test-output/docroot/"); docRoot.mkdirs(); docRoot.deleteOnExit(); - + System.setProperty("org.eclipse.jetty.util.log.DEBUG",""); _server = new Server(); - + SelectChannelConnector connector = new SelectChannelConnector(); _server.addConnector(connector); - + _handler = new TestHandler(); _server.setHandler(_handler); - + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); mBeanContainer.addBean(Log.getLog()); _counter = _handler.getRequestCounter(); mBeanContainer.addBean(_counter); - - _server.addBean(mBeanContainer); - _server.getContainer().addEventListener(mBeanContainer); + + _server.addBean(mBeanContainer, true); + _server.getContainer().addEventListener(mBeanContainer); _server.start(); - + startClient(null); - + _monitor = new JMXMonitor(); - - int port = _server.getConnectors()[0].getLocalPort(); + + int port = connector.getLocalPort(); _requestUrl = "http://localhost:"+port+ "/"; } - + @After public void tearDown() throws Exception { stopClient(); - + if (_server != null) { _server.stop(); _server = null; - } + } } - + @Test public void testNoCondition() throws Exception { long requestCount = 10; - - AttrEventTrigger trigger = + + AttrEventTrigger trigger = new AttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter"); EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(1,requestCount); assertEquals(result, action.getHits()); } - + @Test public void testEqual_TRUE() throws Exception { long requestCount = 10; long testValue = 5; - - EqualToAttrEventTrigger trigger = + + EqualToAttrEventTrigger trigger = new EqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter",testValue); EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(testValue); assertEquals(result, action.getHits()); } - + @Test public void testEqual_FALSE() throws Exception { long requestCount = 10; long testValue = 11; - - EqualToAttrEventTrigger trigger = + + EqualToAttrEventTrigger trigger = new EqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testValue); @@ -175,19 +173,19 @@ public class AttrEventTriggerTest CounterAction action = new CounterAction(trigger, notifier, 500, 100); performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(); assertEquals(result, action.getHits()); } - + @Test public void testLowerLimit() throws Exception { long requestCount = 10; long testRangeLow = 5; - - GreaterThanAttrEventTrigger trigger = + + GreaterThanAttrEventTrigger trigger = new GreaterThanAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow); @@ -195,27 +193,27 @@ public class AttrEventTriggerTest CounterAction action = new CounterAction(trigger, notifier, 500, 100); performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(6,10); assertEquals(result, action.getHits()); } - + @Test public void testLowerLimitIncl() throws Exception { long requestCount = 10; long testRangeLow = 5; - - GreaterThanOrEqualToAttrEventTrigger trigger = + + GreaterThanOrEqualToAttrEventTrigger trigger = new GreaterThanOrEqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow); - + EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(5,10); assertEquals(result, action.getHits()); } @@ -226,8 +224,8 @@ public class AttrEventTriggerTest { long requestCount = 10; long testRangeHigh = 5; - - LessThanAttrEventTrigger trigger = + + LessThanAttrEventTrigger trigger = new LessThanAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeHigh); @@ -235,11 +233,11 @@ public class AttrEventTriggerTest CounterAction action = new CounterAction(trigger, notifier, 500, 100); performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(1,4); assertEquals(result, action.getHits()); } - + @Test public void testUpperLimitIncl() @@ -247,8 +245,8 @@ public class AttrEventTriggerTest { long requestCount = 10; long testRangeHigh = 5; - - LessThanOrEqualToAttrEventTrigger trigger = + + LessThanOrEqualToAttrEventTrigger trigger = new LessThanOrEqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeHigh); @@ -256,11 +254,11 @@ public class AttrEventTriggerTest CounterAction action = new CounterAction(trigger, notifier, 500, 100); performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(1,5); assertEquals(result, action.getHits()); } - + @Test public void testRangeInclusive() throws Exception @@ -268,20 +266,20 @@ public class AttrEventTriggerTest long requestCount = 10; long testRangeLow = 3; long testRangeHigh = 8; - - RangeInclAttrEventTrigger trigger = + + RangeInclAttrEventTrigger trigger = new RangeInclAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow, testRangeHigh); - + EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(testRangeLow,testRangeHigh); assertEquals(result, action.getHits()); } - + @Test public void testInsideRangeExclusive() throws Exception @@ -289,20 +287,20 @@ public class AttrEventTriggerTest long requestCount = 10; long testRangeLow = 3; long testRangeHigh = 8; - - RangeAttrEventTrigger trigger = + + RangeAttrEventTrigger trigger = new RangeAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow, testRangeHigh); - + EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(testRangeLow+1,testRangeHigh-1); assertEquals(result, action.getHits()); } - + @Test public void testRangeComposite() throws Exception @@ -310,23 +308,23 @@ public class AttrEventTriggerTest long requestCount = 10; long testRangeLow = 4; long testRangeHigh = 7; - - GreaterThanAttrEventTrigger trigger1 = + + GreaterThanAttrEventTrigger trigger1 = new GreaterThanAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow); - LessThanOrEqualToAttrEventTrigger trigger2 = + LessThanOrEqualToAttrEventTrigger trigger2 = new LessThanOrEqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeHigh); AndEventTrigger trigger = new AndEventTrigger(trigger1, trigger2); EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(testRangeLow+1,testRangeHigh); assertEquals(result, action.getHits()); } - + @Test public void testRangeOuter() throws Exception @@ -334,23 +332,23 @@ public class AttrEventTriggerTest long requestCount = 10; long testRangeLow = 4; long testRangeHigh = 7; - - LessThanOrEqualToAttrEventTrigger trigger1 = + + LessThanOrEqualToAttrEventTrigger trigger1 = new LessThanOrEqualToAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeLow); - GreaterThanAttrEventTrigger trigger2 = + GreaterThanAttrEventTrigger trigger2 = new GreaterThanAttrEventTrigger("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", testRangeHigh); OrEventTrigger trigger = new OrEventTrigger(trigger1, trigger2); EventNotifier notifier = new ConsoleNotifier("%s"); CounterAction action = new CounterAction(trigger, notifier, 500, 100); - + performTest(action, requestCount, 1000); - + ResultSet result = new ResultSet(1,testRangeLow,testRangeHigh+1, requestCount); assertEquals(result, action.getHits()); } - + protected void performTest(MonitorAction action, long count, long interval) throws Exception { @@ -363,17 +361,17 @@ public class AttrEventTriggerTest ContentExchange getExchange = new ContentExchange(); getExchange.setURL(_requestUrl); getExchange.setMethod(HttpMethods.GET); - + _client.send(getExchange); int state = getExchange.waitForDone(); - + String content = ""; int responseStatus = getExchange.getResponseStatus(); if (responseStatus == HttpStatus.OK_200) { content = getExchange.getResponseContent(); - } - + } + assertEquals(HttpStatus.OK_200,responseStatus); Thread.sleep(interval); } @@ -382,12 +380,12 @@ public class AttrEventTriggerTest break; } } - + Thread.sleep(interval); _monitor.removeActions(action); } - + protected void startClient(Realm realm) throws Exception { @@ -397,7 +395,7 @@ public class AttrEventTriggerTest _client.setRealmResolver(new SimpleRealmResolver(realm)); _client.start(); } - + protected void stopClient() throws Exception { @@ -412,7 +410,7 @@ public class AttrEventTriggerTest extends AbstractHandler { private RequestCounter _counter = new RequestCounter(); - + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException @@ -421,40 +419,40 @@ public class AttrEventTriggerTest return; } _counter.increment(); - + response.setContentType("text/plain"); response.setStatus(HttpServletResponse.SC_OK); PrintWriter writer = response.getWriter(); writer.println("===TEST RESPONSE==="); baseRequest.setHandled(true); } - + public RequestCounter getRequestCounter() { return _counter; } } - + protected static class ResultSet extends TreeSet - { + { public ResultSet() {} - + public ResultSet(long value) { add(value); } - + public ResultSet(long start, long end) { addEntries(start, end); } - + public ResultSet(long start, long pause, long resume, long end) { addEntries(start, pause); addEntries(resume, end); } - + public void addEntries(long start, long stop) { if (start > 0 && stop > 0) @@ -471,23 +469,23 @@ public class AttrEventTriggerTest return (this.size() == set.size()) && containsAll(set); } } - + protected static class CounterAction extends MonitorAction { private ResultSet _hits = new ResultSet(); - + public CounterAction(EventTrigger trigger, EventNotifier notifier, long interval, long delay) { super(trigger, notifier, interval, delay); } - + public void execute(EventTrigger trigger, EventState state, long timestamp) { if (trigger != null && state != null) { Collection values = state.values(); - + Iterator it = values.iterator(); while(it.hasNext()) { @@ -500,7 +498,7 @@ public class AttrEventTriggerTest } } } - + public ResultSet getHits() { return _hits; diff --git a/jetty-nosql/pom.xml b/jetty-nosql/pom.xml index 5ea21e24b8b..bac397d6300 100644 --- a/jetty-nosql/pom.xml +++ b/jetty-nosql/pom.xml @@ -68,7 +68,6 @@ junit junit - ${junit4-version} test diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java index 76f85ae8a5c..63ac8212242 100644 --- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java +++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java @@ -79,7 +79,7 @@ public class NoSqlSession extends AbstractSession __log.debug("NoSqlSession:access:active "+_active); if (_active.incrementAndGet()==1) { - int period=_manager.getStalePeriod()*1000; + long period=_manager.getStalePeriod()*1000L; if (period==0) refresh(); else if (period>0) diff --git a/jetty-osgi/test-jetty-osgi/pom.xml b/jetty-osgi/test-jetty-osgi/pom.xml index defad09512e..5ed595e9b21 100644 --- a/jetty-osgi/test-jetty-osgi/pom.xml +++ b/jetty-osgi/test-jetty-osgi/pom.xml @@ -49,13 +49,11 @@ org.eclipse.jetty jetty-webapp - ${project.version} runtime org.eclipse.jetty jetty-deploy - ${project.version} runtime @@ -67,7 +65,6 @@ org.eclipse.jetty jetty-servlet - ${project.version} runtime @@ -79,13 +76,11 @@ org.eclipse.jetty jetty-jmx - ${project.version} runtime org.eclipse.jetty jetty-util - ${project.version} runtime @@ -97,7 +92,6 @@ org.eclipse.jetty jetty-websocket - ${project.version} runtime - - junit.framework.Assert - junit.framework.TestCase - - - junit - junit - - - org.eclipse.jdt.core.compiler - ecj - - ecj - - - org.mortbay.jetty - jsp-2.1-glassfish - - - - - ch.qos.logback - logback-core - - ch.qos.logback.core.joran.JoranConfiguratorBase - - liblogback-java - - - - org.apache.geronimo.specs - geronimo-jaspic_1.0_spec - - - - - org.eclipse.equinox.http - servlet - eclipse-platform - - - org.eclipse.osgi - services - - - - - org.apache.geronimo.specs - geronimo-jta_1.1_spec - libgeronimo-jta-1.1-spec-1.1.1-java - - - - org.eclipse - osgi - - org.osgi.framework.BundleContext - - - - - - org.slf4j - jcl-over-slf4j - libslf4j-java - - - - asm - asm-commons - libasm3-java - - - - ant - ant - ant - ant - - - asm - asm - libasm3-java - - - - asm - asm-tree - libasm3-java - - - - javax.mail - mail - - javax.mail.Authenticator - javax.mail.PasswordAuthentication - javax.mail.Session - - libgnumail-java - sun-mail - - - org.apache.geronimo.specs - geronimo-annotation_1.0_spec - - - - - org.slf4j - log4j-over-slf4j - libslf4j-java - - - - org.testng - testng - testng - - - - org.mortbay.jetty - servlet-api - 3.0.20100224 - - javax.servlet.AsyncContext - javax.servlet.AsyncEvent - javax.servlet.AsyncListener - - - - - - org.slf4j - slf4j-api - - org.slf4j.Logger - - libslf4j-java - - - - org.mortbay.jetty - jetty-util - - - - - javax.activation - activation - libgnujav-java - sun-jaf - - - - - jetty-annotations - jetty-jaspi - jetty-plus - example-jetty-embedded - test-continuation - test-continuation-jetty6 - test-jetty-servlet - - - - jetty-osgi - jetty-osgi-boot - jetty-osgi-boot-jsp - jetty-osgi-boot-logback - jetty-osgi-boot-warurl - jetty-httpservice - - - - jetty-server - jetty-client - jetty-servlet - jetty-webapp - jetty-plus - jetty-all-server - jetty-all - - - test-sessions-common - test-jdbc-sessions - test-hash-sessions - test-integration - test-webapp-rfc2616 - - - - debian/jetty.init - rpm/jetty.init - - -