You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by "Geigl Maximilian, R235" <Ge...@akdb.de> on 2003/03/25 15:41:43 UTC

[MAPPING] Problem committing inertst on LONG fields

Hallo,

OJB version: 1.0rc1
DBMS: Oracle 8.1.7.4.1
JDBC driver: Oracle thin driver 8.1.7.4.0 (taken from the 8.1.7.4.1 Patch) - by the way: same problem with 8.1.7.0.0 an 8.1.7.1.0

I have two inserts each on a table with a LONG field. When I commit the transaction i get the following exception:

2003-03-25 08:39:37,975 [HttpProcessor[80][3]] ERROR org.apache.ojb.odmg.ObjectEnvelopeTable PC-10-SONNAUJ.AKDB.NET - Commit on object level failed for tx org.apache.ojb.odmg.TransactionImpl@72fe25
java.sql.SQLException: Vorgang nicht zulässig: streams type cannot be used in batching
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
	at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:2781)
	at java.lang.reflect.Method.invoke(Native Method)
	at org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.doExecute(Unknown Source)
	at org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.invoke(Unknown Source)
	at $Proxy0.doExecute(Unknown Source)
	at org.apache.ojb.broker.util.batch.BatchConnection.executeBatch(Unknown Source)
	at org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.executeBatch(Unknown Source)
	at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
	at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
	at org.apache.ojb.odmg.TransactionImpl.prepare(Unknown Source)
	at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
	at de.akdb.ok.komm.persistence.OdmgTransactionImpl.commit(OdmgTransactionImpl.java:71)
	at de.akdb.ok.komm.service.AbstractService.destroy(AbstractService.java:76)
[...]

Although I set batch-mode="false" in the repository, OJB seems to override this setting an uses batching. As far as i understand, the Oracle JDBC driver cannot use batching with LONG field.

So my question: can anyone tell me, how i can carry out more than one insert/update/delete on tables with LONG fields in one transaction? Or how can i prevent OJB from using batching (as batch-mode="false" doesn't seem to enforce this)?
Or did i get the whole thing completely wrong?

Thanks in advance

Max


Re: [MAPPING] Problem committing inertst on LONG fields

Posted by Armin Waibel <ar...@code-au-lait.de>.
Hi Max,

there is a workaround for this problem.
Checkout last version of ConnectionManagerImpl.

Then it should be possible to disable batch-mode
with batch-mode="false"

regards,
Armin

----- Original Message -----
From: "Geigl Maximilian, R235" <Ge...@akdb.de>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Tuesday, March 25, 2003 3:41 PM
Subject: [MAPPING] Problem committing inertst on LONG fields


Hallo,

OJB version: 1.0rc1
DBMS: Oracle 8.1.7.4.1
JDBC driver: Oracle thin driver 8.1.7.4.0 (taken from the 8.1.7.4.1
Patch) - by the way: same problem with 8.1.7.0.0 an 8.1.7.1.0

I have two inserts each on a table with a LONG field. When I commit the
transaction i get the following exception:

2003-03-25 08:39:37,975 [HttpProcessor[80][3]] ERROR
org.apache.ojb.odmg.ObjectEnvelopeTable PC-10-SONNAUJ.AKDB.NET - Commit
on object level failed for tx org.apache.ojb.odmg.TransactionImpl@72fe25
java.sql.SQLException: Vorgang nicht zulässig: streams type cannot be
used in batching
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at
oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatem
ent.java:2781)
at java.lang.reflect.Method.invoke(Native Method)
at
org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.doEx
ecute(Unknown Source)
at
org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.invo
ke(Unknown Source)
at $Proxy0.doExecute(Unknown Source)
at org.apache.ojb.broker.util.batch.BatchConnection.executeBatch(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.executeBatch(Unk
nown Source)
at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
at org.apache.ojb.odmg.TransactionImpl.prepare(Unknown Source)
at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
at
de.akdb.ok.komm.persistence.OdmgTransactionImpl.commit(OdmgTransactionIm
pl.java:71)
at
de.akdb.ok.komm.service.AbstractService.destroy(AbstractService.java:76)
[...]

Although I set batch-mode="false" in the repository, OJB seems to
override this setting an uses batching. As far as i understand, the
Oracle JDBC driver cannot use batching with LONG field.

So my question: can anyone tell me, how i can carry out more than one
insert/update/delete on tables with LONG fields in one transaction? Or
how can i prevent OJB from using batching (as batch-mode="false" doesn't
seem to enforce this)?
Or did i get the whole thing completely wrong?

Thanks in advance

Max