Wo sollte "@Transactional" Service Layer oder DAO platziert werden?
Erstens ist es möglich, dass ich Frage, etwas, was gefragt und beantwortet vor, aber ich konnte nicht bekommen ein suchergebnis zurück . Okay, in der Regel (oder immer so weit:) ) Wir definieren transactional-Annotationen auf service-Ebene typische spring hibernate crud ist in der Regel
- Controller->Manager->Dao->Orm .
Ich habe jetzt eine situation, wo ich wählen müssen zwischen dem domain-Modell basiert auf der client-Seite .
Sagen client Eine ist mit meinem domain-Modell ist alles gut, aber dann ein andere client-Seite würde mir ein web-service und nicht mit unserem domain Modell .
Welche Schicht sollte ich ersetzen . Ich glaube, es hat zu Dao, die werden mir immer die Daten vom web service und senden Sie es zurück.ich.e zwei getrennt geschrieben Dao Schichten und eingesteckt, basierend auf Szenario .
Ich habe jetzt erkannt, dass wir getan haben, enge Kopplung (falls es so eine Sache, oder sagen Sie nicht, dass die lose Kopplung) wenn wir @Transactional-in-Service-layer . So viele Gehirne können nicht falsch sein, oder sind Sie (ich bezweifle es).
Also Frage ist: "Wo sollte "@Transactional" Ort-Service-Layer oder DAO ?" und ist it-service-Schicht nach unten, ich sollte ausgetauscht werden .
InformationsquelleAutor der Frage Shahzeb | 2010-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Idealerweise Service-Ebene(Manager) stellt Ihre business-Logik, und daher ist es annotiert mit @Transactional.
Service-Ebene aufrufen kann verschiedene DAO-durchführen von DB-Operationen. Nehmen wir an eine Situationen, in denen Sie 3 DAO-Operationen in einem service-Methode. Wenn Ihr 1. DAO-Vorgang ist fehlgeschlagen, die beiden anderen eventuell noch übergeben und Sie werden am Ende inkonsistenten DB-Zustand. Anmerkungen Service-layer speichern können, die Sie aus solchen Situationen.
InformationsquelleAutor der Antwort Badal
Sind Sie gehen zu wollen Ihre Dienste transaktional sein. Wenn Ihr DAOs sind Transaktions-und Sie nennen verschiedene DAOs in jedem Dienst, dann müsste man mehrere txs, das ist nicht, was Sie wollen. Stellen Sie die service-Aufrufe transaktionaler und alle DAO-Aufrufe innerhalb dieser Methoden wird an der tx für die Methode.
InformationsquelleAutor der Antwort hvgotcodes
werde ich vorschlagen, setzen @Transactional-in-Service-layer-Methoden können, da wir mehrere DAO-Implementierungen. durch die Nutzung dieser können wir unsere Dienste transaktional sein. beziehen
best practice ist die Verwendung Einer generischen BasicService anbieten gemeinsamer services.
Der Service ist der beste Ort für die Umsetzung @Transaktions -, service-layer sollte halten Sie die detail-level use case-Verhalten für eine Benutzer-Interaktion, die logischerweise auch gehen in einer Transaktion. auf diese Weise können wir halten die Trennung zwischen web-Anwendungs-code und business-Logik.
Gibt es eine Menge von CRUD-Anwendungen, die nicht über wesentliche geschäftliche Logik, für Sie mit einem service layer, der passt einfach Sachen durch, die zwischen dem Controller und data-access-Objekte nicht sinnvoll. In diesen Fällen können wir die Transaktion annotation auf Dao.
So, in der Praxis können Sie setzen Sie Sie in Platz, es ist bis zu Ihnen.
Durch mehrere Anrufe in Ihrem service, den Sie benötigen, @Transactional-in-service. verschiedene Anrufe zu service ausgeführt wird, in anderen Geschäften, wenn man @Transactional-in-service.
InformationsquelleAutor der Antwort kapil das
Es ist eine persönliche Entscheidung, basierend auf Arten von Anwendungen wenn die Anwendung ist layerd über viele Module und die Mehrheit der Betriebe sind @CRUD-basierte ,dann mit @transactional annotation auf service-Ebene macht mehr Sinn.. Motor Typ Anwendung wie Planer , job, Server,@etl-Bericht-apps, bei denen Sitzungen und Benutzer-Konzept nicht vorhanden ist, dann propagational Transaktion bei Kontext-Ebene ist am besten geeignet... sollten wir nicht am Ende die Schaffung clusterd Transaktionen, indem Sie @transactional jeder, wo das enden Transaktions-anti prasselt...anyways, pragmatische transaction control JTA2 ist die geeignete Antwort...und wieder hängt es von Wetter können Sie es in einer bestimmten Situationen...
InformationsquelleAutor der Antwort David Hamas
Sollten Sie mit @Transactional auf service-Ebene, wenn Sie möchten, ändern Sie die domain-Modell für client B, wo Sie haben, um die gleichen Daten in ein anderes Modell,können Sie die Domäne ändern-Modell ohne Auswirkungen auf die DAO-Schicht, indem Sie einen anderen Dienst oder durch die Schaffung einer Schnittstelle und der Implementierung der Schnittstelle in verschiedenen Modell-und mit dem gleichen service füllen Sie das Modell basiert auf dem client.Diese Entscheidung basiert auf der business-Anforderungen und dem Umfang des Projekts.
InformationsquelleAutor der Antwort Sonia Jain