Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2012-03-01 23:39:17 +0000
committerJan Bartel2012-03-01 23:39:17 +0000
commit959a4a27430d628cbf0758f98b05d3acf4a94216 (patch)
tree4669515c0e7f12e55cbacd23593e91fb599de764
parent885515737fe6da291006c884b6eef0517ee0a359 (diff)
parent68fa3c50b4f04dc48944a58f5b128f3521f6719a (diff)
downloadorg.eclipse.jetty.project-959a4a27430d628cbf0758f98b05d3acf4a94216.tar.gz
org.eclipse.jetty.project-959a4a27430d628cbf0758f98b05d3acf4a94216.tar.xz
org.eclipse.jetty.project-959a4a27430d628cbf0758f98b05d3acf4a94216.zip
Merge remote-tracking branch 'origin/master' into jetty-8
-rw-r--r--jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java10
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java74
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionManager.java51
-rw-r--r--tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractClientCrossContextSessionTest.java7
4 files changed, 94 insertions, 48 deletions
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java
index 9428a483a0..75a2146b66 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java
@@ -687,6 +687,16 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
{
try
{
+ if (_key!=null)
+ _key.cancel();
+ }
+ catch (Throwable e)
+ {
+ LOG.ignore(e);
+ }
+
+ try
+ {
super.close();
}
catch (IOException e)
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
index 1647372f19..d929d30ee1 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
@@ -71,6 +71,7 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
protected long _lastScavengeTime;
protected long _scavengeIntervalMs = 1000L * 60 * 10; //10mins
protected String _blobType; //if not set, is deduced from the type of the database at runtime
+ protected String _longType; //if not set, is deduced from the type of the database at runtime
protected String _createSessionIdTable;
protected String _createSessionTable;
@@ -82,6 +83,13 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
protected String _deleteId;
protected String _queryId;
+ protected String _insertSession;
+ protected String _deleteSession;
+ protected String _selectSession;
+ protected String _updateSession;
+ protected String _updateSessionNode;
+ protected String _updateSessionAccessTime;
+
protected DatabaseAdaptor _dbAdaptor;
@@ -146,6 +154,17 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
return "blob";
}
+ public String getLongType ()
+ {
+ if (_longType != null)
+ return _longType;
+
+ if (_dbName.startsWith("oracle"))
+ return "number(20)";
+
+ return "bigint";
+ }
+
public InputStream getBlobInputStream (ResultSet result, String columnName)
throws SQLException
{
@@ -158,6 +177,18 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
Blob blob = result.getBlob(columnName);
return blob.getBinaryStream();
}
+
+ /**
+ * rowId is a reserved word for Oracle, so change the name of this column
+ * @return
+ */
+ public String getRowIdColumnName ()
+ {
+ if (_dbName != null && _dbName.startsWith("oracle"))
+ return "srowId";
+
+ return "rowId";
+ }
}
@@ -239,6 +270,18 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
return _blobType;
}
+
+
+ public String getLongType()
+ {
+ return _longType;
+ }
+
+ public void setLongType(String longType)
+ {
+ this._longType = longType;
+ }
+
public void setScavengeInterval (long sec)
{
if (sec<=0)
@@ -528,7 +571,7 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
connection.setAutoCommit(true);
DatabaseMetaData metaData = connection.getMetaData();
_dbAdaptor = new DatabaseAdaptor(metaData);
- _sessionTableRowId = (_dbAdaptor.getDBName() != null && _dbAdaptor.getDBName().contains("oracle") ? "srowId":_sessionTableRowId);
+ _sessionTableRowId = _dbAdaptor.getRowIdColumnName();
//checking for table existence is case-sensitive, but table creation is not
String tableName = _dbAdaptor.convertIdentifier(_sessionIdTable);
@@ -546,10 +589,11 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
{
//table does not exist, so create it
String blobType = _dbAdaptor.getBlobType();
+ String longType = _dbAdaptor.getLongType();
_createSessionTable = "create table "+_sessionTable+" ("+_sessionTableRowId+" varchar(120), sessionId varchar(120), "+
- " contextPath varchar(60), virtualHost varchar(60), lastNode varchar(60), accessTime bigint, "+
- " lastAccessTime bigint, createTime bigint, cookieTime bigint, "+
- " lastSavedTime bigint, expiryTime bigint, map "+blobType+", primary key("+_sessionTableRowId+"))";
+ " contextPath varchar(60), virtualHost varchar(60), lastNode varchar(60), accessTime "+longType+", "+
+ " lastAccessTime "+longType+", createTime "+longType+", cookieTime "+longType+", "+
+ " lastSavedTime "+longType+", expiryTime "+longType+", map "+blobType+", primary key("+_sessionTableRowId+"))";
connection.createStatement().executeUpdate(_createSessionTable);
}
@@ -576,6 +620,28 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
if (!index2Exists)
statement.executeUpdate("create index "+index2+" on "+_sessionTable+" (sessionId, contextPath)");
}
+
+ //set up some strings representing the statements for session manipulation
+ _insertSession = "insert into "+_sessionTable+
+ " ("+_sessionTableRowId+", sessionId, contextPath, virtualHost, lastNode, accessTime, lastAccessTime, createTime, cookieTime, lastSavedTime, expiryTime, map) "+
+ " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ _deleteSession = "delete from "+_sessionTable+
+ " where "+_sessionTableRowId+" = ?";
+
+ _selectSession = "select * from "+_sessionTable+
+ " where sessionId = ? and contextPath = ? and virtualHost = ?";
+
+ _updateSession = "update "+_sessionTable+
+ " set lastNode = ?, accessTime = ?, lastAccessTime = ?, lastSavedTime = ?, expiryTime = ?, map = ? where "+_sessionTableRowId+" = ?";
+
+ _updateSessionNode = "update "+_sessionTable+
+ " set lastNode = ? where "+_sessionTableRowId+" = ?";
+
+ _updateSessionAccessTime = "update "+_sessionTable+
+ " set lastNode = ?, accessTime = ?, lastAccessTime = ?, lastSavedTime = ?, expiryTime = ? where "+_sessionTableRowId+" = ?";
+
+
}
finally
{
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionManager.java
index ecfc867fc5..703ce6ec58 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionManager.java
@@ -70,15 +70,8 @@ public class JDBCSessionManager extends AbstractSessionManager
{
private static final Logger LOG = Log.getLogger(JDBCSessionManager.class);
- protected String __insertSession;
- protected String __deleteSession;
- protected String __selectSession;
- protected String __updateSession;
- protected String __updateSessionNode;
- protected String __updateSessionAccessTime;
- protected String __sessionTableRowId;
-
private ConcurrentHashMap<String, AbstractSession> _sessions;
+ protected JDBCSessionIdManager _jdbcSessionIdMgr = null;
protected long _saveIntervalSec = 60; //only persist changes to session access times every 60 secs
/**
@@ -605,8 +598,8 @@ public class JDBCSessionManager extends AbstractSessionManager
if (_sessionIdManager==null)
throw new IllegalStateException("No session id manager defined");
- prepareTables();
-
+ _jdbcSessionIdMgr = (JDBCSessionIdManager)_sessionIdManager;
+
_sessions = new ConcurrentHashMap<String, AbstractSession>();
super.doStart();
}
@@ -818,30 +811,6 @@ public class JDBCSessionManager extends AbstractSessionManager
}
- protected void prepareTables ()
- {
- __sessionTableRowId = ((JDBCSessionIdManager)_sessionIdManager)._sessionTableRowId;
-
- __insertSession = "insert into "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " ("+__sessionTableRowId+", sessionId, contextPath, virtualHost, lastNode, accessTime, lastAccessTime, createTime, cookieTime, lastSavedTime, expiryTime, map) "+
- " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
-
- __deleteSession = "delete from "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " where "+__sessionTableRowId+" = ?";
-
- __selectSession = "select * from "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " where sessionId = ? and contextPath = ? and virtualHost = ?";
-
- __updateSession = "update "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " set lastNode = ?, accessTime = ?, lastAccessTime = ?, lastSavedTime = ?, expiryTime = ?, map = ? where "+__sessionTableRowId+" = ?";
-
- __updateSessionNode = "update "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " set lastNode = ? where "+__sessionTableRowId+" = ?";
-
- __updateSessionAccessTime = "update "+((JDBCSessionIdManager)_sessionIdManager)._sessionTable+
- " set lastNode = ?, accessTime = ?, lastAccessTime = ?, lastSavedTime = ?, expiryTime = ? where "+__sessionTableRowId+" = ?";
- }
-
/**
* Load a session from the database
* @param id
@@ -864,7 +833,7 @@ public class JDBCSessionManager extends AbstractSessionManager
try
{
connection = getConnection();
- statement = connection.prepareStatement(__selectSession);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._selectSession);
statement.setString(1, id);
statement.setString(2, canonicalContextPath);
statement.setString(3, vhost);
@@ -872,7 +841,7 @@ public class JDBCSessionManager extends AbstractSessionManager
if (result.next())
{
data = new SessionData(id);
- data.setRowId(result.getString(__sessionTableRowId));
+ data.setRowId(result.getString(_jdbcSessionIdMgr._sessionTableRowId));
data.setCookieSet(result.getLong("cookieTime"));
data.setLastAccessed(result.getLong("lastAccessTime"));
data.setAccessed (result.getLong("accessTime"));
@@ -941,7 +910,7 @@ public class JDBCSessionManager extends AbstractSessionManager
long now = System.currentTimeMillis();
connection.setAutoCommit(true);
- statement = connection.prepareStatement(__insertSession);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._insertSession);
statement.setString(1, rowId); //rowId
statement.setString(2, data.getId()); //session id
statement.setString(3, data.getCanonicalContext()); //context path
@@ -996,7 +965,7 @@ public class JDBCSessionManager extends AbstractSessionManager
{
long now = System.currentTimeMillis();
connection.setAutoCommit(true);
- statement = connection.prepareStatement(__updateSession);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._updateSession);
statement.setString(1, getSessionIdManager().getWorkerName());//my node id
statement.setLong(2, data.getAccessed());//accessTime
statement.setLong(3, data.getLastAccessed()); //lastAccessTime
@@ -1040,7 +1009,7 @@ public class JDBCSessionManager extends AbstractSessionManager
try
{
connection.setAutoCommit(true);
- statement = connection.prepareStatement(__updateSessionNode);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._updateSessionNode);
statement.setString(1, nodeId);
statement.setString(2, data.getRowId());
statement.executeUpdate();
@@ -1070,7 +1039,7 @@ public class JDBCSessionManager extends AbstractSessionManager
{
long now = System.currentTimeMillis();
connection.setAutoCommit(true);
- statement = connection.prepareStatement(__updateSessionAccessTime);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._updateSessionAccessTime);
statement.setString(1, getSessionIdManager().getWorkerName());
statement.setLong(2, data.getAccessed());
statement.setLong(3, data.getLastAccessed());
@@ -1108,7 +1077,7 @@ public class JDBCSessionManager extends AbstractSessionManager
try
{
connection.setAutoCommit(true);
- statement = connection.prepareStatement(__deleteSession);
+ statement = connection.prepareStatement(_jdbcSessionIdMgr._deleteSession);
statement.setString(1, data.getRowId());
statement.executeUpdate();
if (LOG.isDebugEnabled())
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 29405928d7..534389441f 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
@@ -131,10 +131,11 @@ public abstract class AbstractClientCrossContextSessionTest
{
HttpSession session = request.getSession(false);
if (session == null)
- {
session = request.getSession(true);
- sessionId = session.getId();
- }
+
+ sessionId = session.getId();
+
+
// Add something to the session
session.setAttribute("B", "B");

Back to the top