Avatar billede dat01x02 Nybegynder
15. marts 2003 - 21:51 Der er 9 kommentarer og
1 løsning

Transaktioner i EJB

Jeg skal lave et ordre system i EJB.
Men hvordan styre man at to klienter læser noget i en tabel, får det vist på skærmen og vil senere rette i ordren. Den ene opdaterer først, men når den anden vil opdatere så ved den vel ikke at databasen er blevet ændret.
Normalt ville jeg i et Client / server system styre dette med et Observer pattern, og så notify de andre klienter når der skete en ændring.
Men hvordan laver man det i EJB?
Jeg er klar over at EJB containeren styre transaktioner, men hvad med overstående problem?
/ Michael
Avatar billede r9 Nybegynder
15. marts 2003 - 22:18 #1
Du kan også lave et Observer pattern i et J2EE miljø
Avatar billede dat01x02 Nybegynder
15. marts 2003 - 22:23 #2
okay, er det den måde man normalt ville løse problemet på, eller er der nogle specielle EJB måder at gøre det på?
/Michael
Avatar billede arne_v Ekspert
16. marts 2003 - 15:18 #3
Det har sådan set ikke noget med transaktioner i EJB at gøre.

Transaktioner sikrer at enten så bliver alle ændringer gennemført
eller så bliver ingen ændringer gennemført for en interaktion.

To transaktioner vel heller ikke kunne påvirke hinanden.

Men hvis vi forudsætter at det er en klassisk:
  browser---JSP/servlet---session EJB---entity EJB----database
løsning, så er der nogle problemer:

1)  transaktionen starter ikke når du henter data men først når
    opdateringen ryger ind til session EJB d.v.s. to brugere
    kan godt opdatere samme data
2)  HTTP er en pull-only protokol man kan ikke push'e noget
    og derfor kan man ikke lave et observer pattern mellem
    browser og EJB
Avatar billede arne_v Ekspert
16. marts 2003 - 15:26 #4
En primitiv måde at løse det på er at have et "inuse" felt
i tabellen og test+set i "hent data" og clear i "opdater data".

Den normalt anbefaleede måde ta løse problemet på er med et
"Version Number Pattern".
Avatar billede arne_v Ekspert
16. marts 2003 - 15:27 #5
Jævnfør f.eks. "EJB Design Patterns" af Floyd Marinescu.
Avatar billede dat01x02 Nybegynder
16. marts 2003 - 17:53 #6
okay, prøver at kigge lidt nærmere på "Version Number Pattern".
/ Michael
Avatar billede arne_v Ekspert
16. marts 2003 - 17:57 #7
Grunden til at inuse ikke er smart er:
  * 2 database transaktioner per logisk transaktion
  * komplikationer fordi flaget ikke nødvendigvis bliver clearet
Avatar billede dat01x02 Nybegynder
16. marts 2003 - 18:03 #9
Jeg havde overvejet noget med at sammenligne det ValueObject, som jeg sender til klienten når han søger på en ordre, med det der vil ligge i databasen når han beslutter sig for at opdatere. Hvis det klienten så sender med tilbage til serveren ikke er det samme som i databasen, har der jo været en ændring imellemtiden.
/ Michael
Avatar billede arne_v Ekspert
16. marts 2003 - 19:19 #10
Det er reelt det samme som Version Number Pattern. Du vil bare skulle
sammenligne alle felter i.s.f. kun et felt.
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