Поскольку JBoss 4.2 не поддерживает инъекции @EJB, я использую поиск JNDI для ссылки на EJB, который необходим сервлету.
Я обеспокоен тем, что этот тип поиска может привести к росту памяти без кучи Permgen в JVM.
Как я понимаю, JNDI - это форма динамической загрузки классов, поэтому это может вызвать утечку загрузчика классов.
Итак, мой вопрос: может ли приведенный ниже код сервлета вызывать утечку памяти Permgen с течением времени?
Кроме того, я должен явно вызывать метод close () в InitialContext после поиска? Есть ли вероятность, что GC не очищает InitialContexts, как ожидалось, из-за того, как они создаются здесь (в сервлете)?
Спасибо.
public class MyServlet extends HttpServlet {
// JBoss 4.x does not support @EJB injections in servlets (see jndi lookup below)
@EJB
private MyService myService;
private static final String SERVICE_JNDI_NAME = "MyServiceBean";
private Logger log = Logger.getLogger(this.getClass().getPackage().getName());
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// JBoss 4.x does not support @EJB injections in servlets
InitialContext ctx = new javax.naming.InitialContext();
myService = (MyService) ctx.lookup(SERVICE_JNDI_NAME);
} catch (NamingException e) {
log.warn("NamingException trying to lookup MyService in context");
throw new RuntimeException(e);
}
...
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/page.jsp");
requestDispatcher.forward(request, response);
}
}