Метод инициализации RESTLET GAE ECLIPSE

Я разрабатываю приложение с Restlet, GAE и Eclipse. Окс, вот что получилось:

открытый класс MainRestletApplication расширяет Application {

public MainRestletApplication()
{
//init code?
} 


@Override
public Restlet createInboundRoot() {
    Router router = new Router(getContext());

    router.attach("/v1/mainstatus",MainStatus.class);
    router.attach("/v1/game/{id}/result",GameResult.class);

    return router;
}

}

и это:

<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>com.example.MainRestletApplication
        </param-value>
    </init-param>
</servlet>

<!-- Catch all requests -->
<servlet-mapping>
    <servlet-name>RestletServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Что ж, где я могу разместить метод для инициализации веб-службы, следовательно, некоторый код для инициализации некоторых данных только при запуске приложения (один раз), а не при первом вызове.

Спасибо


person jlmg5564    schedule 04.12.2012    source источник


Ответы (2)


Независимо от того, используете ли вы Restlet или нет, AppEngine или нет, вы можете настроить прослушиватель контекста в любой среде сервлета в своем web.xml следующим образом:

<listener>
    <listener-class>
        example.ServletContextExample
    </listener-class>
</listener>

И реализуйте это;

public class ServletContextExample implements ServletContextListener{
    ServletContext context;
    public void contextInitialized(ServletContextEvent contextEvent) {
        System.out.println("Context Created");
        context = contextEvent.getServletContext();
        // set variable to servlet context
        context.setAttribute("TEST", "TEST_VALUE");
    }
    public void contextDestroyed(ServletContextEvent contextEvent) {
        context = contextEvent.getServletContext();
        System.out.println("Context Destroyed");
    }
}

Когда ваш экземпляр в GAE запущен, код инициализации будет выполнен до обработки вызова; с другой стороны, скорее всего, запускается новый экземпляр, потому что вызов должен быть обработан. история курицы и яйца ...

person koma    schedule 04.12.2012

Для этой цели вы можете переопределить метод start () вашего класса com.example.MainRestletApplication. Его жизненный цикл синхронизируется с оболочкой RestletServlet.

person Jerome Louvel    schedule 10.12.2012