1

Restlet、GAE、Eclipse を使用してアプリケーションを開発しています。わかりました、私はこれを得ました:

public class MainRestletApplication extends 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 サービスを初期化するためのメソッドをどこに置くことができますか? つまり、最初の呼び出しが来たときではなく、アプリが開始されたとき (1 回) にのみデータを初期化するコードを配置できます。

ありがとう

4

2 に答える 2

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 上のインスタンスが開始されると、呼び出しが処理される前に init コードが実行されます。一方、呼び出しを処理する必要があるため、新しいインスタンスが開始される可能性が最も高くなります。鶏と卵の話…

于 2012-12-04T17:43:25.003 に答える
0

この目的のために、com.example.MainRestletApplication クラスの start() メソッドをオーバーライドできます。そのライフサイクルはラッパー RestletServlet と同期されます。

于 2012-12-10T08:29:53.103 に答える