2008-09-16 8 views
0

Das Problem ist einfach, aber ich kämpfe schon ein bisschen.Wie macht man eingebettete Servlet-Engine bereit, Servlets eifrig zu instantiieren?

Server server = new Server(8080); 
Context context = new Context(server, "/", Context.NO_SESSIONS); 
context.addServlet(MainPageView.class, "/"); 
context.addServlet(UserView.class, "/signup"); 
server.start(); 

Das ist ein ziemlich Standard-Code, den Sie überall in Jetty Welt finden können. Ich habe eine Anwendung, die Jetty als Servlet-Engine einbettet und einige Servlets hat.

Instanziierung von einigen dieser Servlets erfordert schwere Arbeit beim Start. Sagen Sie – Lesen zusätzlicher Konfigurationsdateien, Herstellen einer Verbindung zur Datenbank usw. Wie kann ich die Servlet-Engine veranlassen, alle Servlets eifrig zu instanziieren, so dass ich die ganze harte Arbeit im Voraus und nicht auf die erste Benutzeranforderung ausführen kann?

Antwort

2

Ich bin mir nicht sicher, warum die Verwendung von Guice's Justins Option nicht für Sie funktioniert. Was genau wird eingespritzt? Ich bin mir nicht sicher, ob dir das überhaupt helfen würde, weil es sehr ähnlich zu dem ist, was Justin oben geschrieben hat, aber wenn du es so machst, wird Jetty das tatsächlich Instanziieren übernehmen.

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, "/"); 
+0

Private Felder des Servlets werden injiziert. Diese Antwort ist besser, aber ich hoffte irgendwie auf eine unbekannte fehlende Flagge, die ich setzen kann, und Jety wird alles eifrig instanziieren. Jedenfalls denke ich, dass ich damit leben muss. – Marcin

0

Verwenden Sie die Context.addServlet-Überladung, die einen ServletHolder übernimmt. ServletHolder ist eine Klasse, die entweder eine Klasse oder eine Servlet-Instanz akzeptiert.

Servlet myServlet = new MyServlet(); 
ServletHolder holder = new ServletHolder(myServlet); 
context.addServlet(holder, "/"); 

Dies setzt Jetty 6 voraus. Ich denke, es wird auch für Jetty 7 funktionieren.

+0

Justin, das würde den Trick machen. Aber aus einigen Gründen (d. H. Versteckte Guice-basierte Abhängigkeitsinjektion) brauche ich Jetty, um eifrig die Servlets für mich zu instantiieren. – Marcin