15. marts 2003 - 21:51Der 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
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
Grunden til at inuse ikke er smart er: * 2 database transaktioner per logisk transaktion * komplikationer fordi flaget ikke nødvendigvis bliver clearet
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
Det er reelt det samme som Version Number Pattern. Du vil bare skulle sammenligne alle felter i.s.f. kun et felt.
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.