28. juni 2002 - 13:04Der er
15 kommentarer og 1 løsning
Transaction
Jeg skal indarbejde noget transaction styring i mit program. Men jeg er ikke lige helt klar over hvad, hvordan og hvorledes!?
I mit program har jeg en abstract table klasse der varetager alle database relaterede funktioner (insert, update, delete...). Det er også her der laves connection til databasen for hver gang en database funktion udføres. For hver tabel i min database har jeg en klasse, som arver fra min abstract table klasse, til at administrere de enkelte tabeller.
Det jeg skal have indarbejdet i forbindelse med udførelse af en insert-sætning er at inserte i 2 forskellige tabeller. Denne udførelse skulle meget gerne være indkapslet i en transaction!? - alt eller intet princip! Hvordan skal jeg gøre dette?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg har ikke min connection i min administrations klasse! I min abstract table klsse laver jeg connection til DB'en hver gang jeg udfører en database funktion(insert, update...).
du siger du har metoder til håndtering af insert, delete osv i din abstract klasse. det er inde i disse metoder du skal slå autoCommit fra, og sende en commit efter du har sendt dine queries.
En transactionManager kan sikkert også bruges, jeg gjorde ovenstående.
Du kan bruge en TransactionManager, men har du en til rådighed? Det har du sandsynligvis kun, hvis du bruger en fuld applikationsserver.
Jeg vil i stedet foreslå følgende løsning:
Din abstrakte klasse har garanteret en getConnection-metode.
Du har garanteret også en metode:
public void insert(blabla) { Connection con = getConnection(); // blabla indsæt ny række con.close(); }
lav en ny metode
public void insert(blabla, Connection con) { // blabla indsæt ny række }
og lav den gamle metode om til
public void insert(blabla) { Connection con = getConnection(); insert(blabla, con); con.close(); }
I den normale situation hvor du kun gemmer en tabel, bruger du bare den gamle metode. I den nye situation hvor du gemmer i to tabeller laver du i stedet noget i retningen af
soelvpil> Jeg tror du har fat i den "lange ende". Det er lige det jeg har brug for!! Jeg prøver det lige. (Hvorfor har jeg dog ikke tænkt på det...:-) ) I øvrigt bruger jeg IBM WebSphere Application Server...TransactionManageren kunne være en idé, men hvilken måde giver den beste performance?
disky> soelvpil gav mig "SVARET" og det virker!!! Er det ikke meningen at pointene gives til den man synes har svaret bedst på ens spørgsmål? Men du skal på trods have tak for dine indslag!
Mit eksemple kunne sagtens bruges, hvis tien roder med abstracte klasser som han siger der er funktionalitet i, kunen mit eksempel sagtens bruges.
jeg mente at ud fra han rodede med dem, kunne han ev.t også tænke lidt selv.
tien: Ud fra det du selv siger er det eneste soelvpil, kommer med er: Connection con = DBHandler.getConnection(); con.setAutoCommit(false); DBHandler.insert(blabla1, con); DBHandler.insert(blabla2, con); con.commit(); con.close();
som sjovt nok er temmeligt mangen til min posting #2
Man giver normalt point til det/de svar som hjælper en
Tien, hvis det var det du ledte efter hvorfor spurgte du som om hvordan du sikrede transactioner ? :-)
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.