Could it be that the NO_Sent_Notification_Request_
Log_TEST is a new table that you have created lately and that your
EO_PK_TABLE could not locate it for primary key.   Just curious.



On Mon, Sep 5, 2011 at 8:17 PM, Philippe Rabier <prab...@me.com> wrote:

> 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)" <chn...@gmail.com> 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 <prab...@me.com>
> *To:* Ray Kiddy <r...@ganymede.org>
> *Cc:* WebObjects (Group) <webobjects-dev@lists.apple.com>
> *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      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/chng34%40gmail.com
>
> This email sent to chn...@gmail.com
>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to