我應該在哪裏打開和關閉與存儲庫的連接?在文章「Dont repeat the DAO」記載:DAO和連接
的DAO不負責處理事務,會話或 連接。這些都在DAO之外進行處理以實現靈活性。
但有人建議我將@Resource DataSource
對象注入DAO類並處理DAO方法中的所有連接......即,每個CRUD操作應打開並關閉與存儲庫的連接。
我應該在哪裏打開和關閉與存儲庫的連接?在文章「Dont repeat the DAO」記載:DAO和連接
的DAO不負責處理事務,會話或 連接。這些都在DAO之外進行處理以實現靈活性。
但有人建議我將@Resource DataSource
對象注入DAO類並處理DAO方法中的所有連接......即,每個CRUD操作應打開並關閉與存儲庫的連接。
我個人使用Spring來管理數據源。
在您的應用程序上下文xml中配置數據源bean。將它自動裝入DAO,然後使用Spring處理DAO類中@Transactional
批註的事務。
您的應用程序上下文中還需要<tx:annotation-driven/>
。
如果您使用的是Hibernate,您可以在應用程序上下文中配置SessionFactory
。
對不起,但我不使用也不是春眠不休眠 – MyTitle
DAO不應該負責處理連接,但它取決於他們。 @MyTitle如果你不使用Spring或Hibernate,那麼你必須在業務邏輯層處理這些連接以處理事務。從數據源獲取一個連接後,業務層組件會將其傳遞到您的DAO中。實際上Spring已經提供了一些方便的XXXDAOSupport類,它對於datasouce非常有效。 –
@GavinXiong謝謝,在您發表評論後,我更清楚地瞭解這一過程。第二個問題(可能不太明確):使用EJB作爲DAO對象怎麼樣?然後在另一個EJB(即服務層)中重用這個DAO(實際上是EJB)。 – MyTitle
採取文章的建議。
最好你希望你的應用程序容器管理資源和連接池。如果您的連接已配置事務管理,那麼容器將能夠管理您的事務(因此不需要打開連接並進行提交)。
如果您要自己管理連接和事務,請首先打開連接,啓用事務並將打開的連接傳遞給DAO,提交事務,然後關閉連接(在DAO之外)。
一旦你的服務完成所有的DAO,關閉連接。
希望這會有所幫助。
是的,我自己管理交易,連接。首先打開連接,啓用事務並將打開的連接傳遞給DAO。 - 我可以在服務層做這件事嗎?或者我需要創建一些包裝類來隱藏所有底層機制(打開連接,事務)並在服務層中使用這個包裝類?另外,我使用Java EE5,那麼我可以使用EJB的DAO嗎? – MyTitle
要回答你所有問題**:是的! –
我們不管理DAO內部的連接,因爲您可以有多個DAO使用同一個打開的連接來獲取實體。 –