Subject Re: [Firebird-Java] DataExpress problem
Author Mark Rotteveel
On 14-10-2016 17:07, hugo.larson@... [Firebird-Java] wrote:
> We are still using the old JBuilder DataExpress library and have
> encountered new exceptions.
> Platform is Java 1.7.0_55 and JayBird 2.2.6

Is there a reason why you're still using Jaybird 2.2.6 instead of
2.2.11? To be clear, I'm not saying upgrading will fix your problem; I'm
just curious if something is preventing you from upgrading.

> I have built classes for connection pooling where i set the
> JDBConnection in the JBuilder DataBase object and also setting DataBase
> object i QueryResolver.
>
> Sporadically these exceptions are thrown:
>
> Any clue what is causing this?

Unfortunately I don't know the DataExpress library, but it would be
helpful to have the full stacktraces. The stacktraces you posted don't
include the exception cause, although that could also indicate that
DataExpress is pre-Java-1.4.

As you haven't included any details (eg code, how you create
connections, etc), it is very hard to come up with a scenario that could
explain the problem (or identify if Jaybird does something wrong).

However if you are using any of the data sources from
org.firebirdsql.pool or org.firebirdsql.jca, then I urge you to stop
using those. See also
http://www.firebirdsql.org/file/documentation/drivers_documentation/java/2.2.11/release_notes.html#important-changes-to-datasources

> What is best transaction isolation is best to use with JayBird?

Transaction isolation is dictated by your needs, not by how well Jaybird
functions with them (which should be equally well for all). The default
is read committed (which maps to
isc_tpb_read_committed,isc_tpb_rec_version,isc_tpb_write,isc_tpb_wait).
Your errors - as far as I can tell - have nothing to do with the
transaction isolation.

> Further i don't use any transactions when committing QueryDataSet changes.

What do you mean with that?

>
>
> See com.borland.dx.dataset.DataSetException error code: BASE+66
> com.borland.dx.dataset.DataSetException: Resource Exception. A
> transaction with the same XID has already been started, error code: HY000
> Reason: A transaction with the same XID has already been started
> at com.borland.dx.sql.dataset.Database. (Unknown Source)
> at com.borland.dx.sql.dataset.j.prepare(Unknown Source)
> at com.borland.dx.sql.dataset.t.a(Unknown Source)
> at com.borland.dx.sql.dataset.l.b(Unknown Source)
> at com.borland.dx.sql.dataset.QueryResolver.insertRow(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.c(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.d(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager. (Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.saveChanges(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.saveChanges(Unknown Source)
> at com.borland.dx.sql.dataset.Database.saveChanges(Database.class)

This error can happen if a local transaction is in progress for a
connection, and another is started, or if a distributed transaction
manager tries to enlist a connection in a distributed transaction while
it is already participating in that transaction.

> com.borland.dx.dataset.DataSetException: Calling commit() in auto-commit
> mode is not allowed.
> at com.borland.dx.sql.dataset.Database.commit(Unknown Source)
> at com.borland.dx.sql.dataset.SQLResolutionManager.commit(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.saveChanges(Unknown Source)
> at com.borland.dx.sql.dataset.ResolutionManager.saveChanges(Unknown Source)
> at com.borland.dx.sql.dataset.Database.saveChanges(Database.class)
> at com.borland.dx.sql.dataset.QueryDataSet.saveChanges(QueryDataSet.class)
> at advit.web.dxweb.MyQueryDataSet.saveChanges(MyQueryDataSet.java:213)
> at com.borland.dx.dataset.DataSet.saveChanges(Unknown Source)

This can happen if commit is called on the connection while the
connection is in auto commit mode.

Mark
--
Mark Rotteveel