Context и InitialContext - мне следует вызывать метод close () для этих объектов? - PullRequest
9 голосов
/ 25 февраля 2011

Если бы я раньше заглянул в документацию по Java SE6 по Context и InitialContext, я бы увидел, что для каждого есть метод close().

Так что теперь мне интересно, нужно ли вызывать метод close() для объектов Context / InitialContext?

Вот фрагмент моего типичного кода сервлета и как используется объект Context / InitialContext.

public class MyTypicalServlet extends HttpServlet {     

    //thread safe
    DataSource ds;
    String FilePath;    

public void init(ServletConfig config) throws ServletException {

    super.init(config);
    try {
        final Context ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDB");

        FilePath = getServletContext().getInitParameter("FilePath");                

    } catch (NamingException e) {
        throw new ServletException("Unable to find datasource: " + e.getMessage(), e);
    }
}               

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        doPost(req,res);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {       

    //...a bunch of code
    }

}//class        

Ответы [ 2 ]

7 голосов
/ 25 февраля 2011

Метод close позволяет высвобождать ресурсы, используемые контекстом, вместо того, чтобы ждать, пока GC их освободит. Возможно, это будет полезно для контекста, требующего открытого соединения, например, с базой данных или внешней системой. Но я уверен, что это не полезно для контекста java: comp / env. Во всяком случае, я никогда не видел ни одного кода, закрывающего их.

6 голосов
/ 25 февраля 2011

Это хорошая привычка. Например, я всегда проверяю закрытие своих классов InputStream, даже если я использую ByteArrayInputStream, где метод close () не используется. Таким образом, если позже я изменю его на какую-то другую реализацию, это тоже будет менее важно.

Тот же самый случай здесь - если вы вызываете close (), вы будете более совместимы с любой реализацией JNDI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...