如何在資料訪問層中引用資料庫連線池?

nfxu發表於2006-10-14
在一個典型的WEB應用中,使用三層模式,顯示層,邏輯層,資料層。邏輯層和資料層都不引用任何顯示層/WEB層裡

的引數,例如request, session, context等。

在資料層,如果使用傳統的建立連線的方法,我總是可以用DriverManager.getConnection(資料庫url)獲得連線。

這些程式碼可以放在資料層,同WEB容器毫無關係。

但如果使用資料庫連線池的話,連線池是在WEB伺服器裡配置的,同WEB容器有關,而且符合邏輯的辦法是在WEB服務

器啟動時,透過ServletContextListener建立這個連線池。

不透過引數傳遞的方式(WEB容器/顯示->邏輯層->資料層),如何在資料訪問層引用獲得這個連線池呢?我現在有

兩個辦法:

1 我可以在資料層裡使用如下程式碼:

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
conn = ds.getConnection();
但是,如果每次使用這段程式碼來獲得連線的話,代價同樣很大。

2 在ServletContextListener中建立一個連線池的singleton,資料層裡引用這個singleton.

我想請教一哈,各位還有別的辦法麼?謝謝了。

相關文章