Pregunta

Estoy tratando de utilizar la biblioteca restlet.org para construir una interfaz web REST, y me he dado cuenta que a diferencia de su contraparte servlet, no tiene complemento a GenericServlet.init ().

A falta de la construcción de otro servlet para hacer mi lógica de arranque, ¿hay alguna incorporada manera de evitar la construcción de mis fábricas de bases de datos y similares en la primera solicitud (y todo el acorde de bloqueo Voy a tener que hacer para evitar múltiples inicializaciones )?

¿Fue útil?

Solución

¿Usted está queriendo ejecutarlo en un contenedor de servlets? Si no es así, los espectáculos de documentación que la forma de ejecutarlo independiente:

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

Por supuesto que podría hacer la inicialización allí.

Si desea utilizar el enfoque de servlets, intentar escribir un nuevo servlet y extendiendo la suya. Poner en práctica su método init y llamar a la una para la superclase.

Otros consejos

Si realmente quiere hacer esto en un entorno de servlet, podría tener dos servlets dentro de su webapp: uno para la aplicación Restlet / componente y uno para su inicialización, utilizando load-on-startup (que no necesariamente asignar a cualquier URL, por lo que yo soy consciente de que no tiene que hacerlo). De esta manera, usted no tendría que org.restlet.ext.servlet.ServerServlet subclase. Creo que esto es probablemente más fácil, ya que el servlet init acaba contener init(), pero esto sería sólo el trabajo para las cosas que no dependen de la aplicación Restlet / componentes que ser inicializado en primer lugar.

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

Como alternativa (o tal vez en complemento a esto), que tienden a utilizar JNDI para la inicialización de las conexiones de base y algunos otros parámetros de configuración. Esto también me permite mantener los mismos mecanismos de configuración y carga, si utilizo un servidor independiente o Restlet Restlet dentro de una aplicación web.

Por ejemplo, para el despliegue dentro de un contenedor de servlets (por ejemplo, embarcadero o Tomcat), utilizo la configuración JNDI del contenedor, pero para las pruebas locales (con un independiente Restlet aplicación), utilizo la factoría de contexto embarcadero JNDI (que se puede obtener como un frasco separado del resto de embarcadero).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top