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);
+    }
+
+}