August Detlefsen wrote:
> Hi, I am getting the following error when I try to remove objects from an 
> ArrayList: 
> 
> org.exolab.castor.jdo.TransactionAbortedException:
> Nested error: java.lang.IllegalStateException: Object deleted waiting
> for lock?????????: Object deleted waiting for lock?????????
>         at 
> org.castor.persist.AbstractTransactionContext.prepare(AbstractTransactionContext.java:1227)
>         at 
> org.exolab.castor.jdo.engine.LocalDatabaseImpl.commit(LocalDatabaseImpl.java:161)
>         at 
> com.codemagi.servlets.content.PageController.dispatchSetTeam(PageController.java:1026)
> 
> One
> of my mapped objects, Section, contains an ArrayList of Users. When I
> try to remove Users from that list and commit, I get the error. Here is
> the code that causes the error to happen: 
> 
> Section section = (Section)db.load(Section.class, sectionId);
Given that you have access to all Users associated with a Section
through the getTeamMembers() method of Section, why not iterate through
the list returned and remove User instances from this list as needed ?

Castor - upon commit time - will be able to tell that you have modified
the list of team members, and persist things accordingly.

[I am not 100% sure why your problem is occuring, but you are
essentially loading some User instances more than once, though Castor
should be able to deal with this.}

I hope this helps

Werner

> 
> Iterator i = removeIds.iterator();
> while (i.hasNext()) {
>     Integer memberId = convertInteger( (String)i.next() );
>     IUser memberToRemove = (IUser)db.load(USER_CLASS, memberId);
> 
>     section.removeUser(memberToRemove);   //calls ArrayList.remove(Object)
> }
> 
> db.commit();
> 
> If
> I log the contents of the List in section, I can see that the User
> objects are getting properly removed. The actual error occurs when
> db.commit() is called. 
> 
> What causes this error to be thrown?
> How does one properly remove objects from a list? Note that we don't
> actually want to delete the User, we just want to remove it from the
> Section. 
> 
> Here is the mapping for Section showing a many-many relationship to User (the 
> database is MySQL): 
> 
>   <class name="com.codemagi.servlets.content.model.Section" identity="id" 
> key-generator="IDENTITY">
>     <description>section hierarchy for navigation and 
> breadcrumbs</description>
>     <map-to table="nav_section" />
>     <field name="id" type="integer">
>       <sql name="section_id" type="integer"/>
>     </field>
>     <field name="name" type="string">
>       <sql name="section_name" type="varchar"/>
>     </field>
>     <field name="teamMembers" type="org.openeco.login.model.User" 
> collection="arraylist">
>       <sql name="user_id" many-table="nav_section_user_xref" 
> many-key="section_id" />
>     </field>
>   </class>
> 
> Thanks,
> August 
> 
> PS: Check out OpenEco. It is a full web application framework that uses 
> Castor JDO-XML as its core persistence layer: http://openeco.dev.java.net
> 
> 
>       
> ____________________________________________________________________________________
> Be a better friend, newshound, and 
> know-it-all with Yahoo! Mobile.  Try it now.  
> http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>     http://xircles.codehaus.org/manage_email
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to