2009-07-13 5 views
3

Tomcat 6에서 실행되는 웹 응용 프로그램이 있는데 내장 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> 

그리고 이것은 데이터베이스 연결을 얻기 위해 사용되는 자바 방법입니다.

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()에서 연결을 얻은 데하지만 그것으로 잘못 느낌 중 하나를 자바에 격리 수준을 하드 코딩, 또는에 대한 룩업을 수행하는 것을 포함 새로운 연결이 필요할 때마다 서블릿 컨텍스트.

XML 컨텍스트에서 이것을 어떻게 든 정의 할 수 있습니까, 아니면 잘 모르는 접근법이 있습니까?

답변

10

예, Resource 요소의 defaultTransactionIsolation 특성으로 설정할 수 있습니다. 워드 프로세서

<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..." 
     /> 

이 풀 생성 연결

defaultTransactionIsolation ¨

TransactionIsolation 상태. 다음 중 하나 : (javadoc의 참조)

  • NONE
  • READ_COMMITTED 내가 스냅 숏 격리 수준을 찾고 있었다
0

  • SERIALIZABLE
  • READ_UNCOMMITTED
  • REPEATABLE_READ. 데이터베이스 서버가 올바르게보고 된 설정은

    defaultTransactionIsolation="4096"

    당신은 누군가를하는 데 도움이 transaction_isolation_level = 5. 희망을보고해야 바로 sys.dm_exec_sessions에 쿼리에 의해 확인 할 수 있었다.