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]
-------------------------------------------------