Ralf

I created a sample web application with different classes and a table. I could 
reproduce this behaviour again. This time, I have observed a pattern.

Table Name: Table2 has three fields:a, b, c
I have a class mapping to table: Table2DTO.java: having corresponding fields: 
a, b, c

I am getting ObjectModifiedException when some of the columns have "" value

For example: 

I insert a row into Table2 with b and c value blanks. Printed the values of b 
and c of Table2DTO object - shows empty strings

Next time, when I try to modify the column which is blank, I am getting 
ObjectModifiedException. Further modifications of this blank columns are 
successful.

I insert a row
a1 (b and c are blanks)

modify b where a = a1 -------->ObjectModifiedException
modify b where a = a1 ---------> success
modify b where a = a1 ---------> success


How do I avoid it? By inserting some default value if nothing is supplied?


Thanks
Shiva.






-----Original Message-----
From: Shiva P. Kodityala [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 01, 2005 1:23 PM
To: [email protected]
Subject: RE: [castor-user] ObjectModifiedException


Ralf, Thanks for your suggestions.

Do you configure time-period somewhere to make an object available for certain 
time?

"According to my experience I expect 
the problem happend at the last write operation before the failing one."

I too feel the same.. I am doing commit and close resultset and database 
objects after insert; :(

Thanks
Shiva.

-----Original Message-----
From: Ralf Joachim [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 01, 2005 12:11 PM
To: [email protected]
Subject: Re: [castor-user] ObjectModifiedException


Hi Shiva


I'm really sorry but according to the stacktrace it is not possible to 
find out what caused the exception. According to my experience I expect 
the problem happend at the last write operation before the failing one. 
In most cases it is quite difficult to track this as you may have 
recognized yourself. I suggest you to prepare a test case that allows me 
to reproduce the problem. At least with the information I have at the 
moment I am not able to help you.

There is one other thing that came to my mind being the reason for the 
problem. If the object you want to change has been expired from cache 
you may also get this ObjectModifiedException.

Regards
Ralf


Shiva P. Kodityala schrieb:

>Ralf,
>
>I am still not able to figure out what is happening...
>
>Could you help me figuring out what is the problem by looking at the 
>exception? Is it because of nulls?
>
>exception was logged org.exolab.castor.jdo.ObjectModifiedException: 
>Transaction aborted: Object of type test.tables.User with identity hk has been 
>modified by a concurrent transaction (cache entry is different from database 
>row). The following fields have been changed [actual/expected value]: 
>(test.tables.User).address1: [/null](test.tables.User).address2: 
>[/null](test.tables.User).address3: [null/null](test.tables.User).city: 
>[null/null](test.tables.User).state: [/null]
>
>Thanks
>
>
>-----Original Message-----
>From: Ralf Joachim [mailto:[EMAIL PROTECTED]
>Sent: Tuesday, November 29, 2005 11:31 PM
>To: [email protected]
>Subject: Re: [castor-user] ObjectModifiedException
>
>
>Hi Shiva,
>
>a ObjectModifiedException is thrown by Castor if the object in cache 
>differs from the objects representation in the database. There is a 
>various number of reasons that can cause that:
>
>- another application changes the values in the database
>- you have mapped the same table with 2 mappings and change the values 
>through both of them
>- your database does change values when storing (e.g. convert null to 
>empty String, clip String to column length)
>
>Castor is only able to recognize that changes when you try to modify the 
>object the next time after one of the above situation happend.
>
>Regards
>Ralf
>
>
>Shiva P. Kodityala schrieb:
>
>  
>
>>I am trying to modify one of the columns of an obtained row. 
>>
>>Problem seems to be something to do with nulls.
>>
>>Here is the code:
>>
>>for(int i=0; i<numberOfSelectedUsers;i++)
>>
>>{
>>
>>database = connectionPool.getJDOConnection();
>>
>>database.begin();
>>
>>String oqlString = "select p from test.tables.User p where userid=$1";
>>
>>oql = database.getOQLQuery(oqlString);
>>
>>oql.bind( selectedUserIds[i]);
>>
>>results = oql.execute();
>>
>>User user = null;
>>
>>while (results.hasMore()) {
>>
>>user = (User) results.next();
>>
>>}
>>
>>user.setActivationstatus(toStatus);
>>
>>database.commit();
>>
>>database.close();
>>
>>database = null;
>>
>>}
>>
>>Here is error. It is not  happening always.. I don't know why.
>>
>>following fields have been changed [actual/expected value]: 
>>(test.tables.User).address1: [/null](test.tables.User).address2: 
>>[/null](test.tables.User).address3: [null/null](test.tables.User).city: 
>>[null/null](test.tables.User).state: [/null](test.tables.User).country: 
>>[null/null](test.tables.User).ZIP: [/null]
>>[11/29/05 22:25:06:609 PST] 7e116486 DatabaseImpl  E 
>>org.exolab.castor.jdo.engine.DatabaseImpl  TRAS0014I: The following exception 
>>was logged org.exolab.castor.jdo.ObjectModifiedException: Transaction 
>>aborted: Object of type test.tables.User with identity hk has been modified 
>>by a concurrent transaction (cache entry is different from database row). The 
>>following fields have been changed [actual/expected value]: 
>>(test.tables.User).address1: [/null](test.tables.User).address2: 
>>[/null](test.tables.User).address3: [null/null](test.tables.User).city: 
>>[null/null](test.tables.User).state: [/null](test.tables.User).country: 
>>[null/null](test.tables.User).ZIP: [/null]
>>at org.exolab.castor.jdo.engine.SQLEngine.store(SQLEngine.java:1013)
>>at org.exolab.castor.persist.ClassMolder.store(ClassMolder.java:834)
>>at org.exolab.castor.persist.LockEngine.store(LockEngine.java:779)
>>at 
>>org.castor.persist.TransactionContext.prepareForCreate(TransactionContext..java:1654)
>>at org.castor.persist.TransactionContext.prepare(TransactionContext.java:1618)
>>at org.exolab.castor.jdo.engine.DatabaseImpl.commit(DatabaseImpl.java:521)
>>at test.actions.ChangeStatusAction.changeStatus(ChangeStatusAction.java:226)
>>at test.actions.ChangeStatusAction.active(ChangeStatusAction.java:120)
>>at test.actions.ChangeStatusAction.execute(ChangeStatusAction.java:47)
>>at 
>>org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
>>at 
>>org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
>>at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
>>at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
>>at 
>>com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
>>at 
>>com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
>>at 
>>com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
>>at 
>>com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
>>at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
>>at 
>>com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
>>at 
>>com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
>>at 
>>com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
>>at 
>>com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
>>at 
>>com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
>>at 
>>com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
>>at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
>>at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
>>..
>>                                
>> org.exolab.castor.jdo.ObjectModifiedException: Transaction aborted: Object 
>> of type test.tables.User with identity hk has been modified by a concurrent 
>> transaction (cache entry is different from database row). The following 
>> fields have been changed [actual/expected value]: 
>> (test.tables.User).address1: [/null](test.tables.User).address2: 
>> [/null](test.tables.User).address3: [null/null](test.tables.User).city: 
>> [null/null](test.tables.User).state: [/null](test.tables.User).country: 
>> [null/null](test.tables.User).ZIP: [/null]
>>at org.exolab.castor.jdo.engine.SQLEngine.store(SQLEngine.java:1013)
>>at org.exolab.castor.persist.ClassMolder.store(ClassMolder.java:834)
>>at org.exolab.castor.persist.LockEngine.store(LockEngine.java:779)
>>at 
>>org.castor.persist.TransactionContext.prepareForCreate(TransactionContext..java:1654)
>>at org.castor.persist.TransactionContext.prepare(TransactionContext.java:1618)
>>at org.exolab.castor.jdo.engine.DatabaseImpl.commit(DatabaseImpl.java:521)
>>at test.actions.ChangeStatusAction.changeStatus(ChangeStatusAction.java:226)
>>at test.actions.ChangeStatusAction.active(ChangeStatusAction.java:120)
>>at test.actions.ChangeStatusAction.execute(ChangeStatusAction.java:47)
>>at 
>>org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
>>at 
>>org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
>>at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
>>at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
>>at 
>>com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
>>at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
>>at 
>>com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
>>at 
>>com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
>>at 
>>com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
>>at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
>>at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
>>at 
>>com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
>>at 
>>com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
>>at 
>>com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
>>at 
>>com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
>>at 
>>com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
>>at 
>>com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
>>at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
>>at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
>>
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R 
>>org.exolab.castor.jdo.ObjectModifiedException: Transaction aborted: Object of 
>>type test.tables.User with identity hk has been modified by a concurrent 
>>transaction (cache entry is different from database row). The following 
>>fields have been changed [actual/expected value]: 
>>(test.tables.User).address1: [/null](test.tables.User).address2: 
>>[/null](test.tables.User).address3: [null/null](test.tables.User).city: 
>>[null/null](test.tables.User).state: [/null](test.tables.User).country: 
>>[null/null](test.tables.User).ZIP: [/null]
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.exolab.castor.jdo.engine.SQLEngine.store(SQLEngine.java:1013)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.exolab.castor.persist.ClassMolder.store(ClassMolder.java:834)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.exolab.castor.persist.LockEngine.store(LockEngine.java:779)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.castor.persist.TransactionContext.prepareForCreate(TransactionContext..java:1654)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.castor.persist.TransactionContext.prepare(TransactionContext.java:1618)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.exolab.castor.jdo.engine.DatabaseImpl.commit(DatabaseImpl.java:521)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>test.actions.ChangeStatusAction.changeStatus(ChangeStatusAction.java:226)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>test.actions.ChangeStatusAction.active(ChangeStatusAction.java:120)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>test.actions.ChangeStatusAction.execute(ChangeStatusAction.java:47)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>[11/29/05 22:25:06:656 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
>>[11/29/05 22:25:06:672 PST] 7e116486 SystemErr     R  at 
>>com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
>>
>>
>>
>>
>>
>>
>>
>>
>> 
>>
>>------------------------------------------------------------------------
>>
>>-------------------------------------------------
>>If you wish to unsubscribe from this list, please 
>>send an empty message to the following address:
>>
>>[EMAIL PROTECTED]
>>-------------------------------------------------
>>
>>    
>>
>
>
>-------------------------------------------------
>If you wish to unsubscribe from this list, please 
>send an empty message to the following address:
>
>[EMAIL PROTECTED]
>-------------------------------------------------
>
>
>-------------------------------------------------
>If you wish to unsubscribe from this list, please 
>send an empty message to the following address:
>
>[EMAIL PROTECTED]
>-------------------------------------------------
>
>  
>


-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------


-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------


-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to