0

私の Web アプリケーションは ActiveJDBC を使用しています。この ORM フレームワークでは、新しいスレッドごとに新しい DB 接続を開く必要があります (もちろん、スレッドが終了したら閉じます)。これを実現する最善の方法は、Web フィルターを使用することではないかと考えています。

この場合、どこに電話すればよいBase.open()ですか? オプションはinit()またはdoFilter()です。また、 を呼び出す予定がある場合Base.close()は、それが正常か異常かにかかわらず、常にスレッドの終了時にdestroy()実際に呼び出されることを知る必要があります。destroy()

EDIT:サーブレットフィルターについて読んだ後、適切な処理は接続を開いたり閉じたりすることだと思いますdoFilter()

public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException { 
  Base.open();
  chain.doFilter(request,wrapper);
  Base.close(); 
} 

これは正しい方法ですか?

4

2 に答える 2

1

はい、これは Web 環境で ActiveJDBC の接続を開いたり閉じたりする正しい方法です。

それに加えて、これは例外を管理する適切な場所です。たとえば、次のようにトランザクションを管理したい場合があります。

try{
  Base.openTransaction(); 
  chain.doFilter(request,wrapper);
  Base.commitTransaction(); 
}catch(Exception e){
  // log exception
  Base.rollbackTransaction();
}finally{
  Base.close();
}

最終的には、サーブレットを扱うのではなく、ActiveWebを試してみませんか? 詳細はこちら: http://javalite.io/database_configuration

于 2016-07-20T16:24:36.883 に答える
0

これは正しい実装ですが、アプリケーションをスケールアップするために、データベース接続プーラーが必要になる場合があります。その場合、db 操作を行った後でも接続を維持したいでしょう。

于 2016-07-20T19:53:16.057 に答える