openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Sutter (JIRA)" <>
Subject [jira] [Commented] (OPENJPA-2507) Weird EmptyStackException in CriteriaQueryImpl
Date Wed, 28 May 2014 13:59:01 GMT


Kevin Sutter commented on OPENJPA-2507:

Interesting.  The more I look into this default Stack implementation, it doesn't look to be
very solid.  Even in the Javadoc for Stack, it recommends the use of Deque instead:

"A more complete and consistent set of LIFO stack operations is provided by the Deque[1] interface
and its implementations, which should be used in preference to this class. For example:

   Deque<Integer> stack = new ArrayDeque<Integer>();"


And, looking at the Deque's peek operation, it doesn't throw an exception if it's empty, it
just returns null.  It might be better to just use the Deque collection instead of Stack...
 Of course, this would have a larger ripple effect in the code base...

It's good to know that your proposed hack seems to resolve the issue for you.  Maybe that's
what we need to do for the time being and worry about the "larger fish" at a later time...
 I have also reached out to Pinaki to see if he has any preference.

> Weird EmptyStackException in CriteriaQueryImpl
> ----------------------------------------------
>                 Key: OPENJPA-2507
>                 URL:
>             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(<arbitrary line>)
>         at org.apache.openjpa.persistence.criteria.CriteriaQueryImpl.ctx(<arbitrary
> ....
> 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

View raw message