Paul, can you please post the code as it stands currently. There's a couple of small issues I would want to assess first, before asking you to submit a bug report.
Regards Werner On Tue, 9 Nov 2004 18:00:46 +0800, PAUL CHAN NCSI HK NCS wrote: > >I added db.rollback(); at the catch clause.. the problem still exists. > >-----Original Message----- >From: Bruce Snyder [mailto:[EMAIL PROTECTED] >Sent: Tuesday, November 09, 2004 4:05 PM >To: '[EMAIL PROTECTED]' >Subject: Re: [castor-user] DuplicateIdentityException Problem... > > >PAUL CHAN NCSI HK NCS wrote: > >> I have a problem need your help. The problem exist when JDO is used at web >> application server. >> >> The problem is similar to following JSP example >> >> >> >> The OBDiseaseBean has one-to-many mapping to a child >> >> table OBClinicalPresentation as a ArrayList inside OBDiseaseBean. >> >> The following code is try to add OBClinicalPresentation record to >> >> the OBDiseaseBean, but the remark field size of of OBDiseaseBean >> >> is too large Following exception is thrown >> >> >> >> [code] >> >> Nested error: org.exolab.castor.jdo.PersistenceException: Nested error: >> java.sql.SQLException: ORA-01401: inserted value too large for column >> >> [/code] >> >> >> >> Therefore, I remark the [b]bean.setRemk(b.toString());[/b] method on >coding >> and try to add the OBClinicalPresentation record again (Reload the JSP). >> Following Exception is thrown. >> >> >> >> >> >> [code] >> >> Nested error: org.exolab.castor.jdo.DuplicateIdentityException: Duplicate >> identity found for object of type OBClinicalPresentation with identity : >an >> object with the same identity already exists in persistent storage >> >> [/code] >> >> >> >> Note that there is no [b]duplicated record[/b] exist at Database, but >> >> JDO continues to throw DuplicateIdentityException until >> >> I restart web application server. >> >> Therefore, how can i solve this [b]problem/error/bug ??[/b] :( >. >> // try to commmit >> >> db.commit(); >> >> db.close(); >> >> out.println("Success"); >> >> >> >> } catch (Exception e) { >> >> out.println(e.getMessage()); >> >> e.printStackTrace(); >> >> >> >> } finally { >> >> >> >> if( rs != null ) >> >> rs.close(); >> >> >> >> if( query != null ) >> >> query.close(); >> >> >> >> if( db != null && db.isActive() ) >> >> >> db.rollback(); >> >> else if( db != null ) >> >> db.close(); >> >> } >> > >Paul, > >I believe that the DuplicateIdentityException is because the cache >contains an item with the same identity because the failed commit is not >properly rolled back. In the code aobve, the db.rollback() call should >be taking place in the catch clause so that when an exception occurs >during commit, the tx will be properly rolled back. The code above is >calling db.rollback() in the finally clause and this is incorrect. >Unless there's some other process calling db.close(), the db.isActive() >call will always return true so it will try to call db.rollback() but >there will be nothing to be rolled back. Try calling db.rollback() in >the finally clause instead. > >Bruce >-- >perl -e 'print >unpack("u30","<0G)[EMAIL PROTECTED]&5R\"F9E<G)E=\$\!F<FEI+F-O;0\`\`");' > >The Castor Project >http://www.castor.org/ > >Apache Geronimo >http://geronimo.apache.org/ > > > >----------------------------------------------------------- >If you wish to unsubscribe from this mailing, send mail to >[EMAIL PROTECTED] with a subject of: > unsubscribe castor-user > > > >----------------------------------------------------------- >If you wish to unsubscribe from this mailing, send mail to >[EMAIL PROTECTED] with a subject of: > unsubscribe castor-user > ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-user
