1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.terracotta.servlet;
16
17 import java.util.concurrent.TimeUnit;
18
19 import org.mortbay.jetty.Server;
20 import org.mortbay.jetty.SessionIdManager;
21 import org.mortbay.jetty.handler.ContextHandlerCollection;
22 import org.mortbay.jetty.servlet.Context;
23 import org.mortbay.jetty.servlet.SessionHandler;
24
25
26
27
28 public class TerracottaJettyServer
29 {
30 private final Server server;
31 private final int maxInactivePeriod;
32 private final int scavengePeriod;
33 private final ContextHandlerCollection contexts;
34 private SessionIdManager sessionIdManager;
35
36 public TerracottaJettyServer(int port)
37 {
38 this(port, 30, 10);
39 }
40
41 public TerracottaJettyServer(int port, int maxInactivePeriod, int scavengePeriod)
42 {
43 this.server = new Server(port);
44 this.maxInactivePeriod = maxInactivePeriod;
45 this.scavengePeriod = scavengePeriod;
46 this.contexts = new ContextHandlerCollection();
47 this.sessionIdManager = new TerracottaSessionIdManager(server);
48 }
49
50 public void start() throws Exception
51 {
52
53 server.setHandler(contexts);
54 server.start();
55 }
56
57 public Context addContext(String contextPath)
58 {
59 Context context = new Context(contexts, contextPath);
60
61 TerracottaSessionManager sessionManager = new TerracottaSessionManager();
62 sessionManager.setIdManager(sessionIdManager);
63 sessionManager.setMaxInactiveInterval(maxInactivePeriod);
64 sessionManager.setScavengePeriodMs(TimeUnit.SECONDS.toMillis(scavengePeriod));
65
66 SessionHandler sessionHandler = new SessionHandler(sessionManager);
67 sessionManager.setSessionHandler(sessionHandler);
68 context.setSessionHandler(sessionHandler);
69
70 return context;
71 }
72
73 public void stop() throws Exception
74 {
75 server.stop();
76 }
77 }