2012-12-04 31 views
1

我正在使用Restlet,GAE和Eclipse开发应用程序。 OKS,我得到这个:RESTLET GAE ECLIPSE初始化方法

公共类MainRestletApplication扩展应用{

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服务,一些代码只在应用程序启动时(一次)启动一些数据,而不是第一次启动来电。

感谢

回答

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

0

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