EclipseLink is missing doPrivileged for setAccessible when parsing JPQL query with EXTRACT
JPQL that includes EXTRACT, such as, ... WHERE EXTRACT (HOUR FROM o.start) BETWEEN ?1 AND ?2 AND EXTRACT (MINUTE FROM o.start)=?3 fails when Java 2 security is enabled because EclipseLink attempts method.setAccessible without a doPrivileged,
java.security.AccessControlException: Access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")java.base/java.security.AccessController.throwACE(AccessController.java:177)
java.base/java.security.AccessController.checkPermissionHelper(AccessController.java:239)
java.base/java.security.AccessController.checkPermission(AccessController.java:386)
java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)
com.ibm.ws.kernel.launch.internal.MissingDoPrivDetectionSecurityManager.checkPermission(MissingDoPrivDetectionSecurityManager.java:47)
java.base/java.lang.reflect.AccessibleObject.checkPermission(AccessibleObject.java:91)
java.base/java.lang.reflect.Method.setAccessible(Method.java:192)
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:247)
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:192)
org.eclipse.persistence.jpa.jpql.parser.ExtractExpression.accept(ExtractExpression.java:72)
org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.acceptChildren(BetweenExpression.java:104)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:81)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2640)
org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.accept(BetweenExpression.java:99)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateCompoundExpression(AbstractGrammarValidator.java:2250)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateLogicalExpression(AbstractGrammarValidator.java:2472)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2554)
org.eclipse.persistence.jpa.jpql.parser.AndExpression.accept(AndExpression.java:59)
org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression.acceptChildren(AbstractSingleEncapsulatedExpression.java:53)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:439)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4054)
org.eclipse.persistence.jpa.jpql.parser.SubExpression.accept(SubExpression.java:49)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateAbstractConditionalClause(AbstractGrammarValidator.java:1676)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4333)
org.eclipse.persistence.jpa.jpql.parser.WhereClause.accept(WhereClause.java:56)
org.eclipse.persistence.jpa.jpql.parser.AbstractSelectStatement.acceptChildren(AbstractSelectStatement.java:94)
org.eclipse.persistence.jpa.jpql.parser.SelectStatement.acceptChildren(SelectStatement.java:105)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:399)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3993)
org.eclipse.persistence.jpa.jpql.parser.SelectStatement.accept(SelectStatement.java:100)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3604)
org.eclipse.persistence.jpa.jpql.parser.JPQLExpression.accept(JPQLExpression.java:135)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:321)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:271)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:164)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:141)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:117)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.