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/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to