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

Pinaki Poddar commented on OPENJPA-35:
--------------------------------------

Right -- a newly looked up copy (the copy comes out of L2 cache and not from 
the database where it really do not exist anymore) -- is essentially not usable 
i.e. any commit set containing that object fails. The L2 cache heals as soon as 
the commit fails.  

So let me summarize 
a) delete via query leaves a copy in the L2 cache
b) the cached copy can be located via em.find()
c) however, any modify operation on this ghost copy will fail
d) this failure will signal to clear the copy from the L2 cache.

Do you think, it is worth mentioning in the doc?
   

> In-memory Delete operation fails with active DataCache
> ------------------------------------------------------
>
>                 Key: OPENJPA-35
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-35
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: datacache, query
>         Environment: Only happens when DataCache is active
>                       <property name="openjpa.DataCache"                
> value="true"/>
>                       <property name="openjpa.RemoteCommitProvider"     
> value="sjvm"/>
>            Reporter: Pinaki Poddar
>            Priority: Critical
>         Attachments: openjpa-35.test.zip, openjpa-35.trace.txt
>
>
> Delete through query such as 
>               Query query = em.createQuery("DELETE FROM Node n");
>               query.executeUpdate();
> fails with following exception (only when DataCache is active)
> Exception in thread "main" <4|false|0.0.0> 
> org.apache.openjpa.persistence.ArgumentException: 
> org.apache.openjpa.datacache.QueryCacheStoreQuery
>       at 
> org.apache.openjpa.kernel.QueryImpl.deleteInMemory(QueryImpl.java:1029)
>       at 
> org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeDelete(ExpressionStoreQuery.java:665)
>       at 
> org.apache.openjpa.datacache.QueryCacheStoreQuery$QueryCacheExecutor.executeDelete(QueryCacheStoreQuery.java:348)
>       at org.apache.openjpa.kernel.QueryImpl.delete(QueryImpl.java:1012)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:768)
>       at org.apache.openjpa.kernel.QueryImpl.deleteAll(QueryImpl.java:831)
>       at org.apache.openjpa.kernel.QueryImpl.deleteAll(QueryImpl.java:827)
>       at 
> org.apache.openjpa.kernel.DelegatingQuery.deleteAll(DelegatingQuery.java:544)
>       at 
> org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:299)
>       at control.Test.clear(Test.java:87)
>       at control.Test.run(Test.java:37)
>       at control.Test.main(Test.java:178)
> Caused by: java.lang.ClassCastException: 
> org.apache.openjpa.datacache.QueryCacheStoreQuery
>       at 
> org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:651)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:949)
>       at 
> org.apache.openjpa.kernel.QueryImpl.deleteInMemory(QueryImpl.java:1018)
>       ... 11 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to