[jbosstools-issues] [JBoss JIRA] (JBIDE-12297) Infinite loop in JPA Validator with HQL syntax Query

Ian Carr (JIRA) jira-events at lists.jboss.org
Sat Jul 7 07:39:12 EDT 2012


Ian Carr created JBIDE-12297:
--------------------------------

             Summary: 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
    Affects Versions: 3.4.x
         Environment: eclipse-jee-juno released
jboss-tools nightly build 3.4.0.v20120706-1104-H5102-M1
            Reporter: Ian Carr


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: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jbosstools-issues mailing list