Hi Gerhard,
our application is single-threaded. With the concurrent-package we are ensuring that requests are delivered in a defined time-frame, or else they are dismissed. So I do not know which other Thread should modify the Person object. But do you know how I could get the name of the collection which cannot be iterated?
Tino
Gerhard Grosse wrote:
Hi Tino
this looks like a multi-threading problem. java.util.ConcurrentModification
exception is thrown by the Java runtime when a List is being modified while an
iterator is iterating over it. The list in this case is one of the collections
in your Person object. Is it possible that a second thread is working on the
same Person? Also the bottom of your stack trace
EDU.oswego.cs.dl.util.concurrent.FutureResult$1.run(null: no source available)
java.lang.Thread.run(Thread.java: 534)
points into this direction.
Gerhard
On Fri, 19 Nov 2004 11:51:02 +0100, Tino Sch�llhorn <[EMAIL PROTECTED]> wrote:
Hi,
I have a weird problem. We are using OJB 1.0 and are greatly satisfied. Now we stumbled across a strange problem. When deleting a Person-Object with:
Person p = ...; pb.beginTransaction(); pb.delete(p); pb.commitTransaction();
we get (sometimes) the following Exception:
java.util.ConcurrentModificationException
java.util.AbstractList$Itr.checkForComodification(AbstractList.java: 448)
java.util.AbstractList$Itr.next(AbstractList.java: 419)
org.apache.ojb.broker.core.PersistenceBrokerImpl.deleteCollections(null: no source available)
org.apache.ojb.broker.core.PersistenceBrokerImpl.doDelete(null: no source available)
org.apache.ojb.broker.core.PersistenceBrokerImpl.delete(null: no source available)
org.apache.ojb.broker.core.DelegatingPersistenceBroker.delete(null: no source available)
org.apache.ojb.broker.core.DelegatingPersistenceBroker.delete(null: no source available)
kos.generator.DataObject.delete(DataObject.java: 106)
kos.wnetz.modules.editor.DAOEditorModule.deleteIt(DAOEditorModule.java: 403)
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java: no source available)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)
java.lang.reflect.Method.invoke(Method.java: 324)
kos.wnetz.system.Action.invoke(Action.java: 164)
kos.wnetz.system.Action$1.call(Action.java: 213)
EDU.oswego.cs.dl.util.concurrent.FutureResult$1.run(null: no source available)
java.lang.Thread.run(Thread.java: 534)
-------------- END Stacktrace
The thing is: I am absolutely sure that we do not modify the object when deleting it. Do you have any idea what I can do about it? Should I switch to OJB 1.0.1?
I am glad for any help.
Tino
P.S.: The configuration for the Person-Object is the following (it is quite long, sorry about that ;-)):
<class-descriptor class="kos.intranet2.om.Person" table="Person">
<field-descriptor name="id" column="PE_ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" access="readonly"/>
<field-descriptor name="userId" column="PE_User" jdbc-type="INTEGER"/>
<field-descriptor name="title" column="PE_Title" jdbc-type="VARCHAR"/>
<field-descriptor name="firstname" column="PE_Firstname" jdbc-type="VARCHAR"/>
<field-descriptor name="lastname" column="PE_Lastname" jdbc-type="VARCHAR"/>
<field-descriptor name="fullName" column="PE_FullName" jdbc-type="VARCHAR"/>
<field-descriptor name="initials" column="PE_Initials" jdbc-type="VARCHAR"/>
<field-descriptor name="description" column="PE_Description" jdbc-type="LONGVARCHAR"/>
<field-descriptor name="gender" column="PE_Gender" jdbc-type="BIT"/>
<field-descriptor name="birthday" column="PE_Birthday" jdbc-type="DATE"/>
<field-descriptor name="country" column="PE_Country" jdbc-type="VARCHAR"/>
<field-descriptor name="pictureId" column="PE_Picture" jdbc-type="INTEGER"/>
<field-descriptor name="typeId" column="PE_Type" jdbc-type="INTEGER" access="anonymous"/>
<field-descriptor name="privateData" column="PE_Private" jdbc-type="BIT"/>
<field-descriptor name="owner" column="PE_Owner" jdbc-type="INTEGER"/>
<field-descriptor name="creationDate" column="PE_CreationDate" jdbc-type="TIMESTAMP"/>
<field-descriptor name="archiveDate" column="PE_ArchiveDate" jdbc-type="TIMESTAMP"/>
<!-- 1: N - Relation: 1er Seite Type -->
<reference-descriptor
name="type"
class-ref="kos.intranet2.om.PersonType"
auto-retrieve="true"
auto-update="link"
auto-delete="none">
<foreignkey field-ref="typeId"/>
<attribute attribute-name="reverseCollection" attribute-value="persons"/>
</reference-descriptor>
<!-- M:N - Relation Person-Addresses -->
<collection-descriptor
name="addresses"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.Address"
auto-retrieve="true"
auto-update="link"
auto-delete="link"
proxy="true"
indirection-table="Person_Address">
<fk-pointing-to-this-class column="PEAD_Person"/>
<fk-pointing-to-element-class column="PEAD_Address"/>
<attribute attribute-name="reverseCollection" attribute-value="persons"/>
</collection-descriptor>
<!-- Company-Persons-->
<collection-descriptor
name="companyPersons"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.CompanyPerson"
auto-retrieve="true"
auto-update="object"
auto-delete="object"
proxy="true">
<inverse-foreignkey field-ref="personId"/>
<attribute attribute-name="reverseReference" attribute-value="person"/>
</collection-descriptor>
<!-- TeamPerson -->
<collection-descriptor
name="teamPersons"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.TeamPerson"
auto-retrieve="true"
auto-update="object"
auto-delete="object"
proxy="true">
<inverse-foreignkey field-ref="personId"/>
<attribute attribute-name="reverseReference" attribute-value="person"/>
</collection-descriptor>
<!-- ProjectPerson -->
<collection-descriptor
name="projectPersons"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.ProjectPerson"
auto-retrieve="true"
auto-update="object"
auto-delete="object"
proxy="true">
<inverse-foreignkey field-ref="personId"/>
<attribute attribute-name="reverseReference" attribute-value="person"/>
</collection-descriptor>
<!-- M:N Relation Person-Appointment -->
<collection-descriptor
name="appointments"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.Appointment"
auto-retrieve="true"
auto-update="link"
auto-delete="link"
proxy="true"
indirection-table="Person_Appointment">
<fk-pointing-to-this-class column="PEAP_Person"/>
<fk-pointing-to-element-class column="PEAP_Appointment"/>
<attribute attribute-name="reverseCollection" attribute-value="persons"/>
</collection-descriptor>
<!-- M:N Relation Person-Task -->
<collection-descriptor
name="tasks"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="kos.intranet2.om.Task"
auto-retrieve="true"
auto-update="link"
auto-delete="link"
proxy="true"
indirection-table="Person_Task">
<fk-pointing-to-this-class column="PETA_Person"/>
<fk-pointing-to-element-class column="PETA_Task"/>
<attribute attribute-name="reverseCollection" attribute-value="persons"/>
</collection-descriptor>
</class-descriptor>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
