2014-04-10 11 views
5

Używamy deklaratywnego atrybutu wiosny dla integralności bazy danych. Niektóre z naszych usług sieciowych wywoływania kodu, które robią pakiety z sharepoint. Problem polega na tym, że gdy serwisy internetowe potrzebują dłuższego czasu, użytkownicy otrzymują impas ze źródła, który zatrzymuje backend.Wiosna :: Jeśli widelec nowy wątek zostanie wymuszony w transakcji wiosną

Jeśli utworzę nowy wątek w funkcji, która ma funkcję deklaracji wiosennej, zostanie ona zignorowana ze sprężyny?

[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. 
     } 
    } 

Cokolwiek inne opcje powinienem wybrać?

Odpowiedz

0

Nie musisz robić tego w transakcji. Transakcja powoduje, że baza danych odpowiednio zapisuje obiekt. to jest to! Wszystkie inne rzeczy muszą zostać wykonane po zatwierdzeniu transakcji. W Javie możesz to zrobić za pomocą synchronizacji transakcji Spring lub JMS. Spójrz na zaakceptowaną odpowiedź over here.

specyficzne dla .NET (patrz 17.8).

+0

Podobał mi się pomysł uniezależnienia tego, co nie powinno być w transakcji –

Powiązane problemy