可以使用listener init的變量,並設置爲背景的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!";
}
}
這看起來像一個很好的解決方案,它在加載時運行正常,但當我嘗試在我的Resource類中引用此EJB時,我得到一個InvocationTargetException(由容器顯示爲NullPointerException)。 – Graham 2013-05-12 20:37:17
來自Jersey郵件列表:_By不支持默認注入EE資源,除非您將資源轉換爲託管bean(並且請注意,將資源類轉換爲託管bean時有一些限制)._ – Graham 2013-05-12 22:21:11
一旦我添加了@Stateless標誌我的資源,這工作完美,絕對是一個很好的解決方案。這兩頁幫助我更好地理解了這些概念:[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 2013-05-13 16:15:02