2009-09-17 15 views
12

Sto cercando di utilizzare Grizzly per creare un server per eseguire un servizio REST che ho sviluppato utilizzando Jersey. Sto creando il server Grizzly usando:Uso dei filtri con il server Grizzly su cui è in esecuzione un servizio REST Jersey

final String baseUri = "http://localhost:9998/"; 
final Map<String, String> initParams = new HashMap<String, String>(); 
initParams.put("com.sun.jersey.config.property.packages", "me.my.rest.package"); 
SelectorThread threadSelector = 
    GrizzlyWebContainerFactory.create(baseUri, initParams); 

come sembrano suggerire tutti gli esempi che ho trovato. Questo va bene, il server si avvia ed è in grado di inoltrare le richieste in arrivo alle mie classi di risorse.

Tuttavia, l'implementazione del servizio richiede l'utilizzo di un filtro servlet. Sembra che Grizzly supporti la definizione di filtri e altre opzioni di configurazione relative ai servlet simili, tramite la classe ServletAdapter. Il mio problema è che non riesco a capire come definire un filtro quando si utilizza un com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory che fornisce l'integrazione di Jersey.

Qualche idea?

+0

stupefacente, ero sul punto di chiedere esattamente la stessa domanda. Fammi sapere se impari qualcosa. Farò lo stesso. – ra9r

risposta

8

Penso che potrei avere qualcosa per te ...

GrizzlyWebServer ws = new GrizzlyWebServer(9999); 
ServletAdapter jerseyServletAdapter = new ServletAdapter(); 
jerseyServletAdapter.setServletInstance(new ServletContainer()); 
jerseyServletAdapter.addInitParameter(
    "com.sun.jersey.config.property.packages", "me.my.rest.package"); 
jerseyServletAdapter.setServletPath("/api"); 

// HERE IS HOW YOU ADD A FILTER 
jerseyServletAdapter.addFilter(new MyFilter(), "HibernateSessionFilter", null); 

ws.addGrizzlyAdapter(jerseyServletAdapter, null); 

... il suo lavoro per me, spero che ti aiuta pure.

+1

Grazie! Questo è esattamente ciò di cui ho bisogno. – Andy

+0

Come si aggiunge un contesto servlet a questo schema in modo tale che è possibile iniettare tramite oggetti @Context come HttpServletRequest negli oggetti risorsa? – ae6rt

1

Hai provato:

((ServletAdapter) threadSelector.getAdapter()).addFilter() 
Problemi correlati