I don't want to bug the list too much because I can deal easily with this issue.
However my curiosity would be happy if someone knows the reason. That's said, Cheong, I doubt the cause are those you think for 2 reasons: - informations inserted in raw SQL are not fetched as EO, never (they are used for statistics in another WO app) and I pass a new fresh EC to EOUtilities.raw... - NONotificationRequestLog object is also new, inserted also in a new EC as showed in the code. So I can't invalidate any object because one is not known by EOF and the other one is just created. I made another test: I put the raw insert command in the same method as below using only one EC and I get the same issue: exception when EOF tries to get a primary key. So I'm pretty sure that the insert command causes the exception when I call saveChanges Philippe Sent from my iPhone On 5 sept. 2011, at 12:18, "Cheong Hee (Gmail)" <[email protected]> wrote: > Hi Philippe > > I think somehow 'NO_Sent_Notification_Request_Log_TEST' is already registered > as an existing object in your ec. This caused the ec to fetch the object > again and therefore failed and aborted. I may be just reiterated your point > to be sure : ) > Just to test, you may need to invalidate all objects in the ec and try to > save the log object again. > > Cheers > > Cheong Hee > > > ----- Original Message ----- > From: Philippe Rabier > To: Ray Kiddy > Cc: WebObjects (Group) > Sent: Monday, September 05, 2011 4:55 PM > Subject: Re: Feedback about issue with MySQL and get primary key > > Hi Ray, > > Thank you for the tip. That's something interesting to change the sql > expression on the fly. I was looking for that too. > > But you don't get me so I gonna try to be explain with more concise > explanations. > > The algorithm is the following: > 1 - get data from the DA, check data and return a result (basically 2 > results : data accepted or not) > 2 - if result = data_accepted, I insert new data using raw sql > 3 - write into a log entity (in any circumstances) using EOF aka create an > object and insert it into an ec. > > What I tried to explain is that when the EOUtilities.rawRowsForSQL is > executed in step 2 (and it works, I don't have any issue here), the step 3 > fails because he can't get a primary key. If the step 2 is not executed, the > step 3 is executed successfully. > > I put the simple code below that is executed, just in case but nothing weird > I guess (I removed the try/catch). > > Cheers, > > Philippe > > String aIpAdress = (String) > userInfo.get(NotificationUserInfoEnum.IP_ADDRESS.toString()); > String aRequest = notificationData.getSenderUri(); > String aStatus = (String) > userInfo.get(NotificationUserInfoEnum.STATUS.toString()); > > EOEditingContext ec = ERXEC.newEditingContext(); > ec.lock(); > NOApplication anApplication = null; > if (notificationData.getApplicationName() != null) > anApplication = NBCacheManager.getInstance().application(ec, > notificationData.getApplicationName(), notificationData.getPlatform()); > > NONotificationRequestLog notificationLog = > NONotificationRequestLog.createAndInsertNONotificationRequestLog(ec); > > if (anApplication!=null) > { > notificationLog.setApplication(anApplication); > notificationLog.setApplicationName(anApplication.name()); > } > else if (notificationData.getApplicationName() != null) > notificationLog.setApplicationName(notificationData.getApplicationName()); > > //If a notification is received, we don't know the platform > if (!(this instanceof NBNotificationReceivedRecorder)) > notificationLog.setPlatform(notificationData.getPlatform()); > notificationLog.setIpAddress(aIpAdress); > notificationLog.setRequest(aRequest); > notificationLog.setStatus(aStatus); > > ec.saveChanges(); > > > > On 5 sept. 2011, at 01:08, Ray Kiddy wrote: > >> >> Your rawRowsForSql call through an exception because you are completely >> bypassing the primary key generation process, so it you want to insert rows >> using this call, you need to generate the primary keys yourself. >> >> There is a better way to do this. See below. >> >> - ray >> >> On Sep 4, 2011, at 7:49 AM, Philippe Rabier wrote: >> >>> Hi all, >>> >>> Not a question but a feedback if you have the same issue but I don't have >>> explanation and I didn't look for any. >>> >>> Env: >>> WO 5.4.3, java 6 on Mac OS X 10.6.7, Eclipse 3.4, Wonder a bit old (several >>> months), MySQL v5.0.88 >>> >>> Context: >>> DA where informations are checked, fetched then if everything is fine, >>> informations are saved. At the end, we write into a log the request plus >>> the result and some informations (IP address, …). >>> >>> When informations are saved, I decided to use EOUtilities.rawRowsForSQL to >>> execute an insert sql command in order to optimize the complete R-R. >>> >>> Then I write into the log the request, result, … as I said. >>> >>> If the insert command is executed, when the log is saved (through its >>> editingContext), I got an exception when the adaptor tries to get a new >>> primary key: >>> >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] DEBUG NSLog - Searching for >>> primary key value for NO_Sent_Notification_Request_Log_TEST >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] DEBUG NSLog - >>> evaluateExpression: >>> <com.webobjects.jdbcadaptor._MySQLPlugIn$MySQLExpression: "SELECT PK FROM >>> EO_PK_TABLE WHERE NAME = 'NO_Sent_Notification_Request_Log_TEST' FOR >>> UPDATE" withBindings: > >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] INFO >>> er.extensions.ERXAdaptorChannelDelegate.sqlLogging - "Unknown"@795485135 >>> expression took 232 ms: SELECT PK FROM EO_PK_TABLE WHERE NAME = >>> 'NO_Sent_Notification_Request_Log_TEST' FOR UPDATE >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] DEBUG NSLog - fetch canceled >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] DEBUG NSLog - 0 row(s) processed >>> Sep 04 14:52:56 YNP_NOWebServicesApp[5000] INFO >>> er.transaction.adaptor.Exceptions - Database Exception occured: >>> java.lang.IllegalArgumentException: Array is empty >>> >>> If I replace EOUtilities.rawRowsForSQL with >>> ERXEOAccessUtilities.insertRow(ec, >>> NOAppOpenedAfterPushEvent.Keys.ENTITY_NAME, dic), everything works great. >>> >>> For those who were wondering why I wanted to use >>> EOUtilities.rawRowsForSQL(), the reason is that I wanted to use "INSERT >>> DELAYED INTO ". >>> >>> Have a good sunday. >>> >>> Philippe >> >> >> >> I used to know how to do this using only WebObjects classes, but I cannot >> remember any longer. But this works with Wonder classes. There may be a >> better way to get to the EOAdaptorChannel.Delegate, but I always seem to >> re-find the chain one has to follow. You can get the EODatabaseContext at >> any point that you have an eo and use that to get the EOAdaptorChannel. Once >> you have them, you do not need to find them again. In the code below, the >> setDelegate methods end up getting called more often than they need to be, >> but since I am using singletons for the delegate instances, this is >> harmless. I ran this and verified, after turning on the >> EOAdaptorDebugEnabled flag, I get: >> >> Sep 04 15:07:54 TreeFul[51162] DEBUG NSLog - evaluateExpression: >> <com.webobjects.jdbcadaptor.MySQLPlugIn$MySQLExpression: "INSERT DELAYED >> INTO c_tree_closure(down, up, distance) VALUES (?, ?, ?)" withBindings: >> 1:39(down), 2:39(up), 3:0(distance)> >> eosqlexpression statement: INSERT DELAYED INTO c_tree_closure(down, up, >> distance) VALUES (?, ?, ?) >> Sep 04 15:07:54 TreeFul[51162] DEBUG NSLog - evaluateExpression: >> <com.webobjects.jdbcadaptor.MySQLPlugIn$MySQLExpression: "INSERT DELAYED >> INTO c_tree_closure(down, up, distance) VALUES (?, ?, ?)" withBindings: >> 1:39(down), 2:1(up), 3:1(distance)> >> >> So, it does work. Anyway, good luck. >> >> cheers - ray >> > > _______________________________________________ > 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/chng34%40gmail.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/archive%40mail-archive.com This email sent to [email protected]
