some initial work at saving and loading sessions to an ehcache server, wip.
diff --git a/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheExchange.java b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheExchange.java
new file mode 100644
index 0000000..5789652
--- /dev/null
+++ b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheExchange.java
@@ -0,0 +1,24 @@
+package org.eclipse.jetty.nosql.ehcache;
+
+import java.io.IOException;
+
+import org.eclipse.jetty.client.ContentExchange;
+import org.eclipse.jetty.client.HttpExchange;
+
+public class EhcacheExchange extends ContentExchange
+{
+
+ @Override
+ protected void onRequestComplete() throws IOException
+ {
+ super.onRequestComplete();
+ }
+
+ @Override
+ protected void onResponseComplete() throws IOException
+ {
+ super.onResponseComplete();
+ }
+
+
+}
diff --git a/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheSessionManager.java b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheSessionManager.java
new file mode 100644
index 0000000..8a0a71f
--- /dev/null
+++ b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/EhcacheSessionManager.java
@@ -0,0 +1,129 @@
+package org.eclipse.jetty.nosql.ehcache;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URI;
+
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.nosql.NoSqlSession;
+import org.eclipse.jetty.nosql.NoSqlSessionManager;
+import org.eclipse.jetty.util.ajax.JSON;
+
+
+public class EhcacheSessionManager extends NoSqlSessionManager
+{
+ private HttpClient _client = new HttpClient();
+ private URI _cachingServerUri;
+ private String _cache;
+
+ public EhcacheSessionManager(URI cachingServerUri, String cache)
+ {
+ _cachingServerUri = cachingServerUri;
+ _cache = cache;
+
+ try
+ {
+ _client.start();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ checkOrCreateCache();
+ }
+
+ private void checkOrCreateCache()
+ {
+ EhcacheExchange saveExchange = new EhcacheExchange();
+ saveExchange.setMethod("PUT");
+
+ URI saveURI = _cachingServerUri.resolve(_cache);
+
+
+ saveExchange.setURL(saveURI.toString());
+
+ try
+ {
+ _client.send(saveExchange);
+
+ saveExchange.waitForDone();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected NoSqlSession loadSession(String clusterId)
+ {
+ EhcacheExchange loadExchange = new EhcacheExchange();
+ loadExchange.setMethod("GET");
+ URI loadURI = _cachingServerUri.resolve(_cache).resolve(clusterId);
+ loadExchange.setURL(loadURI.toString());
+
+ try
+ {
+ _client.send(loadExchange);
+ loadExchange.waitForDone();
+
+ System.out.println("Session: " + loadExchange.getResponseContent());
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+
+ System.out.println("Load URI: " + loadURI);
+
+ return null;
+ }
+
+ @Override
+ protected Object save(NoSqlSession session, Object version, boolean activateAfterSave)
+ {
+ EhcacheExchange saveExchange = new EhcacheExchange();
+ saveExchange.setMethod("PUT");
+ saveExchange.setRequestContentSource(new ByteArrayInputStream(JSON.toString(new JsonSessionData(session)).getBytes()));
+ URI saveURI = _cachingServerUri.resolve(_cache).resolve(session.getClusterId());
+ saveExchange.setURL(saveURI.toString());
+
+ try
+ {
+ _client.send(saveExchange);
+ saveExchange.waitForDone();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+
+ System.out.println("Save URI: " + saveURI);
+
+ return session.getVersion();
+ }
+
+ @Override
+ protected Object refresh(NoSqlSession session, Object version)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected boolean remove(NoSqlSession session)
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
diff --git a/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/JsonSessionData.java b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/JsonSessionData.java
new file mode 100644
index 0000000..37c0e28
--- /dev/null
+++ b/jetty-ehcache-sessions/src/main/java/org/eclipse/jetty/nosql/ehcache/JsonSessionData.java
@@ -0,0 +1,37 @@
+package org.eclipse.jetty.nosql.ehcache;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jetty.nosql.NoSqlSession;
+
+public class JsonSessionData
+{
+ public String clusterId;
+ public String nodeId;
+ public Long creationTime;
+ public Long accessed;
+ public Integer requests;
+ public Integer attributes;
+ public Object version;
+ public Map<String, Object> attrs = new HashMap<String,Object>();
+
+ public JsonSessionData(NoSqlSession session)
+ {
+ clusterId = session.getClusterId();
+ nodeId = session.getNodeId();
+ creationTime = session.getCreationTime();
+ accessed = session.getAccessed();
+ requests = session.getRequests();
+ attributes = session.getAttributes();
+ version = session.getVersion();
+
+ Enumeration<String> e = session.getAttributeNames();
+ while (e.hasMoreElements())
+ {
+ String key = e.nextElement();
+ attrs.put(key,session.getAttribute(key));
+ }
+ }
+}
\ No newline at end of file
diff --git a/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/EhcacheServer.java b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/EhcacheServer.java
index f7f2a5c..0dfc149 100644
--- a/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/EhcacheServer.java
+++ b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/EhcacheServer.java
@@ -4,7 +4,11 @@
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.SessionIdManager;
+import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.server.session.AbstractTestServer;
+import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.webapp.WebAppContext;
@@ -17,7 +21,7 @@
public EhcacheServer()
{
-
+
}
public void start() throws Exception
@@ -53,17 +57,11 @@
_server = null;
}
- public URI getURI() throws Exception
+ public URI getBaseURI() throws Exception
{
- return new URI("http://" + _host + ":" + _port + _path);
+ return new URI("http://" + _host + ":" + _port + _path + "/rest/");
}
- public static void main(String[] args) throws Exception
- {
- EhcacheServer cacheServer = new EhcacheServer();
- cacheServer.start();
-
- System.out.println(cacheServer.getURI());
- }
+
}
diff --git a/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/SessionSavingValueTest.java b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/SessionSavingValueTest.java
new file mode 100644
index 0000000..db37bf4
--- /dev/null
+++ b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/SessionSavingValueTest.java
@@ -0,0 +1,15 @@
+package org.eclipse.jetty.nosql.ehcache;
+
+import org.eclipse.jetty.server.session.AbstractSessionValueSavingTest;
+import org.eclipse.jetty.server.session.AbstractTestServer;
+
+public class SessionSavingValueTest extends AbstractSessionValueSavingTest
+{
+
+ @Override
+ public AbstractTestServer createServer(int port, int max, int scavenge)
+ {
+ return new TestServer(0);
+ }
+
+}
diff --git a/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/TestServer.java b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/TestServer.java
new file mode 100644
index 0000000..ab0f360
--- /dev/null
+++ b/jetty-ehcache-sessions/src/test/java/org/eclipse/jetty/nosql/ehcache/TestServer.java
@@ -0,0 +1,53 @@
+package org.eclipse.jetty.nosql.ehcache;
+
+import org.eclipse.jetty.server.SessionIdManager;
+import org.eclipse.jetty.server.SessionManager;
+import org.eclipse.jetty.server.session.AbstractTestServer;
+import org.eclipse.jetty.server.session.SessionHandler;
+
+public class TestServer extends AbstractTestServer
+{
+ EhcacheServer _server = new EhcacheServer();
+
+ public TestServer(int port)
+ {
+ super(port);
+
+ try
+ {
+ _server.start();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public SessionIdManager newSessionIdManager()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SessionManager newSessionManager()
+ {
+ try
+ {
+ return new EhcacheSessionManager(_server.getBaseURI(), "HttpSessions");
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public SessionHandler newSessionHandler(SessionManager sessionManager)
+ {
+ return new SessionHandler(sessionManager);
+ }
+
+}