Hi Christian,
seems expected behaviour. SequenceManagerHighLowImpl use optimistic locking to guarantee unique HighLowSequence objects. In current implementation SequenceManagerHighLowImpl try five times to get next sequence object. If all calls fails the last OptimisticLockingException was thrown:
> Caused by: org.apache.ojb.broker.util.sequence.SequenceManagerException: > Can't build new sequence ... > Caused by: org.apache.ojb.broker.OptimisticLockException: Object has been > modified by someone else
How many threads try to insert the same data?
regards, Armin
Christian Eugster wrote:
Hi!
I meet a problem using ojb 1.0rc5 and mysql (innodb): when i try to insert an object with some children in a concurrent environment a ClassNotPersistenceCapableException is thrown if some other clients are doing the same (See the stacktrace below).
What am I doing wrong? Has anybody experienced the same and solved it (and: how)?
Thank you for answering?
Stacktrace: INFO: Beleg wird gespeichert... 08.06.2004 08:14:16 ch.eugster.pos.db.Table describeError SCHWERWIEGEND: Can not init Identity for given object [EMAIL PROTECTED] org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: Can not init Identity for given object [EMAIL PROTECTED] at org.apache.ojb.broker.Identity.init(Unknown Source) at org.apache.ojb.broker.Identity.<init>(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeCollectionObject(Unkno wn Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeCollections(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source) at ch.eugster.pos.db.Table.store(Table.java:119) at ch.eugster.pos.db.Table.store(Table.java:215) at ch.eugster.pos.client.model.ReceiptModel.storeReceipt(ReceiptModel.java:313) at ch.eugster.pos.client.model.ReceiptModel.posEventPerformed(ReceiptModel.java :210) at ch.eugster.pos.client.event.Action.actionPerformed(Action.java:114) at ch.eugster.pos.client.event.StoreReceiptAction.actionPerformed(StoreReceiptA ction.java:85 ) at ch.eugster.pos.client.event.ExpressStoreReceiptAction.actionPerformed(Expres sStoreReceipt Action.java:99) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Caused by: org.apache.ojb.broker.PersistenceBrokerException: Could not get key value at org.apache.ojb.broker.util.BrokerHelper.getAutoIncrementValue(Unknown Source) at org.apache.ojb.broker.util.BrokerHelper.getValuesForObject(Unknown Source) at org.apache.ojb.broker.util.BrokerHelper.getKeyValues(Unknown Source) ... 40 more Caused by: org.apache.ojb.broker.util.sequence.SequenceManagerException: Can't build new sequence at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getSequence(U nknown Source ) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getUniqueLong (Unknown Sour ce) at org.apache.ojb.broker.util.sequence.AbstractSequenceManager.getUniqueValue(U nknown Source ) ... 43 more Caused by: org.apache.ojb.broker.OptimisticLockException: Object has been modified by someone else at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeUpdate(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source) at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.lookupStoreSe quence(Unknow n Source) ... 46 more
the used classes are (class-descriptors) Receipt: <class-descriptor class="ch.eugster.pos.db.Receipt" table="pos_receipt" isolation-level="read-uncommitted" accept-locks="true" refresh="false"> <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" indexed="true" access="readwrite" autoincrement="true" nullable="true" locking="false" update-lock="true" default-fetch="false" /> <field-descriptor name="timestamp" column="timestamp" jdbc-type="TIMESTAMP" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="number" column="number" indexed="true" jdbc-type="VARCHAR" length="25" primarykey="false" nullable="true" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="transactionId" column="transaction_id" jdbc-type="BIGINT" primarykey="false" indexed="true" access="readwrite" autoincrement="false" nullable="false" locking="false" update-lock="true" default-fetch="false" /> <field-descriptor name="bookingId" column="booking_id" jdbc-type="BIGINT" primarykey="false" indexed="true" access="readwrite" autoincrement="false" nullable="false" locking="false" update-lock="true" default-fetch="false" /> <field-descriptor name="salespointId" column="salespoint_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="userId" column="user_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="foreignCurrencyId" column="foreign_currency_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="status" column="status" jdbc-type="INTEGER" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="settlement" column="settlement" jdbc-type="BIGINT" primarykey="false" indexed="true" nullable="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="amount" column="amount" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="payment" column="payment" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="paymentFC" column="payment_fc" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" />
<reference-descriptor name="salespoint" class-ref="ch.eugster.pos.db.Salespoint" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="salespointId" /> </reference-descriptor>
<reference-descriptor name="user" class-ref="ch.eugster.pos.db.User" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="userId" /> </reference-descriptor>
<reference-descriptor name="foreignCurrency" class-ref="ch.eugster.pos.db.ForeignCurrency" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="foreignCurrencyId" /> </reference-descriptor>
<collection-descriptor name="positions" element-class-ref="ch.eugster.pos.db.Position" auto-retrieve="true" auto-update="true" auto-delete="true" sort="ASC" proxy="false" refresh="false" otm-dependent="false"> <orderby name="id" sort="ASC" /> <inverse-foreignkey field-ref="receiptId" /> </collection-descriptor>
<collection-descriptor name="payments" element-class-ref="ch.eugster.pos.db.Payment" auto-retrieve="true" auto-update="true" auto-delete="true" sort="ASC" proxy="false" refresh="false" otm-dependent="false"> <orderby name="id" sort="ASC" /> <inverse-foreignkey field-ref="receiptId" /> </collection-descriptor> </class-descriptor>
Position: <class-descriptor class="ch.eugster.pos.db.Position" table="pos_position" isolation-level="read-uncommitted" accept-locks="true" refresh="false"> <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" indexed="true" access="readwrite" autoincrement="true" nullable="true" locking="false" update-lock="true" default-fetch="false" /> <field-descriptor name="receiptId" column="receipt_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="productId" column="product_id" jdbc-type="VARCHAR" length="50" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="productGroupId" column="product_group_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="currentTaxId" column="current_tax_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="quantity" column="quantity" jdbc-type="INTEGER" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="price" column="price" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="discount" column="discount" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="expense" column="expense" jdbc-type="BIT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="galileoBook" column="galileo_book" jdbc-type="BIT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="galileoBooked" column="galileo_booked" jdbc-type="BIT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="optCode" column="opt_code" jdbc-type="CHAR" length="1" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="author" column="author" jdbc-type="VARCHAR" length="100" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="title" column="title" jdbc-type="VARCHAR" length="100" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="publisher" column="publisher" jdbc-type="VARCHAR" length="100" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="isbn" column="isbn" jdbc-type="VARCHAR" length="13" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="bznr" column="bznr" jdbc-type="VARCHAR" length="10" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="productNumber" column="product_number" jdbc-type="VARCHAR" length="100" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="ordered" column="ordered" jdbc-type="BIT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="orderId" column="order_id" jdbc-type="VARCHAR" length="100" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" />
<reference-descriptor name="receipt" class-ref="ch.eugster.pos.db.Receipt" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="receiptId" /> </reference-descriptor>
<reference-descriptor name="productGroup" class-ref="ch.eugster.pos.db.ProductGroup" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="productGroupId" /> </reference-descriptor>
<reference-descriptor name="currentTax" class-ref="ch.eugster.pos.db.CurrentTax" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="currentTaxId" /> </reference-descriptor>
</class-descriptor>
Payment: <class-descriptor class="ch.eugster.pos.db.Payment" table="pos_payment" isolation-level="read-uncommitted" accept-locks="true" refresh="false"> <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" indexed="true" access="readwrite" autoincrement="true" nullable="true" locking="false" update-lock="true" default-fetch="false" /> <field-descriptor name="receiptId" column="receipt_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="paymentTypeId" column="payment_type_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="foreignCurrencyId" column="foreign_currency_id" jdbc-type="BIGINT" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="quotation" column="quotation" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="amount" column="amount" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="amountFC" column="amount_fc" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="roundFactor" column="round_factor" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" /> <field-descriptor name="roundFactorFC" column="round_factor_fc" jdbc-type="DOUBLE" primarykey="false" nullable="true" indexed="false" autoincrement="false" locking="false" update-lock="true" default-fetch="false" access="readwrite" />
<reference-descriptor name="receipt" class-ref="ch.eugster.pos.db.Receipt" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="receiptId" /> </reference-descriptor>
<reference-descriptor name="paymentType" class-ref="ch.eugster.pos.db.PaymentType" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="paymentTypeId" /> </reference-descriptor>
<reference-descriptor name="foreignCurrency" class-ref="ch.eugster.pos.db.ForeignCurrency" proxy="false" refresh="false" auto-retrieve="true" auto-update="false" auto-delete="false" otm-dependent="false"> <foreignkey field-ref="foreignCurrencyId" /> </reference-descriptor>
</class-descriptor>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
