• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
FYI: Possible buggy EOGenerator code?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: Possible buggy EOGenerator code?


  • Subject: FYI: Possible buggy EOGenerator code?
  • From: Kieran Kelleher <email@hidden>
  • Date: Thu, 30 Dec 2004 16:46:34 -0500

I have spent hours on this and I suspect (I might be wrong ... if I am correct, then this is important to all) there is a bug in section of code that's generated by the the typical EOGenerator base class template. I have changed the code to solve my problem, but I am sending this as an FYI in case you are affected and did not realize it.

If someone else has a chance to verify that I am correct, then please let me know.

A common utility method for deleting all objects in a to-many relationship and the default code generated by any of the EOGenerator templates I have come across looks like this (example of an object with to-many region objects):

public void deleteRegionsRelationship(CTRegion object) {
removeObjectFromBothSidesOfRelationshipWithKey(object, "regions");
editingContext().deleteObject(object);
}


public void deleteAllRegionsRelationships() {
Enumeration objects = regions().objectEnumerator();
while ( objects.hasMoreElements() )
deleteRegionsRelationship((CTRegion)objects.nextElement());
}

The typical EOGen templates also have these similar patterned methods for removing the relationships only and not deleting:
public void removeFromRegionsRelationship(CTRegion object) {
if( log.isDebugEnabled() ) log.debug( "removing "+object+" from regions relationship" );
removeObjectFromBothSidesOfRelationshipWithKey( object, "regions" );
}


public void removeAllFromRegionsRelationships() {
Enumeration objects = regions().objectEnumerator();
while ( objects.hasMoreElements() )
removeFromRegionsRelationship((CTRegion)objects.nextElement());
}

These methods are in my _Geography.java base class where
geography <<-->> region (yes a many-to-many).

My SPECIFIC problem today was with the removeAll... method. The symptom was that all the regions were NOT being removed from the relationship. Logging showed that after a few iterations, the enumeration began returning nulls resulting in some regions not being removed from the relationship.

In troubleshooting, I broke the above code down into smaller parts using NSArray theRegions = regions() and logged out the contents of the NSArray during each iteration and to my surprise the NSArray was shrinking!

The final solution turned out to require creating a new NSMutableArray based on the regions() NSArray and enumerating through that as shown in this working code that works properly.

public void removeAllFromRegionsRelationships() {
NSMutableArray objects = new NSMutableArray( regions() );


if (objects != null) {
Enumeration e = objects.objectEnumerator();
while ( e.hasMoreElements() )
removeFromRegionsRelationship((CTRegion)e.nextElement());
}
}

Consequently, I _suspect_ that the deleteAll (which is common in the EOGen templates and follows the exact same code pattern) will suffer the same problem. I don't know whether this affects to-many relationships that are _not_ part of a many-to-many type scenario ..... but I cannot spend more time today setting up test cases ...... if anyone is using EOGenerator with the standard deleteAll... method being used on a many-to-many relationship, and has time to test it, then please provide feedback.

Regards, Kieran

________________________________________________________________
Dev Config = OS X 10.3.5 / Java 1.4.2_05 / WO 5.2.3 / XCode v1.5 / MySQL 4.0.20 / Connector-J 3.0.11
Deploy Config = OS X 10.3.5 Server / Java 1.4.2_05 / WO 5.2.3 / MySQL 4.0.20 / Connector-J 3.0.11
My Blog: http://webobjects.webhop.org/

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: FYI: Possible buggy EOGenerator code?
      • From: Chuck Hill <email@hidden>
  • Prev by Date: SOLVED : WOFileUpload and DefaultFileRenamePolicy
  • Next by Date: Re: FYI: Possible buggy EOGenerator code?
  • Previous by thread: SOLVED : WOFileUpload and DefaultFileRenamePolicy
  • Next by thread: Re: FYI: Possible buggy EOGenerator code?
  • Index(es):
    • Date
    • Thread