リポジトリへの接続をどこで開閉する必要がありますか?記事「DAOを繰り返さないでください」に書かれている:
DAOは、トランザクション、セッション、または接続の処理について責任を負いません。これらは、柔軟性を実現するためにDAOの外部で処理されます。
しかし、@Resource DataSource
DAOクラスにオブジェクトを挿入し、DAOメソッド内のすべての接続を処理するように提案する人もいます。つまり、すべてのCRUD操作でリポジトリへの接続を開いたり閉じたりする必要があります。
リポジトリへの接続をどこで開閉する必要がありますか?記事「DAOを繰り返さないでください」に書かれている:
DAOは、トランザクション、セッション、または接続の処理について責任を負いません。これらは、柔軟性を実現するためにDAOの外部で処理されます。
しかし、@Resource DataSource
DAOクラスにオブジェクトを挿入し、DAOメソッド内のすべての接続を処理するように提案する人もいます。つまり、すべてのCRUD操作でリポジトリへの接続を開いたり閉じたりする必要があります。
記事からの推奨事項を取ります。
できれば、アプリケーション コンテナーでリソースと接続プーリングを管理する必要があります。接続にトランザクション管理が構成されている場合、コンテナーはトランザクションを管理できます (したがって、接続を開いてコミットする必要はありません)。
接続とトランザクションを自分で管理している場合は、最初に接続を開き、トランザクションを有効にして、開いている接続を DAO に渡し、トランザクションをコミットしてから、(DAO の外部で) 接続を閉じます。
サービスがすべての DAO で終了したら、接続を閉じます。
お役に立てれば。
個人的にSpringを使ってデータソースを管理しています。
アプリケーション コンテキスト xml でデータ ソース Bean を構成します。それを DAO に Autowire し、Spring を使用@Transactional
して DAO クラスのアノテーションでトランザクションを処理します。
<tx:annotation-driven/>
アプリケーションのコンテキストでも必要です。
Hibernate を使用している場合はSessionFactory
、アプリケーション コンテキストで を構成することで同じことができます。
トランザクションの管理にSpringを使用できることに同意しますが、同時に、トランザクションの管理はDAOの義務ではないことに注意してください。それらは、ビジネス ロジックの管理を担当するサービス層で処理する必要があります。