2009-07-13 34 views
3

Tomcat 6で動作するWebアプリケーションがあり、組み込みのDBCP接続プーリングを使用するように設定していますが、すべて正常に動作していますが、間違った分離レベルで動作している可能性があります。データベース。私はそれをコミットされていない読み取りで実行したいが、私はそれがコミットされた読み取りで実行されていると思うし、それを設定する方法を知らない。ここでTomcatコンテキストからJDBC分離レベルを設定できますか?

は私のコンテキストのXMLファイルです:

<?xml version="1.0" encoding="UTF-8"?> 
    <Context antiResourceLocking="false" privileged="true"> 
     <Resource 
      name="jdbc/Connection" 
      auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      driverClassName="net.sourceforge.jtds.jdbc.Driver" 
      url="jdbc:jtds:sqlserver://...etc..." 
     /> 
    </Context> 

そして、これは、データベース接続を取得するために使用されるJavaメソッドです。

public Connection getDatabaseConnection() throws ServletException { 
    try { 
     InitialContext cxt = new InitialContext(); 
     if (cxt == null) { 
      throw new ServletException("ServletContext unavailable."); 
     } 

     DataSource ds = (DataSource)cxt.lookup("java:/comp/env/jdbc/Connection"); 
     if (ds == null) { 
      throw new ServletException("Data source not found!"); 
     } 

     Connection conn = ds.getConnection(); 
     return conn; 
    } etc... 

は私が手動でconn.setIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED)で分離レベルを設定することができます実現getDatabaseConnection()で接続を得たが、それはそれとして間違って感じているいずれかのJavaへの分離レベルをハードコーディング、またはそれにルックアップを実行する必要新しい接続が必要となるたびにサーブレット・コンテキストを更新します。

これをコンテキストXMLで何らかの形で定義することはできますか、それとも私が気づいていないより良いアプローチがありますか?

答えて

10

はい、Resource要素のdefaultTransactionIsolation属性で設定できます。このプールで作成された 接続の

defaultTransactionIsolation¨

TransactionIsolation状態:ドキュメントから

<Context antiResourceLocking="false" privileged="true"> 
     <Resource 
      defaultTransactionIsolation="READ_UNCOMMITTED" 
      name="jdbc/Connection" 
      auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      driverClassName="net.sourceforge.jtds.jdbc.Driver" 
      url="jdbc:jtds:sqlserver://...etc..." 
     /> 

。以下のいずれかの :(Javadocを参照)

  • NONE
  • READ_COMMITTED私はスナップショット分離レベルを探していました
0

  • SERIALIZABLE
  • READ_UNCOMMITTED
  • REPEATABLE_READ。データベース・サーバによって正しく報告された設定は、あなたはそれが誰かを助け= 5.希望transaction_isolation_levelを報告する必要がありsys.dm_exec_sessionsにクエリによって確認することができる

    defaultTransactionIsolation="4096"

    ました。

  • 関連する問題