Some folk at JBoss (now part of Red Hat) are complaining to me that
there's no way to deal with failing statements within a transaction
in the context of CMT (Container Managed Transactions). The normal
advice would be to do SAVEPOINT and RELEASE around each statement,
but they say this is disallowed:
> It's really a question of granularity. When using CMT a global
> transaction is not committed until the end of method completion.
> Prior to the JDBC connection being used, autocommit is set to false
> and the global transaction is officially started. When the global
> transaction completes, the transaction is committed as a whole. JDBC
> Rollback and commit within a managed transaction is prohibited as
> this is the responsibility of the container. So, setting a savepoint
> and rolling back (and subsequently committing) won't work in this
> context which is what the Postgres driver requires.
Can anyone see a solution for this in the context of the existing driver
facilities? If not, is it reasonable to ask for a driver option to do
auto-savepointing? There is already an equivalent facility in psql, so
the idea doesn't seem unreasonable to me.
regards, tom lane