|
From: <jue...@we...> - 2004-06-20 00:30:26
|
I read that in the Oracle driver manual; that's why I coded the =
releaseSavepoint call with a try/catch block around it :-) Basically, =
Oracle doesn't seem to support eager releasing of a savepoint but just =
auto-release on transaction completion. They could have implemented =
releaseSavepoint as no-op, but rather decided to throw a SQLException...
=20
Juergen
=20
________________________________
Von: spr...@li... im Auftrag =
von Thomas Risberg
Gesendet: Sa 19.06.2004 16:10
An: spr...@li...
Betreff: Re: [Springframework-developer] Nested transactions
Ooops, the 10g driver complains about the releaseSavepoint as well -
must have missed that in the log earlier. Still works though.
Thomas
Thomas Risberg wrote:
> Yes, it does work against a 9i db using both 9i (9.2.0.3) and 10g
> drivers. Nice job coding in the "dark" :-)
>
> 9i driver complains about not supporting "releaseSavepoint"
> (java.sql.SQLException: Unsupported feature), but it still seems to
> work. 10g driver had no problems at all.
>
> PostgreSQL (7.4) failed nicely. No support for savepoints.
>
> MS SQL Server (driver 2.2.0029) errored out with a
> "java.lang.AbstractMethodError". It must only support JDBC 2 --
> supportsSavepoints was added in JDBC 3. I added a try/catch for that
> to provide a nicer error.
>
> Any way you can get this to work in a managed environment with JTA :-)
>
> Thomas
>
>
> j=FCrgen h=F6ller [werk3AT] wrote:
>
>> Thomas, Alef, Colin, everybody,
>>
>> Motivated by Rod, I've added support for nested transactions to our
>> transaction infrastructure, via the new propagation behavior
>> PROPAGATION_NESTED. The transaction manager needs to open a true
>> nested transaction which can be rolled back individually while still
>> being able to continue with the surrounding transaction.
>>
>> Furthermore, application code can also use custom savepoints: The
>> TransactionStatus interface now has a SavepointManager
>> superinterface, which provides generic means to create savepoints and
>> roll back to them. This is only intended for advanced needs where the
>> declarative nested transaction model is not sufficient.
>>
>> DataSourceTransactionManager implements nested transaction support
>> via JDBC 3.0 Savepoints: basically, create a Savepoint on nested
>> transaction begin, release it on nested transaction commit, roll back
>> to it on nested transaction rollback. Of course,
>> DataSourceTransactionManager is still compatible with JDBC 2.0 if not
>> using nested transactions.
>>
>> HibernateTransactionManager and JdoTransactionManager offer support
>> for JDBC 3.0 Savepoints too, but it's deactivated by default there:
>> Savepoints are just able to roll back the underlying JDBC Connection,
>> not the Session respectively PersistenceManager with its object
>> cache. Savepoints are still useful for JDBC access code that
>> participates in a Hibernate/JDO transaction, though, when used with
>> care.
>>
>> All of this is already fully covered by unit tests. Unfortunately, I
>> don't have a database with savepoint support available here, i.e. no
>> Oracle; so I've just been able to test that it fails nicely against
>> MySQL (on JDK 1.4 and 1.3). Thomas, do you have a chance to test this
>> against a live database?
>>
>> An example for how PROPAGATION_NESTED is supposed to work. Note that
>> the nested transaction sets the rollback-only flag: This should just
>> cause a rollback of the second update statement but still allow the
>> surrounding transaction to commit the first update statement.
>>
>> DataSource ds =3D ...;
>> final PlatformTransactionManager tm =3D new
>> DataSourceTransactionManager(ds);
>> final JdbcTemplate jt =3D new JdbcTemplate(ds);
>>
>> TransactionTemplate tt1 =3D new TransactionTemplate(tm);
>> =
tt1.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
>> tt1.execute(new TransactionCallbackWithoutResult() {
>> protected void doInTransactionWithoutResult(TransactionStatus
>> status) {
>> jt.update("first update statement");
>>
>> TransactionTemplate tt1 =3D new TransactionTemplate(tm);
>> =20
>> tt1.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED);
>> tt1.execute(new TransactionCallbackWithoutResult() {
>> protected void doInTransactionWithoutResult(TransactionStatus
>> status) {
>> jt.update("second update statement");
>> status.setRollbackOnly();
>> }
>> });
>> }
>> });
>>
>> An example for the same effect via manual savepoint management:
>>
>> TransactionTemplate tt1 =3D new TransactionTemplate(tm);
>> =
tt1.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
>> tt1.execute(new TransactionCallbackWithoutResult() {
>> protected void doInTransactionWithoutResult(TransactionStatus
>> status) {
>> jt.update("first update statement");
>>
>> Object savepoint =3D status.createSavepoint();
>> jt.update("second update statement");
>> status.rollbackToSavepoint(savepoint);
>>
>> }
>> });
>>
>> Juergen
>>
>>
>>
>> -------------------------------------------------------
>> This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
>> Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
>> Conference, June 28 - July 1 at the Moscone Center in San Francisco, =
CA
>> REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code =
NWMGYKND
>> _______________________________________________
>> Springframework-developer mailing list
>> Spr...@li...
>> =
https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>
>>
>>
>>=20
>>
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
> Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
> Conference, June 28 - July 1 at the Moscone Center in San Francisco, =
CA
> REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code =
NWMGYKND
> _______________________________________________
> Springframework-developer mailing list
> Spr...@li...
> https://lists.sourceforge.net/lists/listinfo/springframework-developer
>
>
>
-------------------------------------------------------
This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA
REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND
_______________________________________________
Springframework-developer mailing list
Spr...@li...
https://lists.sourceforge.net/lists/listinfo/springframework-developer
|