2016-11-03 1 views
1

서버가 ejb 구성 요소의 서블릿 호출 메소드에서 서블릿으로 http 요청을받습니다.다른 스레드에서 호출 할 때 쿼리 시간 초과

public void ejbMethodVariant1(...) { 
    //calling stored proc 
    ... 
    //calling same stored proc 
} 

public void ejbMethodVariant2(...) { 
    //calling stored proc 
    ... 
    Thread t = new Thread(() -> { 
      //calling same stored proc 
     }); 
    t.start(); 
    try { 
     t.join(); 
    } catch (InterruptedException e){ 
     ... 
    } 
} 

저장된 프로 시저는 항상 동일합니다. "저장된 프로 시저를 호출" 의미 : 데이터 소스

  • 에서

    1. 얻기 연결이 변형 1에서 호출 문
    2. 닫기 문
    3. 닫기 연결

    실행 호출 문

  • 만들기 - 모든 것이 오류없이 완벽하게 작동합니다. 첫 번째 및 두 번째 호출의 연결에는 autoCommit = false가 있습니다.

    변형 2 - 첫 번째 호출이 성공적으로 완료되고 2 분 후에 두 번째로 시간이 초과됩니다 (com.microsoft.sqlserver.jdbc.SQLServerException : 쿼리가 시간 초과되었습니다.). 첫 번째 호출의 연결은 autoCommit = false이고 두 번째 호출의 경우 autoCommit = true입니다.

  • +1

    JEE 사양에 따르면 스레드 생성 및 관리는 ejb에서 허용되지 않습니다. [이 답변] (http://stackoverflow.com/questions/3816286/multithreading-in-a-stateless-session-bean#3816621) 또는 [this] (http://www.oracle.com/technetwork/java)를 참조하십시오. /restrictions-142267.html#threads) –

    답변

    2

    트랜잭션 컨텍스트, 보안 컨텍스트 등이 복사되지 않은 새 스레드가 시작됩니다. 새 스레드를 사용하여 문을 실행하려면 Java EE 7의 유틸리티를 사용하십시오.

    관련 문제