RESTLET GAE ECLIPSE初始化方法

时间:2012-12-04 15:18:33

标签: eclipse google-app-engine initialization restlet init

我正在使用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>

那么,我可以在哪里设置一个方法来初始化Web服务,ergo,一些代码只在应用程序启动时启动一些数据(一次),而不是第一次调用时。

由于

2 个答案:

答案 0 :(得分:2)

你是否使用Restlet,或者不使用AppEngine,你可以在web.xml中的任何servlet环境中设置一个上下文监听器,如下所示:

<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上的实例时,将在执行调用之前执行init代码;另一方面,由于必须处理呼叫,因此最有可能启动新实例。鸡肉和鸡蛋的故事......

答案 1 :(得分:0)

为此,您可以覆盖com.example.MainRestletApplication类的start()方法。它的生命周期与包装器RestletServlet同步。