簡體   English   中英

Context和InitialContext - 我應該在這些對象上調用close()方法嗎?

[英]Context and InitialContext - should I be calling the close() method on these objects?

如果我在Context和InitialContext上更早地查看Java SE6文檔,我會看到每個文件都有一個close()方法。

所以現在我想知道,我是否需要在Context / InitialContext對象上調用close()方法?

這是我的典型servlet代碼片段以及C​​ontext / 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        

close方法允許釋放上下文使用的資源,而不是等待GC釋放它們。 對於需要與例如數據庫或外部系統進行開放連接的上下文而言,這可能是有用的。 但我很確定它對java:comp / env上下文沒用。 無論如何,我從未見過關閉它們的任何代碼。

進入是一個很好的習慣。 例如,我總是確保關閉我的InputStream類,即使我使用的是ByteArrayInputStream,其中close()方法是no-op。 這樣,如果我稍后將其更改為其他實現,那么還需要更改一件事。

同樣的情況 - 如果你調用close(),你將與任何JNDI實現更兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM