あなたは、Webアプリケーションの開始前に、変数や属性としてコンテキストに設定初期化のために、以下のようなものをlistenerを使用することができます。
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>
あなたはServletContext
を注入し、属性を取得するための@Context
アノテーションを使用することができます。
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!";
}
}
これは素晴らしいソリューションのように見え、ロード時に正しく実行されますが、リソースクラスでこのEJBを参照しようとするとInvocationTargetException(コンテナによってNullPointerExceptionと表示されます)が表示されます。 – Graham
Jerseyのメーリングリストから:リソースをマネージドBeanに変換しない限り、EEリソースのデフォルト注入はサポートされません(リソースクラスをマネージドBeanに変換するときにいくつかの制約があることに注意してください)。_ – Graham
@私のリソースへのステートレスフラグは、これは完全に動作し、間違いなく素晴らしい解決策です。これらの2つのページは、私がコンセプトをもっとよく理解する助けになりました:[EJB 3.1とREST - 軽量ハイブリッド](http://www.adam-bien.com/roller/abien/entry/ejb_3_1_and_rest)[Singletons](https ://blogs.oracle.com/kensaks/entry/singletons) – Graham