2014-04-10 4 views
5

Wir verwenden deklarative Sprung Transaktionsattribut für die Datenbankintegrität. Einige unserer Code-Aufruf Webservice, die Bündel in Sharepoint tun. Das Problem ist, wenn Webservices länger dauern, bis die Benutzer einen Deadlock vom Frühling bekommen, der das Backend hält.Spring :: Wenn ein Fork ein neuer Thread wird erzwungen in der Transaktion von Spring

Wenn ich einen neuen Thread innerhalb einer Funktion mache, die das deklarative Attribut der Spring-Transaktion hat, wird das vom Frühling ignoriert?

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

Alles andere Optionen, die ich gehen sollte?

Antwort

0

Sie müssen es nicht in einer Transaktion tun. Transaktion bewirkt, dass eine Datenbank ein Objekt ordnungsgemäß speichert. Das ist es. Alle anderen Dinge müssen nach dem Transaktions-Commit erledigt werden. In Java können Sie es mit Spring's Transaktionssynchronisation oder JMS machen. Werfen Sie einen Blick auf die angenommene Antwort over here.

More useful info spezifisch für .NET (siehe 17.8).

+0

Ich mochte die Idee entkoppeln, was nicht in der Transaktion sein sollte –