Como fazer com que o mecanismo de servlet incorporado instancie servlets com entusiasmo?
Pergunta
O problema é simples, mas já estou lutando um pouco.
Server server = new Server(8080);
Context context = new Context(server, "/", Context.NO_SESSIONS);
context.addServlet(MainPageView.class, "/");
context.addServlet(UserView.class, "/signup");
server.start();
Esse é um código bastante padrão que você pode encontrar em qualquer lugar do mundo Jetty.Eu tenho um aplicativo que incorpora o Jetty como um mecanismo de servlet e possui alguns servlets.
A instanciação de alguns desses servlets exige muito trabalho na inicialização.Diga – lendo arquivos de configuração adicionais, conectando-se ao banco de dados, etc.Como posso fazer com que o mecanismo de servlet instancie todos os servlets com entusiasmo, para que eu possa fazer todo o trabalho pesado antecipadamente e não na primeira solicitação do usuário?
Solução
Não sei por que usar a opção Justin do Guice make não funciona para você.O que exatamente está sendo injetado?Não tenho certeza se isso ajudaria você porque é muito semelhante ao que Justin escreveu acima, mas se você fizer dessa maneira, Jetty fará a instanciação real.
Context context = new Context(server, "/", Context.NO_SESSIONS);
ServletHolder mainPageViewHolder = new ServletHolder(MainPageView.class);
// Do this to force Jetty to instantiate the servlet
mainPageViewHolder.getServlet();
context.addServlet(mainPageViewHolder, "/");
Outras dicas
Use o Context.addServlet
sobrecarga que leva um ServletHolder
. ServletHolder
é uma classe que aceita uma instância de classe ou servlet.
Servlet myServlet = new MyServlet();
ServletHolder holder = new ServletHolder(myServlet);
context.addServlet(holder, "/");
Isso pressupõe o Jetty 6.Acho que funcionará para o Jetty 7 também.