2010-05-13 22 views
1

我想,DAO是線程安全的,不使用任何類成員。dao作爲servlet的成員 - 正常嗎?

因此,它可以作爲一個Servlet的私人領域沒有任何問題使用?我們只需要一個副本,並且多個線程可以同時訪問它,所以爲什麼還要創建一個局部變量,對不對?

+1

如果你使用的DAO是線程安全的,它可以在servlet中用作成員變量而不會有任何問題。 – 2010-05-13 08:00:09

+0

在我看來,它是線程安全的。 DAO只包含一次注入的SessionFactory,傳遞給方法的參數不會在方法內的任何地方更改。 – EugeneP 2010-05-13 08:03:32

+0

正如我所說,如果你100%確定你的DAO是線程安全的,你可以在Servlet中用它作爲成員變量。 – 2010-05-13 08:53:03

回答

1

「DAO」只是數據庫抽象類的一般術語。它們是否是線程安全的取決於具體的實現。

這個不好的例子可以稱爲DAO,但如果多個線程同時調用insert方法,它會讓你陷入困境。

class MyDAO { 
    private Connection connection = null; 

    public boolean insertSomething(Something o) throws Exception { 
      try { 
       connection = getConnection() 
       //do insert on connection. 
      } finally { 
       if (connection != null) { 
        connection.close(); 
       } 
      } 
    } 
} 

所以答案是:如果你的DAO處理連接和交易的權利,它應該工作。

+0

好的,謝謝。 – EugeneP 2010-05-13 08:16:19