Taking a look at the new code I agree it looks a bit safer than the old
code. What is the implication for doing an EODatabaseContext lock in a multi
threaded app? Will that cause any problems if multiple sessions are trying
to do something similar concurrently?
Dov Rosenberg
On 3/30/08 5:56 PM, "Mike Schrag" <[EMAIL PROTECTED]> wrote:
> It's not thread safe, and Wonder's implementation doesn't actually work like
> this anymore (your code is based on a version from last year sometime) ... See
> ERXEOControlUtilities._aggregateFunctionWithQualifier for an example of how to
> do it properly (we actually create an attribute without adding it to the
> entity)
>
> ms
>
> On Mar 30, 2008, at 5:43 PM, Dov Rosenberg wrote:
>> We have some code that we are using from Project Wonder (I think) that adds
>> an attribute programmatically to an EOEntity to do things like count, max,
>> etc. (See below). We were doing a load test on our application and started
>> throwing errors because a different query was submitted using the extra
>> attribute. It seems that making changes to the EOModel is not thread safe. If
>> that is the case is there anything we can do to use this code? Or should we
>> dump this and build a regular fetch for the aggregate data. Any thooughts or
>> insights would be a huge help.
>>
>> Query that was generated in error notice the COUNT() attribute embedded in
>> the query incorrectly
>>
>> "SELECT t0.ACTUALRATING, t0.BODY, t0.CLOSED, t0.DATEADDED, t0.DATEMODIFIED,
>> t0.FORUMID, t0.IPADDRESS, t0.LOCALEID, t0.MODERATE, COUNT(t0.RECORDID),
>> t0.PUBLISHED, t0.RECORDID, t0.STATUS, t0.TITLE, t0.TYPE, t0.USERID,
>> t0.USERNAME, t0.USERNICKNAME, t0.WEIGHTEDRATING FROM DBTOPIC t0 WHERE
>> t0.RECORDID = ?" withBindings: 1:"0032274bc94901122623a943007f46"(recordID)>:
>> Next exception:SQL State:42000 -- error code: 937 -- msg: ORA-00937: not
>> a single-group group function
>>
>>
>> This is the code that we use to add the temporary attribute.
>>
>> public static Number aggregateNumberFunctionWithQualifier(EOEditingContext
>> ec, String entityName, String attributeName, String function, EOQualifier
>> qualifier) { EOEntity entity = EOUtilities.entityNamed(ec,
>> entityName); NSArray results = null; EOAttribute attribute =
>> createAggregateAttribute(ec, function, attributeName, entityName,
>> "java.lang.Number", "i"); EOQualifier schemaBasedQualifier =
>> entity.schemaBasedQualifier(qualifier); EOFetchSpecification fs = new
>> EOFetchSpecification(entityName, schemaBasedQualifier, null);
>> synchronized (entity) { entity.addAttribute(attribute);
>> try{ fs.setFetchesRawRows(true);
>> fs.setRawRowKeyPaths(new NSArray(attribute.name())); results =
>> ec.objectsWithFetchSpecification(fs); }finally{
>> entity.removeAttribute(attribute); } } if ((results
>> != null) && (results.count() == 1)) { NSDictionary row =
>> (NSDictionary) results.lastObject(); if
>> (row.objectForKey(attribute.name()) != null &&
>> row.objectForKey(attribute.name()) instanceof Number) { return
>> (Number) row.objectForKey(attribute.name()); } }
>> return null; }
>>
>>
>>
>> Dov Rosenberg
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>>
http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40mdimension.co>>
m
>>
>> This email sent to [EMAIL PROTECTED]
>>
>>
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>>
http://lists.apple.com/mailman/options/webobjects-dev/drosenberg%40inquira.co>>
m
>>
>> This email sent to [EMAIL PROTECTED]
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [EMAIL PROTECTED]