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

Guillaume Chauvet edited comment on OPENJPA-2360 at 4/2/13 3:17 PM:
--------------------------------------------------------------------

I'm not be able to create the expected unitary test... However we obtain now a 
OptimisticLockException stacktrace instead of ClassCastException (after 
applying the patch):
======================
Caused by: <openjpa-2.2.2-QFD-r422266:1446687M nonfatal store error> 
org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock 
violation was detected when flushing object instance [...]
        at 
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:124)
        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)
        ... 46 more

Caused by this loop :
============================
for (AbstractAdminNode<?> node : root.getChildren()) {
            if (node instanceof CenterNode) {
                CenterNode centerNode = (CenterNode) node;
                CenterDAO.getInstance().persist(centerNode.getData()); // <- 
exception
            }
        }


Workaround : the code below solves the raised exception.
============================

        Set<Center> centers = new HashSet<Center>();
        for (AbstractAdminNode<?> node : root.getChildren()) {
            if (node instanceof CenterNode) {
                CenterNode centerNode = (CenterNode) node;
                centers.add(centerNode.getData());
            }
        }
        CenterDAO.getInstance().persist(centers.toArray(new Center[0])); // 
call em.persistAll(E...)
                
      was (Author: gchauvet):
    I'm not be able to create the expected unitary test... However we obtain 
now a OptimisticLockException stacktrace instead of ClassCastException :
======================
Caused by: <openjpa-2.2.2-QFD-r422266:1446687M nonfatal store error> 
org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock 
violation was detected when flushing object instance [...]
        at 
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:124)
        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)
        ... 46 more

Caused by this loop :
============================
for (AbstractAdminNode<?> node : root.getChildren()) {
            if (node instanceof CenterNode) {
                CenterNode centerNode = (CenterNode) node;
                CenterDAO.getInstance().persist(centerNode.getData()); // <- 
exception
            }
        }


Workaround : the code below solves the raised exception.
============================

        Set<Center> centers = new HashSet<Center>();
        for (AbstractAdminNode<?> node : root.getChildren()) {
            if (node instanceof CenterNode) {
                CenterNode centerNode = (CenterNode) node;
                centers.add(centerNode.getData());
            }
        }
        CenterDAO.getInstance().persist(centers.toArray(new Center[0])); // 
call em.persistAll(E...)
                  
> 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

Reply via email to