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)?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top