следующий синглтон:
@Singleton
public class MasterDataCache
{
private final static Logger logger = LoggerFactory.getLogger(MasterDataCache.class);
private Map cache;
@PostConstruct
public void initCache() {
logger.debug("initCache()");
this.cache = new HashMap();
}
public Object get(String key){
return this.cache.get(key);
}
public void store(String key,Object value){
this.cache.put(key, value);
}
}
И следующий сервлет:
@WebServlet(name="SingletonTester", urlPatterns={"/SingletonTester"})
public class SingletonTester extends HttpServlet {
@EJB
MasterDataCache masterDataCache;
@Override
public void init(){
masterDataCache.store("startup", new Date());
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
out.println("Startup time: " + masterDataCache.get("startup") );
} finally {
out.close();
}
}
}
, упакованный как война, работает, как и ожидалось, при развертывании «вручную» в GFv3. Он также развертывается нормально и работает как положено в NetBeans (initCache
вызывается только один раз). Моя единственная проблема заключается в том, что при Eclipse происходит сбой развертывания (GFv3 жалуется на eclipseApps/$projectName
, не содержащий каких-либо модулей EJB, которые, однако, находятся в eclipseApps/$projectName/WEB-INF/classses
). К сожалению, это похоже на ошибку в плагине GlassFish Eclipse (по крайней мере, в той версии, которую я использую). Хотя я не вижу много проблем в трекере проблем ... странно, потому что это похоже на большую блокировку. Но вне Eclipse GFv3 ведет себя нормально, я не могу воспроизвести вашу проблему.
Обновление: Наконец-то все заработало под Eclipse и GlassFish v3. Я не буду вдаваться в подробности, но проблема в том, что мне почему-то не удалось напрямую распознать мой проект как «Dynamic Web Module» 2.5, изначально была установлена версия 2.3, и я думаю, что это как-то связано с ошибкой развертывания. на GFv3. После корректной настройки моего проекта (с фасетом, равным 2,5), его развертывание работало нормально. Так что я просто облажался.