02. juli 2003 - 09:20Der er
11 kommentarer og 1 løsning
Håndtering af Exception når ejbStore fejler ved Transaktion slut
Min app. arbejder på en DB der har meget travlt. Nogen gange får man derfor Transktions-TimeOut.
Løber transkationen ud "midt" i koden, er det ikke noget problem at håndtere det. Men hvis den opstår når Container er ved at lave en ejbStore, altså i slutningen af transaktion, så kan jeg ikke fange den ..
Container laver en Rolback, hvilket den også skal gøre. Mit problem er jeg skal underrette brugeren om at der er sket en fejl. Så jeg skal på en eller anden måde fange Exception, og lave den om tli noget brugbart. Som det sker nu, bliver exception sendt tilbage til klinten .i stedet for XML som den forventer
client--------------session bean------------entity bean app eller facade med BMP JSP/servlet med CMT
Umiddelbart ville jeg da tro at metoden i session bean facaden smed en exception når ejbStore smed en EJBException (forudsat naturligvis at session bean og entity bean kører i samme transaction - default i ejb-jar.xml)
Hov det er jo noget vrøvl jeg skriver. Du får jo også exception, men du vil fange den og sende et valid svar tilbage (formentlig med en fejl-besked i).
Jeg tror at de fleste catcher den exception i client app eller JSP/servlet.
Men det er der jo sikkert grunde til at du ikke kan.
Jeg kan umiddelbart komme på 2 ideer, men de er ikke særligt gode, hvis der ligger meget logik i session bean laget.
Og jeg har heller ikke teste dem, så det er brainstorming.
1) Angiv i ejb-jar.xml at entity bean altid skal starte en ny transaktion så burde du kunne catche den exception når entity bean transaktionen afsluttes i.s.f. at du ikke kan catche den når den totale transaktion afsluttes.
Problemet er så at få rullet resten af den totale transaktion tilbage.
2) Lav din session bean med BMT i.s.f. CMT, så bør du få en exception når du kalder ut.commit, den kan du catche og returnere en passende fejl - og alt skule blive rullet passende tilbage.
BMT er bare noget værre fedteri.
Jeg tror ikke på #1 men #2 kan måske løse dit problem.
Ja - har lavet en session med det ene formål at starte transaktionen - de andre "hopper" så bare på den transaktion
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.