Archief - [PROG][JAVA] Spring transactions

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

NaaiT

Legacy Member
Hey,

ik ben net begonnen met het experimenteren met het vrij populaire Spring-framework. Deze gebruik ik in combinatie met Hibernate.

Nu ben ik wat dingen aan het testen, oa het gebruik van transacties. Ik ben er in geslaagd om verschillende db-calls in eenzelfde transactie te zetten via Spring, en deze dus afhankelijk van elkaar te maken.

Nu vroeg ik mij af of het ook mogelijk was om, tijdens een rollback, op een makkelijke manier ook alle programma-objecten te rollback'en (dus niet alleen de updates in de database).

voorbeeld van wat ik bedoel:

Code:
	public void tryUpdateKnightId(Knight knight) {
		getHibernateTemplate().save(knight);
		knight.setId(new Long(123));
		getHibernateTemplate().update(knight);
	}

In dit geval loopt het mis bij de update(knight). Dit zorgt voor een rollback, die eveneens de save(knight) zal teniet doen. Als ik daarna mn knight.id afprint, is deze natuurlijk nog altijd '123', ipv de correcte ID.

enige suggesties?

thx

Sven

agent #2

Legacy Member
Ik denk dat ge dat beter opsplitst in 2 methodes (update en save). Ook is het beter om je object knight buiten je DAO te setten.

lazylegz

Legacy Member
Je kan als je de Spring HibernateTemplate gebruikt , best gebruik maken van de saveOrUpdate() method. Als je voor hibernate dan een id en version meegeeft dan controleert hibernate of het geupdate of gesaved moet worden.
Maar dat was natuurlijk niet de vraag.
Je kan in de Spring verscheidene TransactionManagers gebruiken. Deze kan je gewoon in je ApplicationContext registreren.

Een voorbeeldje hieronder van die van JTA

<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager"/>

het enige wat je dan nog in je code moet zetten is

Transaction trx = transactionManager.getTransaction();
trx.start();
code
code
code
trx.end();
en in je finally block je
if ( trx.isActive() ) {
trx.cancel();
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan