Frage

Ich versuche, die restlet.org Bibliothek zu verwenden, um ein RESTful Web-Interface zu bauen, und ich habe bemerkt, dass es das Servlets Pendant im Gegensatz zu, es keine Ergänzung zu GenericServlet.init hat ().

Kurz der Bau eines weiteren Servlet meine Start Logik zu tun, gibt es eine eingebaute Möglichkeit, meine Datenbank Fabriken zu vermeiden Gebäude und dergleichen, die auf der ersten Anforderung (und alle angemessenen Verriegelungs Ich werde tun müssen, um mehrere Initialisierungen zu vermeiden )?

War es hilfreich?

Lösung

Sind Sie wollen es in einem Servlet-Container laufen? Wenn nicht, wie die Dokumentation zeigt Sie es laufen Stand-alone: ??

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();
}  

Sie könnte sicherlich tun, um die Initialisierung gibt.

Wenn Sie den Servlet-Ansatz verwenden mögen, versuchen, ein neues Servlet zu schreiben und sie erstreckt. Implementieren Sie Ihre init-Methode und rufen Sie das eine für die Superklasse.

Andere Tipps

Wenn Sie wirklich diese Umgebung in einem Servlet tun möchten, könnten Sie möglicherweise haben zwei Servlets in Ihrem Webapp: eine für die Restlet Anwendung / Komponente und eine für Ihre Initialisierung mit load-on-startup (die man nicht unbedingt auf jede Karte würde URL, soweit ich weiß, Sie müssen nicht). Auf diese Weise würden Sie nicht zu Unterklasse org.restlet.ext.servlet.ServerServlet haben. Ich denke, dies ist wahrscheinlich einfacher, da das init-Servlet nur init() enthalten würde, aber dies würde nur Arbeit für Dinge, die auf der Restlet nicht app abhängig / Komponente zunächst initialisiert werden.

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

Als Alternative (oder vielleicht in Ergänzung dazu), neige ich JNDI zu verwenden, um die Datenbankverbindungen zu initialisieren und ein paar andere Konfigurationseinstellungen. Dies ermöglicht es mir auch die gleiche Konfiguration und Lademechanismen zu halten, ob ich einen Restlet eigenständigen Server oder Restlet innerhalb einer Webapp verwendet werden.

Zum Beispiel für den Einsatz innerhalb eines Servlet-Container (zB Jetty oder Tomcat), verwende ich den JNDI-Konfiguration des Behälters, sondern auch für lokale Tests (mit einem eigenständigen Restlet app), verwende ich die Jetty JNDI Kontext Fabrik (die Sie bekommen können als separates Glas vom Rest der Jetty).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top