2016-07-20 5 views
0

私のWebアプリケーションはActiveJDBCを使用しています。このORMフレームワークでは、新しいスレッドごとに新しいDB接続を開く必要があります(もちろん、スレッドが終了すると閉じます)。私はこれを達成するための最良の方法がWeb Filterを使用するのかどうか疑問に思っています。Tomcat + ActiveJDBC:サーブレットフィルタを使用したオープン/クローズ接続ですか?

この場合、Base.open()とはどこですか?オプションはinit()またはdoFilter()です。また、私がを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(); 
} 

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

答えて

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

0

これは正しく実装されていますが、アプリケーションの規模を拡大するには、データベース接続プールが必要な場合があります。その場合、db操作を行った後でも接続を有効にしておきたい場合があります。

+0

私は接続プールを使用しないと思いますか?接続プールでもconn.close()を実行してプールに戻します。 –

関連する問題