6

古いベンダー API をラップする RESTful Web サービスを作成しています。いくつかの外部構成が必要になり、ファイルまたは rdbms のいずれかでサーバーに保存されます。Glassfish 3.1.2 で Jersey 1.11.1 を使用しています。この構成データはすべて文字列キー/値形式です。

私の最初の質問はこれです - リクエスト間で永続化され、すべてのリソースで利用できるように、グローバル/インスタンス変数をジャージーのどこに保存できますか? これが純粋なサーブレット アプリケーションである場合は、ServletContext を使用してこれを実現します。

質問の 2 番目の部分は、Jersey サーバーがロードされた後、どのように構成をロードできるかということです。繰り返しますが、私のサーブレットの類推は、init() メソッドに相当するものを見つけることです。

4

2 に答える 2

8

次のように、変数の初期化にリスナーを使用し、Web アプリケーションの開始前に属性としてコンテキストに設定できます。

package org.paulvargas.shared;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class LoadConfigurationListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        // read file or rdbms
        ...
        ServletContext context = sce.getServletContext();
        // set attributes
        ...
    }

    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext context = sce.getServletContext();
        // remove attributes
        ...
    }

}

このリスナーは で設定されますweb.xml

<listener>
    <listener-class>org.paulvargas.shared.LoadConfigurationListener</listener-class>
</listener>

@Contextアノテーションを使用してServletContext、属性を挿入および取得できます。

package org.paulvargas.example.helloworld;

import java.util.*;

import javax.servlet.ServletContext;
import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("/world")
public class HelloWorld {

    @Context
    private ServletContext context;

    @GET
    @Produces("text/plain; charset=UTF-8")
    public String getGreeting() {

        // get attributes
        String someVar = (String) context.getAttribute("someName")

        return someVar + " says hello!";
    }

}
于 2013-05-12T04:20:58.267 に答える