Return-Path: X-Original-To: apmail-openjpa-dev-archive@www.apache.org Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A4D94FA4B for ; Wed, 28 May 2014 13:59:01 +0000 (UTC) Received: (qmail 76329 invoked by uid 500); 28 May 2014 13:59:01 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 76285 invoked by uid 500); 28 May 2014 13:59:01 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 76276 invoked by uid 99); 28 May 2014 13:59:01 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 May 2014 13:59:01 +0000 Date: Wed, 28 May 2014 13:59:01 +0000 (UTC) From: "Kevin Sutter (JIRA)" To: dev@openjpa.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (OPENJPA-2507) Weird EmptyStackException in CriteriaQueryImpl MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/OPENJPA-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14011108#comment-14011108 ] 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 stack = new ArrayDeque();" [1] http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html 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: 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:) > at org.apache.openjpa.persistence.criteria.CriteriaQueryImpl.ctx(CriteriaQueryImpl.java: > .... > 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)