11package com .cloudata .structured ;
22
33import java .io .File ;
4+ import java .util .EnumSet ;
45import java .util .List ;
56
7+ import javax .servlet .DispatcherType ;
8+
9+ import org .eclipse .jetty .server .Server ;
10+ import org .eclipse .jetty .servlet .FilterHolder ;
11+ import org .eclipse .jetty .servlet .ServletContextHandler ;
612import org .robotninjas .barge .ClusterConfig ;
713import org .robotninjas .barge .RaftService ;
814import org .robotninjas .barge .Replica ;
15+ import org .slf4j .Logger ;
16+ import org .slf4j .LoggerFactory ;
917
1018import com .cloudata .structured .web .WebModule ;
1119import com .google .common .collect .Lists ;
1220import com .google .inject .Guice ;
1321import com .google .inject .Injector ;
14- import com .sun .grizzly .http .SelectorThread ;
15- import com .sun .jersey .api .container .grizzly .GrizzlyServerFactory ;
16- import com .sun .jersey .api .core .PackagesResourceConfig ;
17- import com .sun .jersey .api .core .ResourceConfig ;
18- import com .sun .jersey .core .spi .component .ioc .IoCComponentProviderFactory ;
19- import com .sun .jersey .guice .spi .container .GuiceComponentProviderFactory ;
22+ import com .google .inject .servlet .GuiceFilter ;
2023
2124public class StructuredServer {
2225
26+ private static final Logger log = LoggerFactory .getLogger (StructuredServer .class );
27+
2328 final File baseDir ;
2429 final int httpPort ;
2530 private final Replica local ;
2631 private final List <Replica > peers ;
2732 private RaftService raft ;
28- private SelectorThread selector ;
33+ private Server jetty ;
2934
3035 public StructuredServer (File baseDir , Replica local , List <Replica > peers , int httpPort ) {
3136 this .baseDir = baseDir ;
@@ -35,7 +40,7 @@ public StructuredServer(File baseDir, Replica local, List<Replica> peers, int ht
3540 }
3641
3742 public synchronized void start () throws Exception {
38- if (raft != null || selector != null ) {
43+ if (raft != null || jetty != null ) {
3944 throw new IllegalStateException ();
4045 }
4146
@@ -58,10 +63,23 @@ public synchronized void start() throws Exception {
5863
5964 Injector injector = Guice .createInjector (new StructuredStoreModule (stateMachine ), new WebModule ());
6065
61- ResourceConfig rc = new PackagesResourceConfig (WebModule .class .getPackage ().getName ());
62- IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory (rc , injector );
66+ // ResourceConfig rc = new PackagesResourceConfig(WebModule.class.getPackage().getName());
67+ // IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory(rc, injector);
68+ //
69+ // this.selector = GrizzlyServerFactory.create(baseUri, rc, ioc);
70+ //
71+
72+ this .jetty = new Server (httpPort );
73+
74+ ServletContextHandler context = new ServletContextHandler ();
75+ context .setContextPath ("/" );
76+
77+ FilterHolder filterHolder = new FilterHolder (injector .getInstance (GuiceFilter .class ));
78+ context .addFilter (filterHolder , "*" , EnumSet .of (DispatcherType .REQUEST ));
79+
80+ jetty .setHandler (context );
6381
64- this . selector = GrizzlyServerFactory . create ( baseUri , rc , ioc );
82+ jetty . start ( );
6583 }
6684
6785 public String getHttpUrl () {
@@ -85,15 +103,19 @@ public static void main(String... args) throws Exception {
85103 Runtime .getRuntime ().addShutdownHook (new Thread () {
86104 @ Override
87105 public void run () {
88- server .stop ();
106+ try {
107+ server .stop ();
108+ } catch (Exception e ) {
109+ log .warn ("Error shutting down HTTP server" , e );
110+ }
89111 }
90112 });
91113 }
92114
93- public synchronized void stop () {
94- if (selector != null ) {
95- selector . stopEndpoint ();
96- selector = null ;
115+ public synchronized void stop () throws Exception {
116+ if (jetty != null ) {
117+ jetty . stop ();
118+ jetty = null ;
97119 }
98120
99121 if (raft != null ) {
0 commit comments