2014-04-10 1 views
5

데이터베이스 무결성을 위해 선언적 스프링 트랜잭션 속성을 사용하고 있습니다. 일부 코드는 webservice를 호출하여 셰어 포인트에서 여러 가지 작업을 수행합니다. 문제는 웹 서비스가 백엔드를 견디고있는 스프링으로부터 교착 상태에 빠지는 데 오랜 시간이 걸리는 경우입니다.Spring :: Spring에서 트랜잭션으로 새 스레드를 fork 할 경우

스프링 트랜잭션 선언적 특성이있는 함수 안에 새 스레드를 만들면 스프링에서 무시됩니까?

[Transaction(TransactionPropagation.Required, ReadOnly = false)] 
    public void UploadPDFManual(/*parameters*/) 
    { 
     //DO some data base related things 

     if (revisionPDFBytes != null) 
     { 
      //my sharepoint call which calls webservice 
      Task.Factory.StartNew(() => DocumentRepositoryUtil.CreateSharepointDocument(docInfo)); // I draw a new thread from ASPNET worker thread pool. 
     } 
    } 

다른 옵션은 무엇이 있습니까?

답변

0

트랜잭션에서 수행 할 필요가 없습니다. 트랜잭션은 데이터베이스가 객체를 올바르게 저장하도록합니다. 그게 전부 야. 다른 모든 것들은 트랜잭션 커밋 후에 수행되어야합니다. Java에서는 Spring의 트랜잭션 동기화 또는 JMS를 사용하여 만들 수 있습니다. 수락 된 답변 over here을 살펴보십시오.

More useful info .NET 용 (17.8 참조).

+0

나는 트랜잭션에 있어서는 안되는 것을 분리하는 아이디어를 좋아했다. –