L'inizializzazione dell'avvio RESTlet è deprecata?
Domanda
Sto cercando di utilizzare la libreria restlet.org per creare un'interfaccia web RESTful e ho notato che, a differenza della sua controparte servlet, non ha alcun complemento a GenericServlet.init().
A parte la creazione di un altro servlet per eseguire la mia logica di avvio, esiste un modo integrato per evitare di creare le mie fabbriche di database e simili alla prima richiesta (e tutto il blocco proporzionato che dovrò fare per evitare inizializzazioni multiple)?
Soluzione
Vuoi eseguirlo in un contenitore servlet?In caso contrario, la documentazione mostra come eseguirlo in modo autonomo:
public static void main(String[] args) throws Exception {
// Create a new Component.
Component component = new Component();
// Add a new HTTP server listening on port 8182.
component.getServers().add(Protocol.HTTP, 8182);
// Attach the sample application.
component.getDefaultHost().attach("/firstSteps",
new FirstStepsApplication());
// Start the component.
component.start();
}
Potresti certamente fare l'inizializzazione lì.
Se vuoi utilizzare l'approccio servlet, prova a scrivere un nuovo servlet ed estendere il suo.Implementa il tuo metodo init e chiama quello per la super classe.
Altri suggerimenti
Se si vuole veramente fare questo in un ambiente servlet, si potrebbe avere due servlet all'interno della vostra webapp: uno per l'applicazione Restlet / Component e uno per il vostro inizializzazione, utilizzando load-on-startup
(che non sarebbe necessariamente mappare a qualsiasi URL, per quanto io sappia non c'è bisogno a). In questo modo, non avrebbe dovuto sottoclasse org.restlet.ext.servlet.ServerServlet
. Penso che questo è probabilmente più facile, dal momento che init servlet sarebbe solo contenere init()
, ma questo sarebbe solo lavoro per cose che non dipendono da app Restlet / componenti essere inizializzato prima.
<context-param>
<param-name>org.restlet.clients</param-name>
<param-value>HTTP HTTPS CLAP FILE</param-value>
</context-param>
<servlet>
<servlet-name>ExampleInit</servlet-name>
<servlet-class>example.TestInitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Example</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
<param-value>example.TestApplication</param-value>
</init-param>
<init-param>
<param-name>org.restlet.autoWire</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
In alternativa (o forse in complemento a questo), tendo a usare JNDI per inizializzare le connessioni al database e poche altre impostazioni di configurazione. Questo mi permette anche di mantenere gli stessi meccanismi di configurazione e di carico, se io uso un server autonomo o Restlet Restlet all'interno di una webapp.
Ad esempio, per la distribuzione all'interno di un servlet container (ad esempio Jetty o Tomcat), io uso la configurazione JNDI del contenitore, ma per i test locali (con un autonomo Restlet app), io uso la fabbrica contesto Jetty JNDI (che si può ottenere come un vaso separato dal resto del molo).