On Mar 31, 2008, at 2:31 PM, Dov Rosenberg wrote:
That has been our experience - no warning just a sudden shutdown of the app.When deployed out as a servlet the behavior is such that any other app including tomcat still responds but the WO app is effectively dead.
That is a locking defect somewhere in your code. Getting thread dumps (jstack is very useful) from the locked app is the only useful way to find and fix these.
Chuck
On 3/31/08 5:25 PM, "Chuck Hill" <[EMAIL PROTECTED]> wrote:EOF is single threaded at this level. So the threads just wait forthe lock. If you have mis-matched locks (e.g. lock the db context butnever unlock it), the app just deadlocks. No timeout, no exception. Just a warm, fuzzy deadlock. try... finally is your friend. Chuck On Mar 31, 2008, at 2:21 PM, Dov Rosenberg wrote:Is there a queue where requests get stored in or some sort of timeoutwaiting for the lock to release? Or is the failure an outright exception? Dov Rosenberg On 3/31/08 4:25 PM, "Chuck Hill" <[EMAIL PROTECTED]> wrote:On Mar 31, 2008, at 1:15 PM, Dov Rosenberg wrote:I guess the real problem is trying to run multithreaded apps against asingle threaded EOF stack. Unless we start using multiple EOF stackswe could potentially have other performance problems lurking in the shadowsMore likely from slow fetches and repeated tripping of single faults than this. If you are doing lot of these counts, it would make senseto create a separate EOF stack just for them. ChuckOn 3/31/08 3:39 PM, "Chuck Hill" <[EMAIL PROTECTED]> wrote:That is how you lock the EOF stack. While the stack is locked, noother thread can fetch / save. This same lock happens during all fetch or save operations. Chuck On Mar 31, 2008, at 12:09 PM, Dov Rosenberg wrote:Taking a look at the new code – I agree it looks a bit safer thanthe old code. What is the implication for doing an EODatabaseContext lock in a multi threaded app? Will that cause any problems ifmultiple sessions are trying to do something similar concurrently?Dov RosenbergOn 3/30/08 5:56 PM, "Mike Schrag" <[EMAIL PROTECTED]> wrote:It's not thread safe, and Wonder's implementation doesn't actuallywork like this anymore (your code is based on a version from lastyear sometime) ... See ERXEOControlUtilities._aggregateFunctionWithQualifier for anexample of how to do it properly (we actually create an attributewithout 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 isthe case is there anything we can do to use this code? Or shouldwe 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() attributeembedded 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 NumberaggregateNumberFunctionWithQualifier(EOEditingContext ec, StringentityName, String attributeName, String function, EOQualifier qualifier) { EOEntity entity = EOUtilities.entityNamed(ec,entityName); NSArray results = null; EOAttributeattribute = 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 (Webobjects- [EMAIL PROTECTED]) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40mdimens io n . com 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%40inqui ra .c om This email sent to [EMAIL PROTECTED]_______________________________________________ Do not post admin requests to the list. They will be ignored.Webobjects-dev mailing list (Webobjects- [EMAIL PROTECTED])Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-vill ag e . net This email sent to [EMAIL PROTECTED]
--Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects _______________________________________________ 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]
