Avatar billede datajesper Nybegynder
02. juli 2003 - 09:20 Der 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 ..

Nogen der ved hvordan jeg fanger Exceptionen ?
Avatar billede arne_v Ekspert
02. juli 2003 - 09:59 #1
Du har en BMP entity bean og du får en transaction timeout
i ejbStore ?

Er det ikke bare at throwe en EJBException for at få containeren til
at lave en rollback ?
Avatar billede datajesper Nybegynder
02. juli 2003 - 11:48 #2
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
Avatar billede datajesper Nybegynder
02. juli 2003 - 11:48 #3
Og ja - jeg har BMP :-)
Avatar billede arne_v Ekspert
02. juli 2003 - 12:45 #4
Men får du ikke en fejl på client så ?

Jeg formoder at setup er noget a la:

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)
Avatar billede arne_v Ekspert
02. juli 2003 - 12:46 #5
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).

Sorry.

Jeg tænder lige for hjernen.
Avatar billede arne_v Ekspert
02. juli 2003 - 14:05 #6
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.
Avatar billede datajesper Nybegynder
02. juli 2003 - 20:06 #7
Det kan godt være det bliver løsning 2 .. Man kan måske Designe en meget simple SessionBean med noget BMT ...
Avatar billede arne_v Ekspert
02. juli 2003 - 20:39 #8
Det er ikke så svært.

UserTransaction utx = sessionContext.getUserTransaction();
utx.begin();
// do stuff
utx.commit();

man skal catche et hav af mærkelige exceptions, men det er jo lige det du vil.

Og så:

<transaction-type>Bean</transaction-type>

i ejb-jar.xml !
Avatar billede datajesper Nybegynder
06. juli 2003 - 14:54 #9
God ide ..
Avatar billede arne_v Ekspert
10. juli 2003 - 08:35 #10
Kommet videre ?
Avatar billede arne_v Ekspert
10. juli 2003 - 08:35 #11
Og et svar, hvis det kunne bruges.
Avatar billede datajesper Nybegynder
11. juli 2003 - 16:58 #12
Ja - har lavet en session med det ene formål at starte transaktionen - de andre "hopper" så bare på den transaktion
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester