You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Oliver Gierke (JIRA)" <ji...@apache.org> on 2014/06/03 09:27:01 UTC
[jira] [Commented] (OPENJPA-2507) Weird EmptyStackException in
CriteriaQueryImpl
[ https://issues.apache.org/jira/browse/OPENJPA-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14016290#comment-14016290 ]
Oliver Gierke commented on OPENJPA-2507:
----------------------------------------
Just to confirm this: Spring Data JPA is caching {{CriteriaQuery}} instances as in contrast to {{EntityManager}} and {{EntityManagerFactory}} there's no hint in the spec about the {{CriteriaQuery}} instances to be allowed to not be thread safe, once constructed and equipped with predicates.
> Weird EmptyStackException in CriteriaQueryImpl
> ----------------------------------------------
>
> Key: OPENJPA-2507
> URL: https://issues.apache.org/jira/browse/OPENJPA-2507
> Project: OpenJPA
> Issue Type: Bug
> Components: criteria
> Affects Versions: 2.2.0, 2.3.0
> Environment: openjpa 2.2.0 & 2.3.0, spring-data-jpa up to 1.4.2
> Reporter: Ioannis Alexandrakis
> Priority: Minor
> Labels: criteria_api, openjpa
>
> Using spring-data-jpa with openjpa, I sometimes encounter a strange error (not all the times, but under heavy load it makes its appearance, sparsely though):
> ....
> Caused by: java.util.EmptyStackException
> at java.util.Stack.peek(Stack.java:<arbitrary line>)
> at org.apache.openjpa.persistence.criteria.CriteriaQueryImpl.ctx(CriteriaQueryImpl.java:<arbitrary line>
> ....
> I do not know which behaviour triggers it, however I think it would be an improvement to change (I did not know where exactly to file it, because it is both an improvement and a bug in my opinion), in org.apache.openjpa.persistence.criteria.CriteriaQueryImpl, method: Context ctx(), this:
> return _contexts == null || _contexts.isEmpty() ? null : _contexts.peek();
> to something like this:
> try {
> return _contexts == null || _contexts.isEmpty() ? null : _contexts.peek();
> } catch (EmptyStackException e) {
> return null;
> }
> , in order to prevent a case where multiple threads modify the "_contexts" between the evaluation of the inline "if".
> I am not able to reproduce it all the time, thus I can't create a useful test, neither have I created a patch due to the simplicity of the 'fix'. However I believe it is a harmless fix which could be considered a minor improvement.
--
This message was sent by Atlassian JIRA
(v6.2#6252)