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

Ian Carr (JIRA) jira-events at lists.jboss.org
Sun Aug 12 08:22:14 EDT 2012


    [ https://issues.jboss.org/browse/JBIDE-12297?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12711121#comment-12711121 ] 

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: 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