]
Ian Carr commented on JBIDE-12297:
----------------------------------
Not sure of your component strategy, but this is related to the JPAValidator component of
the tools.
The parser barfs if you replace the HQL 'WITH' with any invalid keyword say
'XXXX'. The parser is just looping
around looking for the next component and keeps comming up with the XXXX and ignoring it
rather than erroring.
The old parser was correctly able to ignore this statement.
I could work around this if I new how to disable JPA validation, or how to uninstall the
JPA validation components. Could you tell me
where these are in the JBOSS tools installation?
Infinite loop in JPA Validator with HQL syntax Query
----------------------------------------------------
Key: JBIDE-12297
URL:
https://issues.jboss.org/browse/JBIDE-12297
Project: Tools (JBoss Tools)
Issue Type: Bug
Components: hibernate
Affects Versions: 3.4.0.M1
Environment: eclipse-jee-juno released
jboss-tools nightly build 3.4.0.v20120706-1104-H5102-M1
Reporter: Ian Carr
Assignee: Dmitry Geraskov
Expect to get a warning about the (invalid) HQL syntax. Actually behaviour makes eclipse
unresponsive.
An Infinite loop in JPA AbstractExpression parse method when using hibernate syntax
FromClause.
wordParser contains the text: OUTER JOIN gr.client clnt WITH clnt.clientId = :clientId
WHERE ro.ownerId = :ownerId
Uses the hibernate WITH clause.
Eclipse becomes unresponsive and has high CPU usage.
breaking the running instance and checking paused threads get a loop around the following
stack trace:
Thread [Worker-3] (Suspended)
FromClause(AbstractExpression).parse(WordParser, String, boolean) line: 748
FromClause(AbstractFromClause).parse(WordParser, boolean) line: 191
SelectStatement(AbstractSelectStatement).parse(WordParser, boolean) line: 348
SelectStatement.parse(WordParser, boolean) line: 238
SelectStatementFactory.buildExpression(AbstractExpression, WordParser, String,
JPQLQueryBNF, AbstractExpression, boolean) line: 55
JPQLExpression(AbstractExpression).parse(WordParser, String, ExpressionFactory,
JPQLQueryBNF, AbstractExpression, boolean) line: 983
JPQLExpression(AbstractExpression).parseSingleExpression(WordParser, String, boolean)
line: 1004
JPQLExpression.parse(WordParser, boolean) line: 307
JPQLExpression.<init>(CharSequence, JPQLGrammar, String, boolean) line: 129
JPQLExpression.<init>(CharSequence, JPQLGrammar, boolean) line: 91
DefaultJPQLQueryContext(JPQLQueryContext).initializeRoot() line: 700
DefaultJPQLQueryContext(JPQLQueryContext).setQuery(IQuery) line: 808
GenericJpaJpqlQueryHelper(AbstractJPQLQueryHelper).setQuery(IQuery) line: 435
GenericJpaJpqlQueryHelper(JpaJpqlQueryHelper).setQuery(NamedQuery, String) line: 223
GenericJpaJpqlQueryHelper(JpaJpqlQueryHelper).validate(NamedQuery, String, TextRange,
int, List<IMessage>) line: 270
GenericJavaNamedQuery2_0.validateQuery_(JpaJpqlQueryHelper, List<IMessage>,
IReporter) line: 112
GenericJavaNamedQuery2_0(AbstractJavaQuery<A>).validateQuery(JpaJpqlQueryHelper,
List<IMessage>, IReporter, CompilationUnit) line: 226
GenericJavaNamedQuery2_0(AbstractJavaQuery<A>).validate(JpaJpqlQueryHelper,
List<IMessage>, IReporter, CompilationUnit) line: 197
GenericPersistenceUnit(AbstractPersistenceUnit).validate(Query, JpaJpqlQueryHelper,
List<IMessage>, IReporter) line: 2615
GenericPersistenceUnit(AbstractPersistenceUnit).validateQueries(List<IMessage>,
IReporter) line: 2559
GenericPersistenceUnit(AbstractPersistenceUnit).validate(List<IMessage>,
IReporter) line: 2249
GenericPersistence.validatePersistenceUnit(List<IMessage>, IReporter) line: 320
GenericPersistence.validate(List<IMessage>, IReporter) line: 272
GenericPersistenceXml.validate(List<IMessage>, IReporter) line: 281
GenericRootContextNode.validate(List<IMessage>, IReporter) line: 244
GenericJpaProject(AbstractJpaProject).validate(List<IMessage>, IReporter) line:
1491
GenericJpaProject(AbstractJpaProject).getValidationMessages(IReporter) line: 1481
InternalJpaProjectManager.buildValidationMessages_(IProject, IReporter) line: 553
InternalJpaProjectManager$BuildValidationMessagesCommand.execute() line: 542
CommandJobCommandAdapter.execute(IProgressMonitor) line: 39
JobCommandJob.run(IProgressMonitor) line: 42
Worker.run() line: 54
Class being parsed looks like:
@Entity
@Table(name="ResourceOwner")
@NamedQueries({
// NB: This is an HQL query as it uses the Hibernate conditional JOIN syntax ie WITH
condition
@NamedQuery(name = "FindResourceOwnerAndGrantsForROIdandClientId",
query = "SELECT ro,gr FROM ResourceOwner ro LEFT OUTER JOIN ro.grants gr LEFT
OUTER JOIN gr.client clnt WITH clnt.clientId = :clientId WHERE ro.ownerId =
:ownerId"),
@NamedQuery(name = "FindResourceOwnerAndGrantsForROIdandClientIdAndScopes",
query = "SELECT ro,gr FROM ResourceOwner ro LEFT OUTER JOIN ro.grants gr WITH
gr.scopeId IN :scopes LEFT OUTER JOIN gr.client clnt WITH clnt.clientId = :clientId WHERE
ro.ownerId = :ownerId"),
})
public class ResourceOwner implements Serializable {
...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: