(Hopefully others will save time from the result of this exercise)

The problem was not with the application but with a table's sequence.

I was creating a record in a table (let's call it Table A) that had an 
attachment. Attachments are kept in another table (Table B) so that I don't 
load them every time I want to load the main record from table A.  The error 
message I was given was pointing to the record in Table A but the sequence for 
Table B was messed up.  After this:

drop sequence tableB
create sequence tableB start with <insert number larger than current index 
value here>

All started working properly again.  Geesh, I hate computers. :-)

turns out I'm not going crazy!  (or am I?)


Calven

On 2010-12-08, at 6:08 PM, Chuck Hill wrote:

> On Dec 8, 2010, at 11:10 AM, Calven Eggert wrote:
>> On 2010-12-08, at 1:44 PM, Chuck Hill wrote:
>>> On Dec 8, 2010, at 10:41 AM, Calven Eggert wrote:
>>> 
>>>> I still don't follow what you are saying.  actually, I want to insert two 
>>>> records at a time.  I have a page that allows the user to insert records, 
>>>> but I don't actually do the insert until the user clicks on the save 
>>>> button.
>>> 
>>> As in ec.insertObject()?  That is violating EOF commandments for sure.
>> then how?  (I've read the commandments and I don't see your comment above in 
>> there)
>> 
>> Essentially this is what is done...
>>       EOClassDescription cd = 
>> EOClassDescription.classDescriptionForEntityName(entityName);
>>        EOEnterpriseObject eo = 
>> (EOEnterpriseObject)cd.createInstanceWithEditingContext(ec, null);
> 
> Save some typing:
> MyClass myClass = (MyClass)EOUtilities.createAndInsertInstance(ec, 
> entityName);
> 
> Wonder templates make it even easier.
> 
>>        ec.insertObject(eo);
>>        eo.takeValueForKey(noteDescription, "notesdescription");
> 
> That is OK, provided that noteDescription is a local ivar and not on an EO.  
> Touching an attribute of an EO that has not been inserted (which is what I 
> thought you were describing) is a Bad Thing (tm) to do.
> 
> 
>>              ...
>>              ec.saveChanges();
> 
> If that is exactly what you are doing, then ec is already trashed by the time 
> you get here or is not locked.  I would suspect the former.  Tracking this 
> problem down to the code causing it can be very hard as the cause maybe far 
> away in code and appear totally innocent.
> 
> 
> Chuck
> 
> 
>>>> that's when I do the saving/inserting into the database.  but then the 
>>>> sequence numbers are incorrect for the second one.
>>>> 
>>>> what is the other insert you are talking about?
>>>> 
>>>> Still confused on what you are suggesting I do...
>>> 
>>> What I am suggesting is that you DON'T violate EOF commandments.  You are 
>>> doing something that is corrupting the internal EOF state.  Don't do that 
>>> and it will work.
>>> 
>>> 
>>> Chuck
>>> 
>>> 
>>> 
>>>> 
>>>> 
>>>> On 2010-12-08, at 1:24 PM, Chuck Hill wrote:
>>>> 
>>>>> On Dec 8, 2010, at 10:20 AM, Calven Eggert wrote:
>>>>> 
>>>>>> the second record is valid.  I am indeed wanting to insert two records.  
>>>>>> so why would the retrieving of the next sequence number return me a 
>>>>>> number not in sequence?
>>>>> 
>>>>> It is not.  I am pretty sure that it is doing what I said.  There is 
>>>>> another (later) insert that you don't see due to the DB error.
>>>>> 
>>>>> 
>>>>> Chuck
>>>>> 
>>>>> 
>>>>> 
>>>>>> On 2010-12-08, at 12:24 PM, Chuck Hill wrote:
>>>>>> 
>>>>>>> 
>>>>>>> On Dec 8, 2010, at 8:28 AM, Calven Eggert wrote:
>>>>>>> 
>>>>>>>> Recently a WO app has been getting the unique constraint error when 
>>>>>>>> creating a record.  This application has been running for years and so 
>>>>>>>> I'm surprised at this 'just' showing up.  here is the problem:  you'll 
>>>>>>>> see in the following lines that an index is retrieved for 
>>>>>>>> jobs_notes_seq twice because I'm inserting two records.  next you'll 
>>>>>>>> see the insert statements.  look at the notesid field.  
>>>>>>>> 
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  === Begin Internal 
>>>>>>>> Transaction
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  evaluateExpression: 
>>>>>>>> <com.webobjects.jdbcadaptor.OraclePlugIn$OracleExpression: "SELECT 
>>>>>>>> JOBS_NOTES_SEQ.NEXTVAL FROM DUAL" withBindings: >
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1> 1 row(s) processed
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  === Commit Internal 
>>>>>>>> Transaction
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  === Begin Internal 
>>>>>>>> Transaction
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  evaluateExpression: 
>>>>>>>> <com.webobjects.jdbcadaptor.OraclePlugIn$OracleExpression: "SELECT 
>>>>>>>> JOBS_NOTES_SEQ.NEXTVAL FROM DUAL" withBindings: >
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1> 1 row(s) processed
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  === Commit Internal 
>>>>>>>> Transaction
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  === Begin Internal 
>>>>>>>> Transaction
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  evaluateExpression: 
>>>>>>>> <com.webobjects.jdbcadaptor.OraclePlugIn$OracleExpression: "INSERT 
>>>>>>>> INTO JOBS_NOTES(NOTES_SUBMITTED_BY, NOTES_HYPERLINK, 
>>>>>>>> NOTES_USER_VISIBLE, NOTES_JOB_ID, NOTES_SUBMITTED_DATE, 
>>>>>>>> NOTES_DESCRIPTION, NOTES_ID, NOTES_ATTACHMENT_NAME) VALUES (?, NULL, 
>>>>>>>> ?, ?, ?, ?, ?, ?)" withBindings: 1:204(submittedby), 
>>>>>>>> 2:"N"(uservisible), 3:292(jobid), 4:2010-12-08 
>>>>>>>> 10:54:17(submitteddate), 5:"gg"(notesdescription), 6:922(notesid), 
>>>>>>>> 7:"Overview.graffle"(attachmentname)>
>>>>>>>> [2010-12-8 10:54:32 EST] <WorkerThread1>  evaluateExpression: 
>>>>>>>> <com.webobjects.jdbcadaptor.OraclePlugIn$OracleExpression: "INSERT 
>>>>>>>> INTO JOBS_NOTES(NOTES_SUBMITTED_BY, NOTES_HYPERLINK, 
>>>>>>>> NOTES_USER_VISIBLE, NOTES_JOB_ID, NOTES_SUBMITTED_DATE, 
>>>>>>>> NOTES_DESCRIPTION, NOTES_ID, NOTES_ATTACHMENT_NAME) VALUES (?, NULL, 
>>>>>>>> ?, ?, ?, ?, ?, ?)" withBindings: 1:204(submittedby), 
>>>>>>>> 2:"N"(uservisible), 3:292(jobid), 4:2010-12-08 
>>>>>>>> 10:54:23(submitteddate), 5:"hh"(notesdescription), 6:56(notesid), 
>>>>>>>> 7:"Overview.graffle"(attachmentname)>
>>>>>>>> [2010-12-8 10:54:33 EST] <WorkerThread1>  === Rollback Internal 
>>>>>>>> Transaction
>>>>>>>> 
>>>>>>>> see how one is 922 and another is 56?  922 is correct but the 56 
>>>>>>>> should be 923.
>>>>>>> 
>>>>>>> I don't think that is the problem.  I think the problem is that the 
>>>>>>> second was supposed to be an UPDATE or DELETE statement.  This happens 
>>>>>>> when you violate EOF commandments (not locking properly for example).  
>>>>>>> EOF gets confused between one operation and another.
>>>>>>> 
>>>>>>> Go forth and sin no more!
>>>>>>> 
>>>>>>> Chuck
>>>>>>> 
>>>>>>> 
>>>>>>>> very strange.  then when the records are committed, sometimes I get 
>>>>>>>> the dreaded error message:
>>>>>>>> 
>>>>>>>> com.webobjects.eoaccess.EOGeneralAdaptorException: EvaluateExpression 
>>>>>>>> failed: <com.webobjects.jdbcadaptor.OraclePlugIn$OracleExpression: 
>>>>>>>> "INSERT INTO JOBS_NOTES(NOTES_SUBMITTED_BY, NOTES_HYPERLINK, 
>>>>>>>> NOTES_USER_VISIBLE, NOTES_JOB_ID, NOTES_SUBMITTED_DATE, 
>>>>>>>> NOTES_DESCRIPTION, NOTES_ID, NOTES_ATTACHMENT_NAME) VALUES (?, NULL, 
>>>>>>>> ?, ?, ?, ?, ?, ?)" withBindings: 1:204(submittedby), 
>>>>>>>> 2:"N"(uservisible), 3:292(jobid), 4:2010-12-08 
>>>>>>>> 10:54:23(submitteddate), 5:"hh"(notesdescription), 6:56(notesid), 
>>>>>>>> 7:"Overview.graffle"(attachmentname)>
>>>>>>>> Next exception:SQL State:23000 -- error code: 1 -- msg: ORA-00001: 
>>>>>>>> unique constraint (COREDEV3.SYS_C0031657) violated
>>>>>>>> 
>>>>>>>> Obviously this is a problem because number 56 was already a record in 
>>>>>>>> the table.  Sometimes, there is no error message and the record is not 
>>>>>>>> even created.  And sometimes, when the index is correct the record is 
>>>>>>>> created successfully.  argh!
>>>>>>>> 
>>>>>>>> Anyone have this problem before or know what I can do to solve this 
>>>>>>>> mystery? (I've dropped the sequences and recreated them a couple of 
>>>>>>>> times.  but it doesn't solve the problem)
>>>>>>>> 
>>>>>>>> Thanks for your time.
>>>>>>>> 
>>>>>>>> Calven
>>>>>>>> 
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> 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/chill%40global-village.net
>>>>>>>> 
>>>>>>>> This email sent to ch...@global-village.net
>>>>>>> 
>>>>>>> -- 
>>>>>>> Chuck Hill             Senior Consultant / VP Development
>>>>>>> 
>>>>>>> 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
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> -- 
>>>>> Chuck Hill             Senior Consultant / VP Development
>>>>> 
>>>>> 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
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> -- 
>>> Chuck Hill             Senior Consultant / VP Development
>>> 
>>> 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
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>> 
> 
> -- 
> Chuck Hill             Senior Consultant / VP Development
> 
> 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      (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