openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ralf Ebert (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (OPENJPA-2360) ClassCastException: DetachedValueStateManager cannot be cast to StateManagerImpl
Date Wed, 08 May 2013 08:47:15 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-2360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13651705#comment-13651705
] 

Ralf Ebert edited comment on OPENJPA-2360 at 5/8/13 8:46 AM:
-------------------------------------------------------------

Yeah, turns out you're right. Patch doesn't fix our problem. At least in my case.

Running with the proposed fix causes another problem a few lines later:
Caused by: java.lang.UnsupportedOperationException
	at org.apache.openjpa.kernel.DetachedValueStateManager.setObjectId(DetachedValueStateManager.java:155)

I don't know how or why, but somehow OpenJPA confuses the object state. The entity it wants
to update (no state change) is in attached state but somehow a DetachedValueStatemanager gets
involved which turns out bad. I'm in no way an OpenJPA-expert but this is how it looks to
me.

I ran into the ClassCastException-problem while working around another problem. My application
called merge on an attached object. According to the documentation this call should be ignored.
But it wasn't. OpenJPA decided to override my changes to the attached entity with the current
state from the database and persist that. But only on one property (boolean), not on an other
(String). So there is already some object state confusion present which possibly also causes
this ClassCastException-problem.
I hope this is of any help...
                
      was (Author: dobrowolsk):
    Yeah, turns out you're right. Patch doesn't fix our problem. At least in my case.

Running with the proposed fix causes another problem a few lines later:
Caused by: java.lang.UnsupportedOperationException
	at org.apache.openjpa.kernel.DetachedValueStateManager.setObjectId(DetachedValueStateManager.java:155)

I don't know how or why, but somehow OpenJPA confuses the object state. The entity it wants
to update is in attached state but somehow a DetachedValueStatemanager gets involved which
turns out bad. I'm in now way an OpenJPA-expert but this is how it looks to me.

I ran into the ClassCastException-problem while working around another problem. My application
called merge on an attached object. According to the documentation this call should be ignored.
But it wasn't. OpenJPA decided to override my changes to the attached entity with the current
state from the database and persist that. But only on one property (boolean), not on an other
(String). So there is already some object state confusion present which possibly also causes
this ClassCastException-problem.
I hope this is of any help...
                  
> ClassCastException: DetachedValueStateManager cannot be cast to StateManagerImpl
> --------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2360
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2360
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, kernel
>    Affects Versions: 2.2.1
>            Reporter: Guillaume Chauvet
>            Priority: Blocker
>         Attachments: OPENJPA-2360.patch
>
>
> The corresponding stacktrace :
> ==========================================
> Caused by: <openjpa-2.2.2-QFD-r422266:1446687M nonfatal general error> org.apache.openjpa.persistence.PersistenceException:
org.apache.openjpa.kernel.DetachedValueStateManager cannot be cast to org.apache.openjpa.kernel.StateManagerImpl
> 	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2002)
> 	at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
> 	at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1518)
> 	at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:933)
> 	at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:570)
> 	... 39 more
> Caused by: java.lang.ClassCastException: org.apache.openjpa.kernel.DetachedValueStateManager
cannot be cast to org.apache.openjpa.kernel.StateManagerImpl
> 	at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:134)
> 	at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:79)
> 	at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:100)
> 	at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:88)
> 	at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:550)
> 	at org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:107)
> 	at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
> 	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:105)
> 	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:78)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:732)
> 	at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
> 	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2178)
> 	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2076)
> 	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1994)
> 	... 43 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message