O uso de filtros com o servidor Grizzly executando um serviço Jersey RESTO
Pergunta
Eu estou tentando usar Grizzly para criar um servidor para executar um serviço REST que eu desenvolvi usando Jersey. Estou criando o servidor Grizzly usando:
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);
como todos os exemplos que eu encontrei parecem sugerir. Isso é bom, o servidor inicia e é capaz de transmitir solicitações de entrada para minhas aulas de recursos.
No entanto, a implementação do serviço requer o uso de um filtro de servlet. Parece que Grizzly suporta a definição de filtros e outras opções de configuração relacionadas servlet semelhantes, através da classe ServletAdapter
. Meu problema é que eu não posso trabalhar para fora como para definir um filtro quando se utiliza um com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
que fornece integração Jersey.
Todas as idéias?
Solução
Eu acho que pode ter algo para você ...
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);
... seu trabalho para mim, espero que ajude você também.
Outras dicas
Você tentou:
((ServletAdapter) threadSelector.getAdapter()).addFilter()