My questions are: 1) Which way should I use? start transaction first or set batch mode to "true" first?
Both possibilities of declaration should work. I add a test to reproduce your examples. With current CVS this test was passed.
2) How do I know it really does batch delete?
hmm, with p6spy in 'normal' mode you see all delete statements. In batch-mode you don't see any delete statements for the deleted objects. To really see what's going on you should use tools/logging of your database.
3) Is there any disadvantage if I always set it to batch mode for any transaction?
If you only insert/delete/update a single object (or a few objects) batch mode may perform slower than without (Same when you insert many different objects within the same tx).
regards, Armin
Zhe Liu wrote:
RE: problems with batch-mode=trueSeems it works for me when I tried following
1) batch-mode="true" in repository
2) start transaction before setting the batch mode
broker.beginTransaction(); broker.serviceConnectionManager().setBatchMode(true);
3) I tried this on delete. There were no exceptions and the records got deleted. However, it did not show me any delete statement in the log even though I set the logging to debug mode.
4) If I switch the above to the following
broker.serviceConnectionManager().setBatchMode(true); broker.beginTransaction();
I got following exception
org.apache.ojb.broker.TransactionInProgressException: ConnectionManager is already in transaction at org.apache.ojb.broker.core.PersistenceBrokerImpl.beginTransaction(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.beginTransaction(Unkn own Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.beginTransaction(Unkn own Source) at com.gsnx.ojbeval.db.GSNPersistenceBroker.delete(GSNPersistenceBroker.java:84 ) at com.gsnx.ojbeval.db.BaseDao.delete(BaseDao.java:57)
In the log, I did see the delete statement.
My questions are: 1) Which way should I use? start transaction first or set batch mode to "true" first? 2) How do I know it really does batch delete? 3) Is there any disadvantage if I always set it to batch mode for any transaction?
Thanks, Zhe
-----Original Message----- From: Bonnie MacKellar [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2003 6:02 AM To: OJB Users List Subject: RE: problems with batch-mode=true
Hi,
Here is the code that I tested. You can see that setBatchMode is called before I start the tx. try { broker.serviceConnectionManager().setBatchMode(true); broker.beginTransaction();
for (int i = 0; i < 100; i++) { CustomerInterface customer = new Customer(); customer.setCustomerNumber("100" + i); customer.setFirstName("Big"); customer.setLastName("Customer"); customer.setCustomerName("BadCorporation"); customer.setDeleteTag(Boolean.FALSE);
broker.store(customer); }
// conMan.executeBatch(); broker.commitTransaction(); } catch(Exception e) { e.printStackTrace(); logger.error(e.getMessage()); broker.abortTransaction(); } finally { broker.close(); }
This chunk of code, exectued with batch-mode="true" in repository_database.xml, results in the following two exceptions :
java.lang.IllegalArgumentException: object is not an instance of declaring class at java.lang.reflect.Method.invoke(Native Method) at org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.doExecut e(Unknown Source) at org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler.invoke(U nknown Source) at $Proxy0.doExecute(Unknown Source) at org.apache.ojb.broker.util.batch.BatchConnection.executeBatch(Unknown Source) at org.apache.ojb.broker.util.batch.BatchConnection.commit(Unknown Source) at org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.localCommit(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.commitTransaction(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.commitTransaction(Unk nown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.commitTransaction(Unk nown Source) at com.mobius.activebill.dbmigrationutils.CustomerMigration.main(CustomerMigrat ion.java:69) 3425 ERROR [main] dbmigrationutils.CustomerMigration - object is not an instance of declaring class 3435 DEBUG [main] core.PersistenceBrokerImpl - PB.close was called: [EMAIL PROTECTED]
org.apache.ojb.broker.TransactionNotInProgressException: ConnectionManager is NOT in transaction at org.apache.ojb.broker.core.PersistenceBrokerImpl.abortTransaction(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.abortTransaction(Unkn own Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.abortTransaction(Unkn own Source) at com.mobius.activebill.dbmigrationutils.CustomerMigration.main(CustomerMigrat ion.java:75) Exception in thread "main"
It looks like the persistence broker is being closed down before the call to abortTransaction is made. But that does not explain the first exception. This code works perfectly with batch-mode="false".
And, if I call executeBatch, I don't get the second exception (the one about not being in a transaction), although I still get the first transaction.
I am including my repository_database.xml as an attachment. It is always possible that I am doing something terribly wrong there. The relevant jcd-alias is "ActiveBillStandalone"
thanks, Bonnie MacKellar software engineer Mobius Management Systems, Inc. [EMAIL PROTECTED]
> -----Original Message----- > From: Armin Waibel [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 21, 2003 5:37 PM > To: OJB Users List > Subject: Re: problems with batch-mode=true > > > Hi, > > hmm, this should not happen. > > Please try to set > broker.serviceConnectionManager.setBachMode(true); > before start the tx. Because the connection was > associated with PB instance on PB.beginTx, so setting > batch-mode after this may cause problems. > > I currently made some tests against sapDB > without any problems (using CVS head) > > regards, > Armin > >
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
