Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse McConnell2012-02-15 19:49:23 +0000
committerJesse McConnell2012-02-15 19:49:23 +0000
commit098428dd376bc69657cf08c070bf2c3b3f80494b (patch)
tree39a78fef69e0001aaebe903425029c723c7172fa
parent68737e7713d429e7eb78a00c35992cf9d21a7d27 (diff)
parentadeb18093b943d9a5fcdb96af4cd1169ddea4c81 (diff)
downloadorg.eclipse.jetty.project-098428dd376bc69657cf08c070bf2c3b3f80494b.tar.gz
org.eclipse.jetty.project-098428dd376bc69657cf08c070bf2c3b3f80494b.tar.xz
org.eclipse.jetty.project-098428dd376bc69657cf08c070bf2c3b3f80494b.zip
Merge branch 'master' into jetty-8
-rw-r--r--NOTICE.txt4
-rw-r--r--jetty-aggregate/jetty-all/pom.xml8
-rw-r--r--jetty-http-spi/pom.xml8
-rw-r--r--jetty-http-spi/src/test/java/org/eclipse/jetty/http/spi/TestSPIServer.java1
-rw-r--r--jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java2
-rw-r--r--jetty-jsp/src/main/resources/readme.txt (renamed from jetty-jsp/src/main/resource/readme.txt)0
-rw-r--r--jetty-nosql/pom.xml2
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSession.java6
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java3
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java12
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java2
-rw-r--r--jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java17
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java16
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java438
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/ResourceCache.java4
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java31
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java2
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/component/AggregateLifeCycle.java8
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java43
-rw-r--r--jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Ordering.java6
-rw-r--r--jetty-websocket/src/main/java/org/eclipse/jetty/websocket/DeflateFrameExtension.java2
-rw-r--r--jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD00.java1
-rw-r--r--jetty-websocket/src/test/java/org/eclipse/jetty/websocket/SafariWebsocketDraft0Test.java7
-rw-r--r--jetty-websocket/src/test/java/org/eclipse/jetty/websocket/helper/SafariD00.java42
-rw-r--r--pom.xml15
-rw-r--r--tests/test-sessions/pom.xml1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/pom.xml140
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java)0
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java)43
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java)1
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java)0
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java (renamed from jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java)0
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/resources/keystorebin0 -> 1426 bytes
-rw-r--r--tests/test-sessions/test-mongodb-sessions/src/test/resources/realm.properties22
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java31
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java1
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java6
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java4
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java12
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java2
47 files changed, 581 insertions, 369 deletions
diff --git a/NOTICE.txt b/NOTICE.txt
index 817de69dbf..9351cef26f 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,8 +1,6 @@
==============================================================
Jetty Web Container
- Copyright 1995-2009 Mort Bay Consulting Pty Ltd
- 2009-2012 Webtide LLC
- 2011-2012 Intalio Inc
+ Copyright 1995-2012 Mort Bay Consulting Pty Ltd.
==============================================================
The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd
diff --git a/jetty-aggregate/jetty-all/pom.xml b/jetty-aggregate/jetty-all/pom.xml
index 105db34a78..07e5a969aa 100644
--- a/jetty-aggregate/jetty-all/pom.xml
+++ b/jetty-aggregate/jetty-all/pom.xml
@@ -37,7 +37,7 @@
<configuration>
<classifier>sources</classifier>
<includes>**/*</includes>
- <excludes>META-INF/**</excludes>
+ <excludes>META-INF/**,**/Servlet3Continuation*,**/Jetty6Continuation*</excludes>
<includeGroupIds>org.eclipse.jetty</includeGroupIds>
<excludeArtifactIds>javax</excludeArtifactIds>
<excludeGroupIds>javax,org.eclipse.jetty.orbit</excludeGroupIds>
@@ -170,5 +170,11 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
</dependencies>
</project>
diff --git a/jetty-http-spi/pom.xml b/jetty-http-spi/pom.xml
index 3d3e9fe41c..5b18a68834 100644
--- a/jetty-http-spi/pom.xml
+++ b/jetty-http-spi/pom.xml
@@ -32,14 +32,6 @@
<build>
<plugins>
<plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- <verbose>false</verbose>
- </configuration>
- </plugin>
- <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
diff --git a/jetty-http-spi/src/test/java/org/eclipse/jetty/http/spi/TestSPIServer.java b/jetty-http-spi/src/test/java/org/eclipse/jetty/http/spi/TestSPIServer.java
index 27110811a6..20ad8e97be 100644
--- a/jetty-http-spi/src/test/java/org/eclipse/jetty/http/spi/TestSPIServer.java
+++ b/jetty-http-spi/src/test/java/org/eclipse/jetty/http/spi/TestSPIServer.java
@@ -30,7 +30,6 @@ public class TestSPIServer
new HttpHandler()
{
- @Override
public void handle(HttpExchange exchange) throws IOException
{
Headers responseHeaders = exchange.getResponseHeaders();
diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
index 89926a77ca..f44b24d77f 100644
--- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
+++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java
@@ -105,7 +105,7 @@ public class HttpGenerator extends AbstractGenerator
}
// data
- private boolean _bypass = false; // True if _content buffer can be written directly to endp and bypass the content buffer
+ protected boolean _bypass = false; // True if _content buffer can be written directly to endp and bypass the content buffer
private boolean _needCRLF = false;
private boolean _needEOC = false;
private boolean _bufferChunked = false;
diff --git a/jetty-jsp/src/main/resource/readme.txt b/jetty-jsp/src/main/resources/readme.txt
index 39d448b46e..39d448b46e 100644
--- a/jetty-jsp/src/main/resource/readme.txt
+++ b/jetty-jsp/src/main/resources/readme.txt
diff --git a/jetty-nosql/pom.xml b/jetty-nosql/pom.xml
index 927f221eee..1c1bbf04a8 100644
--- a/jetty-nosql/pom.xml
+++ b/jetty-nosql/pom.xml
@@ -13,6 +13,7 @@
<build>
<defaultGoal>install</defaultGoal>
<plugins>
+ <!-- Jetty 7 is JDK5 +
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
@@ -21,6 +22,7 @@
<verbose>false</verbose>
</configuration>
</plugin>
+ -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
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 63ac821224..b0bf6715d7 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
@@ -16,6 +16,8 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.servlet.http.HttpServletRequest;
+
import org.eclipse.jetty.server.session.AbstractSession;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
@@ -33,9 +35,9 @@ public class NoSqlSession extends AbstractSession
private long _lastSync;
/* ------------------------------------------------------------ */
- public NoSqlSession(NoSqlSessionManager manager, long created, long accessed, String clusterId)
+ public NoSqlSession(NoSqlSessionManager manager, HttpServletRequest request)
{
- super(manager, created,accessed,clusterId);
+ super(manager, request);
_manager=manager;
save(true);
_active.incrementAndGet();
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
index 1f6be6fd41..4ffa417101 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
@@ -117,8 +117,7 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
protected AbstractSession newSession(HttpServletRequest request)
{
long created=System.currentTimeMillis();
- String clusterId=getSessionIdManager().newSessionId(request,created);
- return new NoSqlSession(this,created,created,clusterId);
+ return new NoSqlSession(this,request);
}
/* ------------------------------------------------------------ */
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
index b70265d19b..5e97d1eb30 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionIdManager.java
@@ -61,7 +61,9 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
final static DBObject __version_1 = new BasicDBObject(MongoSessionManager.__VERSION,1);
final static DBObject __valid_false = new BasicDBObject(MongoSessionManager.__VALID,false);
+ final static DBObject __valid_true = new BasicDBObject(MongoSessionManager.__VALID,true);
+
final DBCollection _sessions;
protected Server _server;
private Timer _scavengeTimer;
@@ -429,16 +431,15 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
/**
* is the session id known to mongo, and is it valid
*/
- @Override
public boolean idInUse(String sessionId)
{
/*
* optimize this query to only return the valid variable
*/
- DBObject o = _sessions.findOne(new BasicDBObject("id",sessionId), __valid_false);
+ DBObject o = _sessions.findOne(new BasicDBObject("id",sessionId), __valid_true);
if ( o != null )
- {
+ {
Boolean valid = (Boolean)o.get(MongoSessionManager.__VALID);
if ( valid == null )
@@ -453,7 +454,6 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
}
/* ------------------------------------------------------------ */
- @Override
public void addSession(HttpSession session)
{
if (session == null)
@@ -475,7 +475,6 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
}
/* ------------------------------------------------------------ */
- @Override
public void removeSession(HttpSession session)
{
if (session == null)
@@ -490,7 +489,6 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
}
/* ------------------------------------------------------------ */
- @Override
public void invalidateAll(String sessionId)
{
synchronized (_sessionsIds)
@@ -519,7 +517,6 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
/* ------------------------------------------------------------ */
// TODO not sure if this is correct
- @Override
public String getClusterId(String nodeId)
{
int dot=nodeId.lastIndexOf('.');
@@ -528,7 +525,6 @@ public class MongoSessionIdManager extends AbstractSessionIdManager
/* ------------------------------------------------------------ */
// TODO not sure if this is correct
- @Override
public String getNodeId(String clusterId, HttpServletRequest request)
{
if (_workerName!=null)
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
index fa75eb2773..e4eab9e057 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
@@ -118,7 +118,6 @@ public class MongoSessionManager extends NoSqlSessionManager
// Form query for upsert
BasicDBObject key = new BasicDBObject(__ID,session.getClusterId());
- key.put(__VALID,true);
// Form updates
BasicDBObject update = new BasicDBObject();
@@ -133,6 +132,7 @@ public class MongoSessionManager extends NoSqlSessionManager
upsert = true;
version = new Long(1);
sets.put(__CREATED,session.getCreationTime());
+ sets.put(__VALID,true);
sets.put(getContextKey(__VERSION),version);
}
else
diff --git a/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java b/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java
index f6af097880..d6f69bbb91 100644
--- a/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java
+++ b/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java
@@ -503,15 +503,18 @@ public abstract class SecurityHandler extends HandlerWrapper implements Authenti
previousIdentity = deferred.getPreviousAssociation();
deferred.setIdentityService(null);
}
-
- Authentication auth=baseRequest.getAuthentication();
- if (auth instanceof Authentication.User)
+
+ if (authenticator!=null)
{
- Authentication.User userAuth = (Authentication.User)auth;
- authenticator.secureResponse(request, response, isAuthMandatory, userAuth);
+ Authentication auth=baseRequest.getAuthentication();
+ if (auth instanceof Authentication.User)
+ {
+ Authentication.User userAuth = (Authentication.User)auth;
+ authenticator.secureResponse(request, response, isAuthMandatory, userAuth);
+ }
+ else
+ authenticator.secureResponse(request, response, isAuthMandatory, null);
}
- else
- authenticator.secureResponse(request, response, isAuthMandatory, null);
}
else
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java
index e36ee95331..b503dd60ba 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java
@@ -18,6 +18,7 @@ import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.atomic.AtomicLong;
+
import javax.servlet.ServletRequest;
import org.eclipse.jetty.http.HttpBuffers;
@@ -30,7 +31,6 @@ import org.eclipse.jetty.io.Buffers.Type;
import org.eclipse.jetty.io.Connection;
import org.eclipse.jetty.io.EndPoint;
import org.eclipse.jetty.io.EofException;
-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;
@@ -49,8 +49,6 @@ import org.eclipse.jetty.util.thread.ThreadPool;
* <li>Base acceptor thread</li>
* <li>Optional reverse proxy headers checking</li>
* </ul>
- *
- *
*/
public abstract class AbstractConnector extends AggregateLifeCycle implements HttpBuffers, Connector, Dumpable
{
@@ -130,7 +128,7 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Ht
/** 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
+ * @param pool the threadPool to set
*/
public void setThreadPool(ThreadPool pool)
{
@@ -225,6 +223,7 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Ht
* @return Returns the maxIdleTime when resources are low.
* @deprecated
*/
+ @Deprecated
public final int getLowResourceMaxIdleTime()
{
return getLowResourcesMaxIdleTime();
@@ -236,6 +235,7 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Ht
* The maxIdleTime to set when resources are low.
* @deprecated
*/
+ @Deprecated
public final void setLowResourceMaxIdleTime(int maxIdleTime)
{
setLowResourcesMaxIdleTime(maxIdleTime);
@@ -639,10 +639,10 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Ht
*
* @param check
* true if this connector is checking the x-forwarded-for/host/server headers
- * @set {@link #setForwardedForHeader(String)}
- * @set {@link #setForwardedHostHeader(String)}
- * @set {@link #setForwardedProtoHeader(String)}
- * @set {@link #setForwardedServerHeader(String)}
+ * @see #setForwardedForHeader(String)
+ * @see #setForwardedHostHeader(String)
+ * @see #setForwardedProtoHeader(String)
+ * @see #setForwardedServerHeader(String)
*/
public void setForwarded(boolean check)
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java
index 9c418ffce2..a045673135 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java
@@ -118,6 +118,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
private int _version = UNKNOWN;
+ private String _charset;
private boolean _expect = false;
private boolean _expect100Continue = false;
private boolean _expect102Processing = false;
@@ -138,9 +139,6 @@ public abstract class AbstractHttpConnection extends AbstractConnection
}
/* ------------------------------------------------------------ */
- /** Constructor
- *
- */
public AbstractHttpConnection(Connector connector, EndPoint endpoint, Server server)
{
super(endpoint);
@@ -152,7 +150,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
_responseFields = new HttpFields(server.getMaxCookieVersion());
_request = new Request(this);
_response = new Response(this);
- _generator = new HttpGenerator(ab.getResponseBuffers(), _endp);
+ _generator = newHttpGenerator(ab.getResponseBuffers(), endpoint);
_generator.setSendServerVersion(server.getSendServerVersion());
_server = server;
}
@@ -180,6 +178,11 @@ public abstract class AbstractHttpConnection extends AbstractConnection
return new HttpParser(requestBuffers, endpoint, requestHandler);
}
+ protected HttpGenerator newHttpGenerator(Buffers responseBuffers, EndPoint endPoint)
+ {
+ return new HttpGenerator(responseBuffers, endPoint);
+ }
+
/* ------------------------------------------------------------ */
/**
* @return the parser used by this connection
@@ -251,28 +254,26 @@ public abstract class AbstractHttpConnection extends AbstractConnection
/* ------------------------------------------------------------ */
/**
- * @return The result of calling {@link #getConnector}.{@link Connector#isConfidential(Request) isCondidential}(request), or false
- * if there is no connector.
+ * Find out if the request supports CONFIDENTIAL security.
+ * @param request the incoming HTTP request
+ * @return the result of calling {@link Connector#isConfidential(Request)}, or false
+ * if there is no connector
*/
public boolean isConfidential(Request request)
{
- if (_connector!=null)
- return _connector.isConfidential(request);
- return false;
+ return _connector != null && _connector.isConfidential(request);
}
/* ------------------------------------------------------------ */
/**
- * Find out if the request is INTEGRAL security.
- * @param request
- * @return <code>true</code> if there is a {@link #getConnector() connector} and it considers <code>request</code>
- * to be {@link Connector#isIntegral(Request) integral}
+ * Find out if the request supports INTEGRAL security.
+ * @param request the incoming HTTP request
+ * @return the result of calling {@link Connector#isIntegral(Request)}, or false
+ * if there is no connector
*/
public boolean isIntegral(Request request)
{
- if (_connector!=null)
- return _connector.isIntegral(request);
- return false;
+ return _connector != null && _connector.isIntegral(request);
}
/* ------------------------------------------------------------ */
@@ -312,6 +313,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
*
* @return The input stream for this connection.
* The stream will be created if it does not already exist.
+ * @throws IOException if the input stream cannot be retrieved
*/
public ServletInputStream getInputStream() throws IOException
{
@@ -347,6 +349,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
/* ------------------------------------------------------------ */
/**
+ * @param encoding the PrintWriter encoding
* @return A {@link PrintWriter} wrapping the {@link #getOutputStream output stream}. The writer is created if it
* does not already exist.
*/
@@ -562,10 +565,6 @@ public abstract class AbstractHttpConnection extends AbstractConnection
_generator.setPersistent(false);
_generator.completeHeader(_responseFields, last);
}
- catch(IOException io)
- {
- throw io;
- }
catch(RuntimeException e)
{
LOG.warn("header full: " + e);
@@ -593,10 +592,6 @@ public abstract class AbstractHttpConnection extends AbstractConnection
{
_generator.completeHeader(_responseFields, Generator.LAST);
}
- catch(IOException io)
- {
- throw io;
- }
catch(RuntimeException e)
{
LOG.warn("header full: "+e);
@@ -707,215 +702,246 @@ public abstract class AbstractHttpConnection extends AbstractConnection
_requests);
}
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- /* ------------------------------------------------------------ */
- private class RequestHandler extends HttpParser.EventHandler
+ protected void startRequest(Buffer method, Buffer uri, Buffer version) throws IOException
{
- private String _charset;
+ uri=uri.asImmutableBuffer();
- /*
- *
- * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#startRequest(org.eclipse.io.Buffer,
- * org.eclipse.io.Buffer, org.eclipse.io.Buffer)
- */
- @Override
- public void startRequest(Buffer method, Buffer uri, Buffer version) throws IOException
- {
- uri=uri.asImmutableBuffer();
+ _host = false;
+ _expect = false;
+ _expect100Continue=false;
+ _expect102Processing=false;
+ _delayedHandling=false;
+ _charset=null;
- _host = false;
- _expect = false;
- _expect100Continue=false;
- _expect102Processing=false;
- _delayedHandling=false;
- _charset=null;
+ if(_request.getTimeStamp()==0)
+ _request.setTimeStamp(System.currentTimeMillis());
+ _request.setMethod(method.toString());
- if(_request.getTimeStamp()==0)
- _request.setTimeStamp(System.currentTimeMillis());
- _request.setMethod(method.toString());
-
- try
+ try
+ {
+ _head=false;
+ switch (HttpMethods.CACHE.getOrdinal(method))
{
- _head=false;
- switch (HttpMethods.CACHE.getOrdinal(method))
- {
- case HttpMethods.CONNECT_ORDINAL:
- _uri.parseConnect(uri.array(), uri.getIndex(), uri.length());
- break;
+ case HttpMethods.CONNECT_ORDINAL:
+ _uri.parseConnect(uri.array(), uri.getIndex(), uri.length());
+ break;
- case HttpMethods.HEAD_ORDINAL:
- _head=true;
- _uri.parse(uri.array(), uri.getIndex(), uri.length());
- break;
+ case HttpMethods.HEAD_ORDINAL:
+ _head=true;
+ _uri.parse(uri.array(), uri.getIndex(), uri.length());
+ break;
- default:
- _uri.parse(uri.array(), uri.getIndex(), uri.length());
- }
+ default:
+ _uri.parse(uri.array(), uri.getIndex(), uri.length());
+ }
- _request.setUri(_uri);
+ _request.setUri(_uri);
- if (version==null)
- {
- _request.setProtocol(HttpVersions.HTTP_0_9);
- _version=HttpVersions.HTTP_0_9_ORDINAL;
- }
- else
- {
- version= HttpVersions.CACHE.get(version);
- if (version==null)
- throw new HttpException(HttpStatus.BAD_REQUEST_400,null);
- _version = HttpVersions.CACHE.getOrdinal(version);
- if (_version <= 0) _version = HttpVersions.HTTP_1_0_ORDINAL;
- _request.setProtocol(version.toString());
- }
+ if (version==null)
+ {
+ _request.setProtocol(HttpVersions.HTTP_0_9);
+ _version=HttpVersions.HTTP_0_9_ORDINAL;
}
- catch (Exception e)
+ else
{
- LOG.debug(e);
- if (e instanceof HttpException)
- throw (HttpException)e;
- throw new HttpException(HttpStatus.BAD_REQUEST_400,null,e);
+ version= HttpVersions.CACHE.get(version);
+ if (version==null)
+ throw new HttpException(HttpStatus.BAD_REQUEST_400,null);
+ _version = HttpVersions.CACHE.getOrdinal(version);
+ if (_version <= 0) _version = HttpVersions.HTTP_1_0_ORDINAL;
+ _request.setProtocol(version.toString());
}
}
+ catch (Exception e)
+ {
+ LOG.debug(e);
+ if (e instanceof HttpException)
+ throw (HttpException)e;
+ throw new HttpException(HttpStatus.BAD_REQUEST_400,null,e);
+ }
+ }
- /*
- * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#parsedHeaderValue(org.eclipse.io.Buffer)
- */
- @Override
- public void parsedHeader(Buffer name, Buffer value)
+ protected void parsedHeader(Buffer name, Buffer value) throws IOException
+ {
+ int ho = HttpHeaders.CACHE.getOrdinal(name);
+ switch (ho)
{
- int ho = HttpHeaders.CACHE.getOrdinal(name);
- switch (ho)
- {
- case HttpHeaders.HOST_ORDINAL:
- // TODO check if host matched a host in the URI.
- _host = true;
- break;
-
- case HttpHeaders.EXPECT_ORDINAL:
- value = HttpHeaderValues.CACHE.lookup(value);
- switch(HttpHeaderValues.CACHE.getOrdinal(value))
- {
- case HttpHeaderValues.CONTINUE_ORDINAL:
- _expect100Continue=_generator instanceof HttpGenerator;
- break;
+ case HttpHeaders.HOST_ORDINAL:
+ // TODO check if host matched a host in the URI.
+ _host = true;
+ break;
+
+ case HttpHeaders.EXPECT_ORDINAL:
+ value = HttpHeaderValues.CACHE.lookup(value);
+ switch(HttpHeaderValues.CACHE.getOrdinal(value))
+ {
+ case HttpHeaderValues.CONTINUE_ORDINAL:
+ _expect100Continue=_generator instanceof HttpGenerator;
+ break;
- case HttpHeaderValues.PROCESSING_ORDINAL:
- _expect102Processing=_generator instanceof HttpGenerator;
- break;
+ case HttpHeaderValues.PROCESSING_ORDINAL:
+ _expect102Processing=_generator instanceof HttpGenerator;
+ break;
- default:
- String[] values = value.toString().split(",");
- for (int i=0;values!=null && i<values.length;i++)
+ default:
+ String[] values = value.toString().split(",");
+ for (int i=0;values!=null && i<values.length;i++)
+ {
+ CachedBuffer cb=HttpHeaderValues.CACHE.get(values[i].trim());
+ if (cb==null)
+ _expect=true;
+ else
{
- CachedBuffer cb=HttpHeaderValues.CACHE.get(values[i].trim());
- if (cb==null)
- _expect=true;
- else
+ switch(cb.getOrdinal())
{
- switch(cb.getOrdinal())
- {
- case HttpHeaderValues.CONTINUE_ORDINAL:
- _expect100Continue=_generator instanceof HttpGenerator;
- break;
- case HttpHeaderValues.PROCESSING_ORDINAL:
- _expect102Processing=_generator instanceof HttpGenerator;
- break;
- default:
- _expect=true;
- }
+ case HttpHeaderValues.CONTINUE_ORDINAL:
+ _expect100Continue=_generator instanceof HttpGenerator;
+ break;
+ case HttpHeaderValues.PROCESSING_ORDINAL:
+ _expect102Processing=_generator instanceof HttpGenerator;
+ break;
+ default:
+ _expect=true;
}
}
- }
- break;
-
- case HttpHeaders.ACCEPT_ENCODING_ORDINAL:
- case HttpHeaders.USER_AGENT_ORDINAL:
- value = HttpHeaderValues.CACHE.lookup(value);
- break;
+ }
+ }
+ break;
- case HttpHeaders.CONTENT_TYPE_ORDINAL:
- value = MimeTypes.CACHE.lookup(value);
- _charset=MimeTypes.getCharsetFromContentType(value);
- break;
- }
+ case HttpHeaders.ACCEPT_ENCODING_ORDINAL:
+ case HttpHeaders.USER_AGENT_ORDINAL:
+ value = HttpHeaderValues.CACHE.lookup(value);
+ break;
- _requestFields.add(name, value);
+ case HttpHeaders.CONTENT_TYPE_ORDINAL:
+ value = MimeTypes.CACHE.lookup(value);
+ _charset=MimeTypes.getCharsetFromContentType(value);
+ break;
}
- /*
- * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#headerComplete()
- */
- @Override
- public void headerComplete() throws IOException
+ _requestFields.add(name, value);
+ }
+
+ protected void headerComplete() throws IOException
+ {
+ _requests++;
+ _generator.setVersion(_version);
+ switch (_version)
{
- _requests++;
- _generator.setVersion(_version);
- switch (_version)
- {
- case HttpVersions.HTTP_0_9_ORDINAL:
- break;
- case HttpVersions.HTTP_1_0_ORDINAL:
- _generator.setHead(_head);
- if (_parser.isPersistent())
- {
- _responseFields.add(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.KEEP_ALIVE_BUFFER);
- _generator.setPersistent(true);
- }
- else if (HttpMethods.CONNECT.equals(_request.getMethod()))
- {
- _generator.setPersistent(true);
- _parser.setPersistent(true);
- }
+ case HttpVersions.HTTP_0_9_ORDINAL:
+ break;
+ case HttpVersions.HTTP_1_0_ORDINAL:
+ _generator.setHead(_head);
+ if (_parser.isPersistent())
+ {
+ _responseFields.add(HttpHeaders.CONNECTION_BUFFER, HttpHeaderValues.KEEP_ALIVE_BUFFER);
+ _generator.setPersistent(true);
+ }
+ else if (HttpMethods.CONNECT.equals(_request.getMethod()))
+ {
+ _generator.setPersistent(true);
+ _parser.setPersistent(true);
+ }
- if (_server.getSendDateHeader())
- _generator.setDate(_request.getTimeStampBuffer());
- break;
+ if (_server.getSendDateHeader())
+ _generator.setDate(_request.getTimeStampBuffer());
+ break;
- case HttpVersions.HTTP_1_1_ORDINAL:
- _generator.setHead(_head);
+ case HttpVersions.HTTP_1_1_ORDINAL:
+ _generator.setHead(_head);
- if (!_parser.isPersistent())
- {
- _responseFields.add(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.CLOSE_BUFFER);
- _generator.setPersistent(false);
- }
- if (_server.getSendDateHeader())
- _generator.setDate(_request.getTimeStampBuffer());
+ if (!_parser.isPersistent())
+ {
+ _responseFields.add(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.CLOSE_BUFFER);
+ _generator.setPersistent(false);
+ }
+ if (_server.getSendDateHeader())
+ _generator.setDate(_request.getTimeStampBuffer());
- if (!_host)
- {
- LOG.debug("!host {}",this);
- _generator.setResponse(HttpStatus.BAD_REQUEST_400, null);
- _responseFields.put(HttpHeaders.CONNECTION_BUFFER, HttpHeaderValues.CLOSE_BUFFER);
- _generator.completeHeader(_responseFields, true);
- _generator.complete();
- return;
- }
+ if (!_host)
+ {
+ LOG.debug("!host {}",this);
+ _generator.setResponse(HttpStatus.BAD_REQUEST_400, null);
+ _responseFields.put(HttpHeaders.CONNECTION_BUFFER, HttpHeaderValues.CLOSE_BUFFER);
+ _generator.completeHeader(_responseFields, true);
+ _generator.complete();
+ return;
+ }
- if (_expect)
- {
- LOG.debug("!expectation {}",this);
- _generator.setResponse(HttpStatus.EXPECTATION_FAILED_417, null);
- _responseFields.put(HttpHeaders.CONNECTION_BUFFER, HttpHeaderValues.CLOSE_BUFFER);
- _generator.completeHeader(_responseFields, true);
- _generator.complete();
- return;
- }
+ if (_expect)
+ {
+ LOG.debug("!expectation {}",this);
+ _generator.setResponse(HttpStatus.EXPECTATION_FAILED_417, null);
+ _responseFields.put(HttpHeaders.CONNECTION_BUFFER, HttpHeaderValues.CLOSE_BUFFER);
+ _generator.completeHeader(_responseFields, true);
+ _generator.complete();
+ return;
+ }
- break;
- default:
- }
+ break;
+ default:
+ }
- if(_charset!=null)
- _request.setCharacterEncodingUnchecked(_charset);
+ if(_charset!=null)
+ _request.setCharacterEncodingUnchecked(_charset);
- // Either handle now or wait for first content
- if ((((HttpParser)_parser).getContentLength()<=0 && !((HttpParser)_parser).isChunking())||_expect100Continue)
- handleRequest();
- else
- _delayedHandling=true;
+ // Either handle now or wait for first content
+ if ((((HttpParser)_parser).getContentLength()<=0 && !((HttpParser)_parser).isChunking())||_expect100Continue)
+ handleRequest();
+ else
+ _delayedHandling=true;
+ }
+
+ protected void content(Buffer buffer) throws IOException
+ {
+ if (_delayedHandling)
+ {
+ _delayedHandling=false;
+ handleRequest();
+ }
+ }
+
+ public void messageComplete(long contentLength) throws IOException
+ {
+ if (_delayedHandling)
+ {
+ _delayedHandling=false;
+ handleRequest();
+ }
+ }
+
+ /* ------------------------------------------------------------ */
+ /* ------------------------------------------------------------ */
+ /* ------------------------------------------------------------ */
+ private class RequestHandler extends HttpParser.EventHandler
+ {
+ /*
+ *
+ * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#startRequest(org.eclipse.io.Buffer,
+ * org.eclipse.io.Buffer, org.eclipse.io.Buffer)
+ */
+ @Override
+ public void startRequest(Buffer method, Buffer uri, Buffer version) throws IOException
+ {
+ AbstractHttpConnection.this.startRequest(method, uri, version);
+ }
+
+ /*
+ * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#parsedHeaderValue(org.eclipse.io.Buffer)
+ */
+ @Override
+ public void parsedHeader(Buffer name, Buffer value) throws IOException
+ {
+ AbstractHttpConnection.this.parsedHeader(name, value);
+ }
+
+ /*
+ * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#headerComplete()
+ */
+ @Override
+ public void headerComplete() throws IOException
+ {
+ AbstractHttpConnection.this.headerComplete();
}
/* ------------------------------------------------------------ */
@@ -925,11 +951,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
@Override
public void content(Buffer ref) throws IOException
{
- if (_delayedHandling)
- {
- _delayedHandling=false;
- handleRequest();
- }
+ AbstractHttpConnection.this.content(ref);
}
/* ------------------------------------------------------------ */
@@ -941,11 +963,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection
@Override
public void messageComplete(long contentLength) throws IOException
{
- if (_delayedHandling)
- {
- _delayedHandling=false;
- handleRequest();
- }
+ AbstractHttpConnection.this.messageComplete(contentLength);
}
/* ------------------------------------------------------------ */
@@ -961,10 +979,8 @@ public abstract class AbstractHttpConnection extends AbstractConnection
if (LOG.isDebugEnabled())
LOG.debug("Bad request!: "+version+" "+status+" "+reason);
}
-
}
-
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceCache.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceCache.java
index 949f641e5e..e3742bc25e 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceCache.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceCache.java
@@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.jetty.http.HttpContent;
+import org.eclipse.jetty.http.HttpContent.ResourceAsHttpContent;
import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.io.Buffer;
@@ -172,7 +173,7 @@ public class ResourceCache
* @param pathInContext The key into the cache
* @return The entry matching <code>pathInContext</code>, or a new entry
* if no matching entry was found. If the content exists but is not cachable,
- * then a {@link HttpContent.ResourceAsHttpContent} instance is return. If
+ * then a {@link ResourceAsHttpContent} instance is return. If
* the resource does not exist, then null is returned.
* @throws IOException Problem loading the resource
*/
@@ -337,6 +338,7 @@ public class ResourceCache
}
/* ------------------------------------------------------------ */
+ @Override
public String toString()
{
return "ResourceCache["+_parent+","+_factory+"]@"+hashCode();
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
index caeea502a6..a4c4e72413 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
@@ -61,6 +61,10 @@ public class HashSessionManager extends AbstractSessionManager
File _storeDir;
private boolean _lazyLoad=false;
private volatile boolean _sessionsLoaded=false;
+ private boolean _deleteUnrestorableSessions=false;
+
+
+
/* ------------------------------------------------------------ */
public HashSessionManager()
@@ -434,6 +438,18 @@ public class HashSessionManager extends AbstractSessionManager
{
return _lazyLoad;
}
+
+ /* ------------------------------------------------------------ */
+ public boolean isDeleteUnrestorableSessions()
+ {
+ return _deleteUnrestorableSessions;
+ }
+
+ /* ------------------------------------------------------------ */
+ public void setDeleteUnrestorableSessions(boolean deleteUnrestorableSessions)
+ {
+ _deleteUnrestorableSessions = deleteUnrestorableSessions;
+ }
/* ------------------------------------------------------------ */
public void restoreSessions () throws Exception
@@ -461,9 +477,9 @@ public class HashSessionManager extends AbstractSessionManager
/* ------------------------------------------------------------ */
protected synchronized HashedSession restoreSession(String idInCuster)
{
+ File file = new File(_storeDir,idInCuster);
try
{
- File file = new File(_storeDir,idInCuster);
if (file.exists())
{
FileInputStream in = new FileInputStream(file);
@@ -477,7 +493,18 @@ public class HashSessionManager extends AbstractSessionManager
}
catch (Exception e)
{
- __log.warn("Problem restoring session "+idInCuster, e);
+
+ if (isDeleteUnrestorableSessions())
+ {
+ if (file.exists())
+ {
+ file.delete();
+ __log.warn("Deleting file for unrestorable session "+idInCuster, e);
+ }
+ }
+ else
+ __log.warn("Problem restoring session "+idInCuster, e);
+
}
return null;
}
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java b/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
index 87b2f2e4a2..efa536bf9e 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
@@ -358,7 +358,6 @@ public class UrlEncoded extends MultiMap implements Cloneable
/** Decoded parameters to Map.
* @param in InputSteam to read
* @param map MultiMap to add parameters to
- * @param maxLength maximum length of content to read or -1 for no limit
* @param maxLength maximum number of keys to read or -1 for no limit
*/
public static void decode88591To(InputStream in, MultiMap map, int maxLength, int maxKeys)
@@ -444,7 +443,6 @@ public class UrlEncoded extends MultiMap implements Cloneable
/** Decoded parameters to Map.
* @param in InputSteam to read
* @param map MultiMap to add parameters to
- * @param maxLength maximum length of content to read or -1 for no limit
* @param maxLength maximum number of keys to read or -1 for no limit
*/
public static void decodeUtf8To(InputStream in, MultiMap map, int maxLength, int maxKeys)
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/component/AggregateLifeCycle.java b/jetty-util/src/main/java/org/eclipse/jetty/util/component/AggregateLifeCycle.java
index 33796a2ba7..38d2aa641b 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/component/AggregateLifeCycle.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/component/AggregateLifeCycle.java
@@ -15,13 +15,13 @@ import org.eclipse.jetty.util.log.Logger;
* An AggregateLifeCycle is an {@link LifeCycle} implementation for a collection of contained beans.
* <p>
* Beans can be added the AggregateLifeCycle either as managed beans or as unmanaged beans. A managed bean is started, stopped and destroyed with the aggregate.
- * An umanaged bean is associated with the aggregate for the purposes of {@link #dump()}, but it's lifecycle must be managed externally.
+ * An unmanaged bean is associated with the aggregate for the purposes of {@link #dump()}, but it's lifecycle must be managed externally.
* <p>
* When a bean is added, if it is a {@link LifeCycle} and it is already started, then it is assumed to be an unmanaged bean.
- * Otherwise the methods {@link #addBean(LifeCycle, boolean)}, {@link #manage(LifeCycle)} and {@link #unmanage(LifeCycle)} can be used to
+ * Otherwise the methods {@link #addBean(Object, boolean)}, {@link #manage(Object)} and {@link #unmanage(Object)} can be used to
* explicitly control the life cycle relationship.
* <p>
- * If adding a bean that is shared between multiple {@link AggregateLifeCycle} instances, then it should be started before being added, so it is unmanged, or
+ * If adding a bean that is shared between multiple {@link AggregateLifeCycle} instances, then it should be started before being added, so it is unmanaged, or
* the API must be used to explicitly set it as unmanaged.
* <p>
*/
@@ -154,7 +154,7 @@ public class AggregateLifeCycle extends AbstractLifeCycle implements Destroyable
/** Add an associated lifecycle.
* @param o The lifecycle to add
* @param managed True if the LifeCycle is to be joined, otherwise it will be disjoint.
- * @return
+ * @return true if bean was added, false if already present.
*/
public boolean addBean(Object o, boolean managed)
{
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java b/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java
index 9ad2cb0dd4..785ba1c457 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java
@@ -35,7 +35,7 @@ import java.security.cert.X509CertSelector;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.net.ssl.CertPathTrustManagerParameters;
@@ -86,7 +86,7 @@ public class SslContextFactory extends AbstractLifeCycle
{
}
}};
-
+
private static final Logger LOG = Log.getLogger(SslContextFactory.class);
public static final String DEFAULT_KEYMANAGERFACTORY_ALGORITHM =
@@ -107,13 +107,12 @@ public class SslContextFactory extends AbstractLifeCycle
public static final String PASSWORD_PROPERTY = "org.eclipse.jetty.ssl.password";
/** Excluded protocols. */
- private final Set<String> _excludeProtocols = new HashSet<String>();
- // private final Set<String> _excludeProtocols = new HashSet<String>(Collections.singleton("SSLv2Hello"));
+ private final Set<String> _excludeProtocols = new LinkedHashSet<String>();
/** Included protocols. */
private Set<String> _includeProtocols = null;
/** Excluded cipher suites. */
- private final Set<String> _excludeCipherSuites = new HashSet<String>();
+ private final Set<String> _excludeCipherSuites = new LinkedHashSet<String>();
/** Included cipher suites. */
private Set<String> _includeCipherSuites = null;
@@ -210,6 +209,8 @@ public class SslContextFactory extends AbstractLifeCycle
/**
* Construct an instance of SslContextFactory
* Default constructor for use in XmlConfiguration files
+ * @param trustAll whether to blindly trust all certificates
+ * @see #setTrustAll(boolean)
*/
public SslContextFactory(boolean trustAll)
{
@@ -313,7 +314,7 @@ public class SslContextFactory extends AbstractLifeCycle
/* ------------------------------------------------------------ */
/**
- * @param Protocols
+ * @param protocols
* The array of protocol names to exclude from
* {@link SSLEngine#setEnabledProtocols(String[])}
*/
@@ -347,7 +348,7 @@ public class SslContextFactory extends AbstractLifeCycle
/* ------------------------------------------------------------ */
/**
- * @param Protocols
+ * @param protocols
* The array of protocol names to include in
* {@link SSLEngine#setEnabledProtocols(String[])}
*/
@@ -355,7 +356,7 @@ public class SslContextFactory extends AbstractLifeCycle
{
checkNotStarted();
- _includeProtocols = new HashSet<String>(Arrays.asList(protocols));
+ _includeProtocols = new LinkedHashSet<String>(Arrays.asList(protocols));
}
/* ------------------------------------------------------------ */
@@ -411,7 +412,7 @@ public class SslContextFactory extends AbstractLifeCycle
{
checkNotStarted();
- _includeCipherSuites = new HashSet<String>(Arrays.asList(cipherSuites));
+ _includeCipherSuites = new LinkedHashSet<String>(Arrays.asList(cipherSuites));
}
/* ------------------------------------------------------------ */
@@ -444,7 +445,7 @@ public class SslContextFactory extends AbstractLifeCycle
/* ------------------------------------------------------------ */
/**
- * @param keyStorePath
+ * @param keyStorePath the file system path or URL of the keystore
* @deprecated Use {@link #setKeyStorePath(String)}
*/
@Deprecated
@@ -1003,7 +1004,7 @@ public class SslContextFactory extends AbstractLifeCycle
* Override this method to provide alternate way to load a keystore.
*
* @return the key store instance
- * @throws Exception
+ * @throws Exception if the keystore cannot be loaded
*/
protected KeyStore loadKeyStore() throws Exception
{
@@ -1017,7 +1018,7 @@ public class SslContextFactory extends AbstractLifeCycle
* Override this method to provide alternate way to load a truststore.
*
* @return the key store instance
- * @throws Exception
+ * @throws Exception if the truststore cannot be loaded
*/
protected KeyStore loadTrustStore() throws Exception
{
@@ -1040,7 +1041,7 @@ public class SslContextFactory extends AbstractLifeCycle
* @param storeProvider keystore provider
* @param storePassword keystore password
* @return created keystore
- * @throws Exception
+ * @throws Exception if the keystore cannot be obtained
*
* @deprecated
*/
@@ -1059,7 +1060,7 @@ public class SslContextFactory extends AbstractLifeCycle
*
* @param crlPath path of certificate revocation list file
* @return Collection of CRL's
- * @throws Exception
+ * @throws Exception if the certificate revocation list cannot be loaded
*/
protected Collection<? extends CRL> loadCRL(String crlPath) throws Exception
{
@@ -1199,16 +1200,16 @@ public class SslContextFactory extends AbstractLifeCycle
/* ------------------------------------------------------------ */
/**
- * Select cipher suites to be used by the connector
+ * Select protocols to be used by the connector
* based on configured inclusion and exclusion lists
- * as well as enabled and supported cipher suite lists.
- * @param enabledCipherSuites Array of enabled cipher suites
- * @param supportedCipherSuites Array of supported cipher suites
- * @return Array of cipher suites to enable
+ * as well as enabled and supported protocols.
+ * @param enabledProtocols Array of enabled protocols
+ * @param supportedProtocols Array of supported protocols
+ * @return Array of protocols to enable
*/
public String[] selectProtocols(String[] enabledProtocols, String[] supportedProtocols)
{
- Set<String> selected_protocols = new HashSet<String>();
+ Set<String> selected_protocols = new LinkedHashSet<String>();
// Set the starting protocols - either from the included or enabled list
if (_includeProtocols!=null)
@@ -1240,7 +1241,7 @@ public class SslContextFactory extends AbstractLifeCycle
*/
public String[] selectCipherSuites(String[] enabledCipherSuites, String[] supportedCipherSuites)
{
- Set<String> selected_ciphers = new HashSet<String>();
+ Set<String> selected_ciphers = new LinkedHashSet<String>();
// Set the starting ciphers - either from the included or enabled list
if (_includeCipherSuites!=null)
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Ordering.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Ordering.java
index b0566a5fd6..9da21ede94 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Ordering.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/Ordering.java
@@ -38,7 +38,7 @@ public interface Ordering
/**
* AbsoluteOrdering
*
- * An <absolute-order> element in web.xml
+ * An &lt;absolute-order&gt; element in web.xml
*/
public static class AbsoluteOrdering implements Ordering
{
@@ -123,7 +123,7 @@ public interface Ordering
/**
* RelativeOrdering
*
- * A set of <order> elements in web-fragment.xmls.
+ * A set of &lt;order&gt; elements in web-fragment.xmls.
*/
public static class RelativeOrdering implements Ordering
{
@@ -347,7 +347,7 @@ public interface Ordering
* @param list
* @param fragNameA
* @param fragNameB
- * @return true if frament name A is before fragment name B
+ * @return true if fragment name A is before fragment name B
*/
protected boolean isBefore (List<Resource> list, String fragNameA, String fragNameB)
{
diff --git a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/DeflateFrameExtension.java b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/DeflateFrameExtension.java
index 91bbf275f4..cedf0c7ae0 100644
--- a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/DeflateFrameExtension.java
+++ b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/DeflateFrameExtension.java
@@ -27,7 +27,7 @@ import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
/**
- * @TODO Implement proposed deflate frame draft
+ * TODO Implement proposed deflate frame draft
*/
public class DeflateFrameExtension extends AbstractExtension
{
diff --git a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD00.java b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD00.java
index 12ec110144..9ce788ad7e 100644
--- a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD00.java
+++ b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD00.java
@@ -129,6 +129,7 @@ public class WebSocketConnectionD00 extends AbstractConnection implements WebSoc
int filled=_endp.fill(_hixieBytes);
if (filled<0)
{
+ _endp.flush();
_endp.close();
break;
}
diff --git a/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/SafariWebsocketDraft0Test.java b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/SafariWebsocketDraft0Test.java
index fb39dde130..15fc127cbd 100644
--- a/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/SafariWebsocketDraft0Test.java
+++ b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/SafariWebsocketDraft0Test.java
@@ -15,6 +15,8 @@
*******************************************************************************/
package org.eclipse.jetty.websocket;
+import static org.hamcrest.Matchers.*;
+
import java.net.URI;
import java.util.concurrent.TimeUnit;
@@ -31,9 +33,6 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-
public class SafariWebsocketDraft0Test
{
private Server server;
@@ -45,7 +44,7 @@ public class SafariWebsocketDraft0Test
{
// Configure Logging
// System.setProperty("org.eclipse.jetty.util.log.class",StdErrLog.class.getName());
- // System.setProperty("org.eclipse.jetty.LEVEL","DEBUG");
+ System.setProperty("org.eclipse.jetty.websocket.helper.LEVEL","DEBUG");
}
@Before
diff --git a/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/helper/SafariD00.java b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/helper/SafariD00.java
index 85ab83c2ae..3b5d8fd0b8 100644
--- a/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/helper/SafariD00.java
+++ b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/helper/SafariD00.java
@@ -15,6 +15,8 @@
*******************************************************************************/
package org.eclipse.jetty.websocket.helper;
+import static org.hamcrest.Matchers.*;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -28,12 +30,14 @@ import java.net.URI;
import org.eclipse.jetty.io.ByteArrayBuffer;
import org.eclipse.jetty.util.TypeUtil;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.util.log.StdErrLog;
import org.junit.Assert;
-import static org.hamcrest.Matchers.is;
-
public class SafariD00
{
+ private static final Logger LOG = Log.getLogger(SafariD00.class);
private URI uri;
private SocketAddress endpoint;
private Socket socket;
@@ -42,19 +46,25 @@ public class SafariD00
public SafariD00(URI uri)
{
+ if (LOG instanceof StdErrLog)
+ {
+ ((StdErrLog)LOG).setLevel(StdErrLog.LEVEL_DEBUG);
+ }
this.uri = uri;
this.endpoint = new InetSocketAddress(uri.getHost(),uri.getPort());
}
/**
* Open the Socket to the destination endpoint and
- *
+ *
* @return the open java Socket.
* @throws IOException
*/
public Socket connect() throws IOException
{
+ LOG.info("Connecting to endpoint: " + endpoint);
socket = new Socket();
+ socket.setTcpNoDelay(true);
socket.connect(endpoint,1000);
out = socket.getOutputStream();
@@ -64,12 +74,13 @@ public class SafariD00
}
/**
- * Issue an Http websocket (Draft-0) upgrade request using the Safari particulars.
- *
+ * Issue an Http websocket (Draft-0) upgrade request (using an example request captured from OSX/Safari)
+ *
* @throws UnsupportedEncodingException
*/
public void issueHandshake() throws IOException
{
+ LOG.debug("Issuing Handshake");
StringBuilder req = new StringBuilder();
req.append("GET ").append(uri.getPath()).append(" HTTP/1.1\r\n");
req.append("Upgrade: WebSocket\r\n");
@@ -80,7 +91,7 @@ public class SafariD00
req.append("Sec-WebSocket-Key2: 3? C;7~0 8 \" 3 2105 6 `_ {\r\n");
req.append("\r\n");
- // System.out.printf("--- Request ---%n%s",req);
+ LOG.debug("Request:" + req);
byte reqBytes[] = req.toString().getBytes("UTF-8");
byte hixieBytes[] = TypeUtil.fromHexString("e739617916c9daf3");
@@ -96,8 +107,9 @@ public class SafariD00
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
- socket.setSoTimeout(5000);
+ socket.setSoTimeout(10000);
+ LOG.debug("Reading http header");
boolean foundEnd = false;
String line;
while (!foundEnd)
@@ -113,9 +125,19 @@ public class SafariD00
// Read expected handshake hixie bytes
byte hixieHandshakeExpected[] = TypeUtil.fromHexString("c7438d956cf611a6af70603e6fa54809");
byte hixieHandshake[] = new byte[hixieHandshakeExpected.length];
+ Assert.assertThat("Hixie handshake buffer size",hixieHandshake.length,is(16));
- int readLen = in.read(hixieHandshake,0,hixieHandshake.length);
- Assert.assertThat("Read hixie handshake bytes",readLen,is(hixieHandshake.length));
+ LOG.debug("Reading hixie handshake bytes");
+ int bytesRead = 0;
+ while (bytesRead < hixieHandshake.length)
+ {
+ int val = in.read();
+ if (val >= 0)
+ {
+ hixieHandshake[bytesRead++] = (byte)val;
+ }
+ }
+ Assert.assertThat("Read hixie handshake bytes",bytesRead,is(hixieHandshake.length));
}
public void sendMessage(String... msgs) throws IOException
@@ -123,6 +145,7 @@ public class SafariD00
int len = 0;
for (String msg : msgs)
{
+ LOG.debug("sending message: " + msg);
len += (msg.length() + 2);
}
@@ -141,6 +164,7 @@ public class SafariD00
public void disconnect() throws IOException
{
+ LOG.debug("disconnect");
socket.close();
}
}
diff --git a/pom.xml b/pom.xml
index d13bdcaddd..9da2015baa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -281,9 +281,20 @@
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<docfilessubdirs>true</docfilessubdirs>
- <detectLinks>true</detectLinks>
+ <detectLinks>false</detectLinks>
<detectJavaApiLink>true</detectJavaApiLink>
- </configuration>
+ <excludePackageNames>org.slf4j.*;org.mortbay.*</excludePackageNames>
+ <links>
+ <link>http://download.eclipse.org/jetty/stable-7/apidocs/</link>
+ </links>
+ <tags>
+ <tag>
+ <name>org.apache.xbean.XBean</name>
+ <placement>a</placement>
+ <head>Apache XBean:</head>
+ </tag>
+ </tags>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
diff --git a/tests/test-sessions/pom.xml b/tests/test-sessions/pom.xml
index 75d604471c..3e9a3b57de 100644
--- a/tests/test-sessions/pom.xml
+++ b/tests/test-sessions/pom.xml
@@ -32,5 +32,6 @@
<module>test-sessions-common</module>
<module>test-hash-sessions</module>
<module>test-jdbc-sessions</module>
+ <module>test-mongodb-sessions</module>
</modules>
</project>
diff --git a/tests/test-sessions/test-mongodb-sessions/pom.xml b/tests/test-sessions/test-mongodb-sessions/pom.xml
new file mode 100644
index 0000000000..914cfaf36f
--- /dev/null
+++ b/tests/test-sessions/test-mongodb-sessions/pom.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+// ========================================================================
+// Copyright (c) Webtide LLC
+//
+// 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.apache.org/licenses/LICENSE-2.0.txt
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.jetty.tests</groupId>
+ <artifactId>test-sessions-parent</artifactId>
+ <version>7.6.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>test-mongodb-sessions</artifactId>
+ <name>Jetty Tests :: Sessions :: Mongo</name>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <configuration>
+ <!-- DO NOT DEPLOY (or Release) -->
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.eclipse.jetty.toolchain</groupId>
+ <artifactId>jetty-test-policy</artifactId>
+ <version>${jetty-test-policy-version}</version>
+ <type>jar</type>
+ <overWrite>true</overWrite>
+ <includes>**/*.keystore,**/*.pem</includes>
+ <outputDirectory>${jetty.test.policy.loc}</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-webapp</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-client</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty.tests</groupId>
+ <artifactId>test-sessions-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-nosql</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-jmx</artifactId>
+ <version>${project.version}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <profiles>
+ <profile>
+ <id>mongodb</id>
+ <activation>
+ <property>
+ <name>mongodb.enabled</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>false</skipTests>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java
index edc1337b0f..1e50869703 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ClientCrossContextSessionTest.java
@@ -26,7 +26,6 @@ public class ClientCrossContextSessionTest extends AbstractClientCrossContextSes
}
@Test
- @Ignore ("requires mongodb server")
public void testCrossContextDispatch() throws Exception
{
super.testCrossContextDispatch();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
index 70c7763c12..29e49b055a 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LastAccessTimeTest.java
@@ -26,7 +26,6 @@ public class LastAccessTimeTest extends AbstractLastAccessTimeTest
}
@Test
- @Ignore ("requires mongodb server")
public void testLastAccessTime() throws Exception
{
super.testLastAccessTime();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java
index 9bf3f5b556..bdb84429e3 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/LightLoadTest.java
@@ -30,7 +30,6 @@ public class LightLoadTest extends AbstractLightLoadTest
}
@Test
- @Ignore ("requires mongodb server")
public void testLightLoad() throws Exception
{
super.testLightLoad();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java
index eeac820b44..eeac820b44 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTest.java
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
index 269cf4c710..36d751e2e6 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java
@@ -30,8 +30,7 @@ import org.eclipse.jetty.server.session.SessionHandler;
*/
public class MongoTestServer extends AbstractTestServer
{
-
- static MongoSessionIdManager _idManager;
+ static int __workers=0;
private boolean _saveAllAttributes = false; // false save dirty, true save all
public MongoTestServer(int port)
@@ -54,45 +53,19 @@ public class MongoTestServer extends AbstractTestServer
public SessionIdManager newSessionIdManager(String config)
{
- if ( _idManager != null )
- {
- try
- {
- _idManager.stop();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
-
- _idManager.setScavengeDelay(_scavengePeriod + 1000);
- _idManager.setScavengePeriod(_maxInactivePeriod);
-
- try
- {
- _idManager.start();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
-
- return _idManager;
- }
-
try
{
System.err.println("MongoTestServer:SessionIdManager:" + _maxInactivePeriod + "/" + _scavengePeriod);
- _idManager = new MongoSessionIdManager(_server);
-
- _idManager.setScavengeDelay((int)TimeUnit.SECONDS.toMillis(_scavengePeriod));
- _idManager.setScavengePeriod(_maxInactivePeriod);
-
- return _idManager;
+ MongoSessionIdManager idManager = new MongoSessionIdManager(_server);
+ idManager.setWorkerName("w"+(__workers++));
+ idManager.setScavengeDelay((int)TimeUnit.SECONDS.toMillis(_scavengePeriod));
+ idManager.setScavengePeriod(_maxInactivePeriod);
+
+ return idManager;
}
catch (Exception e)
{
- throw new IllegalStateException();
+ throw new RuntimeException(e);
}
}
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java
index 216770ca0f..b8ee0d9e08 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/NewSessionTest.java
@@ -30,7 +30,6 @@ public class NewSessionTest extends AbstractNewSessionTest
}
@Test
- @Ignore ("requires mongodb server")
public void testNewSession() throws Exception
{
super.testNewSession();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java
index b38524cb22..b6a073c28c 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/OrphanedSessionTest.java
@@ -29,7 +29,6 @@ public class OrphanedSessionTest extends AbstractOrphanedSessionTest
}
@Test
- @Ignore ("requires mongodb server")
public void testOrphanedSession() throws Exception
{
super.testOrphanedSession();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java
index a342a734ee..53db193fe6 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ReentrantRequestSessionTest.java
@@ -29,7 +29,6 @@ public class ReentrantRequestSessionTest extends AbstractReentrantRequestSession
}
@Test
- @Ignore ("requires mongodb server")
public void testReentrantRequestSession() throws Exception
{
super.testReentrantRequestSession();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java
index bbbf85628a..aa85719247 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/RemoveSessionTest.java
@@ -26,7 +26,6 @@ public class RemoveSessionTest extends AbstractRemoveSessionTest
}
@Test
- @Ignore ("requires mongodb server")
public void testRemoveSession() throws Exception
{
super.testRemoveSession();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java
index d5c308363a..0ec56dc1e5 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/ServerCrossContextSessionTest.java
@@ -26,7 +26,6 @@ public class ServerCrossContextSessionTest extends AbstractServerCrossContextSes
}
@Test
- @Ignore ("requires mongodb server")
public void testCrossContextDispatch() throws Exception
{
super.testCrossContextDispatch();
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java
index 481f6c1333..481f6c1333 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionDump.java
diff --git a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
index 773c201146..773c201146 100644
--- a/jetty-nosql/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/SessionSavingValueTest.java
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/resources/keystore b/tests/test-sessions/test-mongodb-sessions/src/test/resources/keystore
new file mode 100644
index 0000000000..b727bd0fb7
--- /dev/null
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/resources/keystore
Binary files differ
diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/resources/realm.properties b/tests/test-sessions/test-mongodb-sessions/src/test/resources/realm.properties
new file mode 100644
index 0000000000..6cd8ffa401
--- /dev/null
+++ b/tests/test-sessions/test-mongodb-sessions/src/test/resources/realm.properties
@@ -0,0 +1,22 @@
+#
+# This file defines users passwords and roles for a HashUserRealm
+#
+# The format is
+# <username>: <password>[,<rolename> ...]
+#
+# Passwords may be clear text, obfuscated or checksummed. The class
+# org.eclipse.util.Password should be used to generate obfuscated
+# passwords or password checksums
+#
+# If DIGEST Authentication is used, the password must be in a recoverable
+# format, either plain text or OBF:.
+#
+# if using digest authentication, do not MD5-hash the password
+jetty: jetty,user
+admin: CRYPT:ad1ks..kc.1Ug,server-administrator,content-administrator,admin,user
+other: OBF:1xmk1w261u9r1w1c1xmq,user
+plain: plain,user
+user: password,user
+
+# This entry is for digest auth. The credential is a MD5 hash of username:realmname:password
+digest: MD5:6e120743ad67abfbc385bc2bb754e297,user
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
index 845c9a6ec7..29405928d7 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java
@@ -26,6 +26,7 @@ import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.http.HttpMethods;
import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -46,10 +47,14 @@ public abstract class AbstractClientCrossContextSessionTest
String contextB = "/contextB";
String servletMapping = "/server";
AbstractTestServer server = createServer(0);
+ TestServletA servletA = new TestServletA();
+ ServletHolder holderA = new ServletHolder(servletA);
ServletContextHandler ctxA = server.addContext(contextA);
- ctxA.addServlet(TestServletA.class, servletMapping);
+ ctxA.addServlet(holderA, servletMapping);
ServletContextHandler ctxB = server.addContext(contextB);
- ctxB.addServlet(TestServletB.class, servletMapping);
+ TestServletB servletB = new TestServletB();
+ ServletHolder holderB = new ServletHolder(servletB);
+ ctxB.addServlet(holderB, servletMapping);
server.start();
int port = server.getPort();
@@ -76,10 +81,12 @@ public abstract class AbstractClientCrossContextSessionTest
ContentExchange exchangeB = new ContentExchange(true);
exchangeB.setMethod(HttpMethods.GET);
exchangeB.setURL("http://localhost:" + port + contextB + servletMapping);
- exchangeB.getRequestFields().add("Cookie", sessionCookie);
+ System.err.println("Cookie = "+sessionCookie);
+ exchangeB.getRequestFields().add("Cookie", sessionCookie);
client.send(exchangeB);
exchangeB.waitForDone();
assertEquals(HttpServletResponse.SC_OK,exchangeB.getResponseStatus());
+ assertEquals(servletA.sessionId, servletB.sessionId);
}
finally
{
@@ -94,11 +101,17 @@ public abstract class AbstractClientCrossContextSessionTest
public static class TestServletA extends HttpServlet
{
+ public String sessionId;
+
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
HttpSession session = request.getSession(false);
- if (session == null) session = request.getSession(true);
+ if (session == null)
+ {
+ session = request.getSession(true);
+ sessionId = session.getId();
+ }
// Add something to the session
session.setAttribute("A", "A");
@@ -106,17 +119,22 @@ public abstract class AbstractClientCrossContextSessionTest
// Check that we don't see things put in session by contextB
Object objectB = session.getAttribute("B");
assertTrue(objectB == null);
- System.out.println("A: session.getAttributeNames() = " + Collections.list(session.getAttributeNames()));
}
}
public static class TestServletB extends HttpServlet
{
+ public String sessionId;
+
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
HttpSession session = request.getSession(false);
- if (session == null) session = request.getSession(true);
+ if (session == null)
+ {
+ session = request.getSession(true);
+ sessionId = session.getId();
+ }
// Add something to the session
session.setAttribute("B", "B");
@@ -124,7 +142,6 @@ public abstract class AbstractClientCrossContextSessionTest
// Check that we don't see things put in session by contextA
Object objectA = session.getAttribute("A");
assertTrue(objectA == null);
- System.out.println("B: session.getAttributeNames() = " + Collections.list(session.getAttributeNames()));
}
}
}
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
index 172b8bad79..c7c62b0676 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractImmortalSessionTest.java
@@ -44,6 +44,7 @@ public abstract class AbstractImmortalSessionTest
String contextPath = "";
String servletMapping = "/server";
int scavengePeriod = 2;
+ //turn off session expiry by setting maxInactiveInterval to -1
AbstractTestServer server = createServer(0, -1, scavengePeriod);
server.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
server.start();
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
index afee757537..c7909102df 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLastAccessTimeTest.java
@@ -98,13 +98,11 @@ public abstract class AbstractLastAccessTimeTest
Thread.sleep(requestInterval);
}
- System.out.println("Waiting for scavenging on node1...");
-
// At this point, session1 should be eligible for expiration.
// Let's wait for the scavenger to run, waiting 2.5 times the scavenger period
Thread.sleep(scavengePeriod * 2500L);
- // Access again server1, and be sure we can
+ // Access again server1, and ensure that we can still access the session
exchange1 = new ContentExchange(true);
exchange1.setMethod(HttpMethods.GET);
exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping);
@@ -112,6 +110,8 @@ public abstract class AbstractLastAccessTimeTest
client.send(exchange1);
exchange1.waitForDone();
assertEquals(HttpServletResponse.SC_OK, exchange1.getResponseStatus());
+ //test that the session was kept alive by server 2 and still contains what server1 put in it
+ assertEquals("test", exchange1.getResponseContent());
}
finally
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
index 53cecfd872..d2167fd76a 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractNewSessionTest.java
@@ -20,6 +20,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
@@ -109,7 +110,8 @@ public abstract class AbstractNewSessionTest
String action = request.getParameter("action");
if ("create".equals(action))
{
- request.getSession(true);
+ HttpSession session = request.getSession(true);
+ assertTrue(session.isNew());
}
else if ("old-create".equals(action))
{
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
index 0af674eb53..2c18c39fa0 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractOrphanedSessionTest.java
@@ -84,19 +84,7 @@ public abstract class AbstractOrphanedSessionTest
// must be removed by scavenging done in the other node.
Thread.sleep(TimeUnit.SECONDS.toMillis(inactivePeriod + 2L * scavengePeriod));
- System.err.println("FINISHED waiting for session to expire");
// Perform one request to server2 to be sure that the session has been expired
-//
-
- // force invalidate to test
-// ContentExchange exchange3 = new ContentExchange(true);
-// exchange3.setMethod(HttpMethods.GET);
-// exchange3.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=remove");
-// exchange3.getRequestFields().add("Cookie", sessionCookie);
-// client.send(exchange3);
-// exchange3.waitForDone();
-
- System.err.println("CHECKING NODE2");
ContentExchange exchange2 = new ContentExchange(true);
exchange2.setMethod(HttpMethods.GET);
exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=check");
diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
index c71f4c8035..2a5282f565 100644
--- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
+++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractReentrantRequestSessionTest.java
@@ -92,7 +92,7 @@ public abstract class AbstractReentrantRequestSessionTest
int port = Integer.parseInt(request.getParameter("port"));
String path = request.getParameter("path");
- // We want to make another request with a different session
+ // We want to make another request
// while this request is still pending, to see if the locking is
// fine grained (per session at least).
try

Back to the top