Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 228509

Summary: Intermittent IndexOutOfBoundsException when adding Named Queries via the model
Product: [WebTools] Dali JPA Tools Reporter: Tom Mutdosch <mutdosch>
Component: FrameworkAssignee: Karen Butzke <karenfbutzke>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: P3 CC: neil.hauge
Version: 2.0   
Target Milestone: 2.0   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Tom Mutdosch CLA 2008-04-23 16:25:10 EDT
org.eclipse.jpt.core_2.0.0.v200804020001.jar

I am adding named queries like so:

			// remove old queries
			int namedQueriesSize = entity.namedQueriesSize();
			for ( int i = namedQueriesSize -1; i >= 0; i-- ) {
				entity.removeNamedQuery(i);
			}
			

			// add new
			for ( query: queriesToGenerate ) {
		        NamedQuery newNamedQuery = entity.addNamedQuery(entity.namedQueriesSize());
		        newNamedQuery.setName("foo");
		        newNamedQuery.setQuery("bar");
			}

And intermittently I am getting the IndexOutOfBoundsException, and the named query annotations are not added to the entity, or they are corruped (empty values):

!ENTRY org.eclipse.wst.common.frameworks 4 0 2008-04-23 15:00:09.828
!MESSAGE Exception thrown.
!STACK 0
java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
	at java.util.ArrayList.RangeCheck(ArrayList.java:547)
	at java.util.ArrayList.get(ArrayList.java:322)
	at org.eclipse.jpt.utility.internal.CollectionTools.move_(CollectionTools.java:2008)
	at org.eclipse.jpt.utility.internal.CollectionTools.move(CollectionTools.java:1992)
	at org.eclipse.jpt.core.internal.resource.java.NamedQueriesImpl.moveInternal(NamedQueriesImpl.java:112)
	at org.eclipse.jpt.core.internal.resource.java.ContainerAnnotationTools.addNestedAnnotation(ContainerAnnotationTools.java:32)
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.addAnnotation(AbstractJavaResourcePersistentMember.java:223)
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.addAnnotation(AbstractJavaResourcePersistentMember.java:1)
	at org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addNamedQuery(GenericJavaEntity.java:1034)
	at org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addNamedQuery(GenericJavaEntity.java:1)
	at MyClass.addNamedQueriesOnEntity(NamedQueriesUtil.java:968)


and I was seeing this while the namedQueries were being added:
java.lang.NullPointerException
	at org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addQueryMessages(GenericJavaEntity.java:1835)
	at org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addToMessages(GenericJavaEntity.java:1758)
	at org.eclipse.jpt.core.internal.context.java.GenericJavaPersistentType.addToMessages(GenericJavaPersistentType.java:481)
	at org.eclipse.jpt.core.internal.context.java.GenericJavaPersistentType.addToMessages(GenericJavaPersistentType.java:476)
	at org.eclipse.jpt.core.internal.context.persistence.GenericClassRef.addToMessages(GenericClassRef.java:165)
	at org.eclipse.jpt.core.internal.context.persistence.GenericPersistenceUnit.addClassMessages(GenericPersistenceUnit.java:1098)
	at org.eclipse.jpt.core.internal.context.persistence.GenericPersistenceUnit.addToMessages(GenericPersistenceUnit.java:1041)
	at org.eclipse.jpt.core.internal.context.persistence.GenericPersistence.addToMessages(GenericPersistence.java:191)
	at org.eclipse.jpt.core.internal.context.persistence.GenericPersistenceXml.addToMessages(GenericPersistenceXml.java:161)
	at org.eclipse.jpt.core.internal.context.GenericRootContextNode.addToMessages(GenericRootContextNode.java:187)
	at org.eclipse.jpt.core.internal.GenericJpaProject.addToMessages(GenericJpaProject.java:453)
	at org.eclipse.jpt.core.internal.platform.GenericJpaPlatform.addToMessages(GenericJpaPlatform.java:276)
	at org.eclipse.jpt.core.internal.GenericJpaProject.validationMessages(GenericJpaProject.java:436)
	at org.eclipse.jpt.core.internal.validation.JpaValidator.validationMessages(JpaValidator.java:55)
	at org.eclipse.jpt.core.internal.validation.JpaValidator.validate(JpaValidator.java:48)
	at org.eclipse.jpt.core.internal.validation.JpaValidator.validateInJob(JpaValidator.java:77)
	at org.eclipse.wst.validation.internal.operations.ValidatorJob.run(ValidatorJob.java:78)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 1 Tom Mutdosch CLA 2008-04-23 16:29:32 EDT
Aw, why not...  A few more possibly-related NPEs that I was getting while running the same scenario. 

I saw these two frequently while adding the named queries:
!ENTRY org.eclipse.core.resources 4 2 2008-04-23 15:00:09.843
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jpt.core.internal.utility.jdt.JDTFieldAttribute.fragments(JDTFieldAttribute.java:97)
	at org.eclipse.jpt.core.internal.utility.jdt.JDTFieldAttribute.getFragment(JDTFieldAttribute.java:65)
	at org.eclipse.jpt.core.internal.utility.jdt.JDTFieldAttribute.getBinding(JDTFieldAttribute.java:75)
	at org.eclipse.jpt.core.internal.utility.jdt.JDTFieldAttribute.getBinding(JDTFieldAttribute.java:1)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentAttributeImpl.calculatePersistability(JavaResourcePersistentAttributeImpl.java:100)
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.resolveTypes(AbstractJavaResourcePersistentMember.java:422)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentAttributeImpl.resolveTypes(JavaResourcePersistentAttributeImpl.java:213)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.resolveTypes(JavaResourcePersistentTypeImpl.java:367)
	at org.eclipse.jpt.core.internal.resource.java.JpaCompilationUnitImpl.resolveTypes(JpaCompilationUnitImpl.java:211)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.resolveTypes(JavaResourceModelImpl.java:126)
	at org.eclipse.jpt.core.internal.GenericJpaProject.synchronizeJpaFiles(GenericJpaProject.java:554)
	at org.eclipse.jpt.core.internal.GenericJpaModel$DefaultJpaProjectHolder.synchronizeJpaFiles(GenericJpaModel.java:459)
	at org.eclipse.jpt.core.internal.GenericJpaModel.synchronizeFiles(GenericJpaModel.java:187)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:295)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:275)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:286)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:272)
	at org.eclipse.jpt.core.internal.JpaModelManager.resourcePostChange(JpaModelManager.java:264)
	at org.eclipse.jpt.core.internal.JpaModelManager.resourceChanged(JpaModelManager.java:237)
	at org.eclipse.jpt.core.internal.JpaModelManager$ResourceChangeListener.resourceChanged(JpaModelManager.java:474)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:313)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1022)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1809)
	at org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:39)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)




-- 



java.lang.NullPointerException
	at org.eclipse.jpt.core.internal.utility.jdt.JDTMethodAttribute.getBinding(JDTMethodAttribute.java:66)
	at org.eclipse.jpt.core.internal.utility.jdt.JDTMethodAttribute.getBinding(JDTMethodAttribute.java:1)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentAttributeImpl.calculatePersistability(JavaResourcePersistentAttributeImpl.java:100)
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.resolveTypes(AbstractJavaResourcePersistentMember.java:422)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentAttributeImpl.resolveTypes(JavaResourcePersistentAttributeImpl.java:213)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.resolveTypes(JavaResourcePersistentTypeImpl.java:367)
	at org.eclipse.jpt.core.internal.resource.java.JpaCompilationUnitImpl.resolveTypes(JpaCompilationUnitImpl.java:211)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.resolveTypes(JavaResourceModelImpl.java:126)
	at org.eclipse.jpt.core.internal.GenericJpaProject.synchronizeJpaFiles(GenericJpaProject.java:554)
	at org.eclipse.jpt.core.internal.GenericJpaModel$DefaultJpaProjectHolder.synchronizeJpaFiles(GenericJpaModel.java:459)
	at org.eclipse.jpt.core.internal.GenericJpaModel.synchronizeFiles(GenericJpaModel.java:187)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:295)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:275)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:286)
	at org.eclipse.jpt.core.internal.JpaModelManager.synchronizeFiles(JpaModelManager.java:272)
	at org.eclipse.jpt.core.internal.JpaModelManager.resourcePostChange(JpaModelManager.java:264)
	at org.eclipse.jpt.core.internal.JpaModelManager.resourceChanged(JpaModelManager.java:237)
	at org.eclipse.jpt.core.internal.JpaModelManager$ResourceChangeListener.resourceChanged(JpaModelManager.java:474)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:313)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1022)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1809)
	at org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:39)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)



And I also saw this one:

!ENTRY org.eclipse.jdt.core 4 4 2008-04-23 15:00:09.406
!MESSAGE Exception occurred in listener of Java element change notification
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.updateAnnotations(AbstractJavaResourcePersistentMember.java:426)
	at org.eclipse.jpt.core.internal.resource.java.AbstractJavaResourcePersistentMember.updateFromJava(AbstractJavaResourcePersistentMember.java:417)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentAttributeImpl.updateFromJava(JavaResourcePersistentAttributeImpl.java:203)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.updatePersistentAttributes(JavaResourcePersistentTypeImpl.java:431)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.updatePersistentProperties(JavaResourcePersistentTypeImpl.java:419)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.updatePersistentAttributes(JavaResourcePersistentTypeImpl.java:408)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourcePersistentTypeImpl.updateFromJava(JavaResourcePersistentTypeImpl.java:355)
	at org.eclipse.jpt.core.internal.resource.java.JpaCompilationUnitImpl.updateFromJava(JpaCompilationUnitImpl.java:187)
	at org.eclipse.jpt.core.internal.resource.java.JpaCompilationUnitImpl.updateFromJava(JpaCompilationUnitImpl.java:174)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchCompilationUnitWithJavaDelta(JavaResourceModelImpl.java:121)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchWithJavaDelta(JavaResourceModelImpl.java:94)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchChildrenWithJavaDelta(JavaResourceModelImpl.java:103)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchWithJavaDelta(JavaResourceModelImpl.java:91)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchChildrenWithJavaDelta(JavaResourceModelImpl.java:103)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchWithJavaDelta(JavaResourceModelImpl.java:91)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchChildrenWithJavaDelta(JavaResourceModelImpl.java:103)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchWithJavaDelta(JavaResourceModelImpl.java:91)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchChildrenWithJavaDelta(JavaResourceModelImpl.java:103)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.synchWithJavaDelta(JavaResourceModelImpl.java:91)
	at org.eclipse.jpt.core.internal.resource.java.JavaResourceModelImpl.javaElementChanged(JavaResourceModelImpl.java:82)
	at org.eclipse.jpt.core.internal.GenericJpaFile.javaElementChanged(GenericJpaFile.java:59)
	at org.eclipse.jpt.core.internal.GenericJpaProject.javaElementChanged(GenericJpaProject.java:427)
	at org.eclipse.jpt.core.internal.GenericJpaModel$DefaultJpaProjectHolder.javaElementChanged(GenericJpaModel.java:465)
	at org.eclipse.jpt.core.internal.GenericJpaModel.javaElementChanged(GenericJpaModel.java:302)
	at org.eclipse.jpt.core.internal.JpaModelManager.javaElementChanged(JpaModelManager.java:418)
	at org.eclipse.jpt.core.internal.JpaModelManager$JavaElementChangeListener.elementChanged(JpaModelManager.java:512)
	at org.eclipse.jdt.internal.core.DeltaProcessor$3.run(DeltaProcessor.java:1544)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners(DeltaProcessor.java:1534)
	at org.eclipse.jdt.internal.core.DeltaProcessor.firePostChangeDelta(DeltaProcessor.java:1368)
	at org.eclipse.jdt.internal.core.DeltaProcessor.fire(DeltaProcessor.java:1344)
	at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1933)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:313)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1022)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1809)
	at org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:39)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 2 Karen Butzke CLA 2008-05-10 09:39:21 EDT
The NPE's in comment 1 will be affected by Brian's work on the other NPE bugs assigned to RC1.

This NPE has been fixed, I must have fixed it the day you reported it, that's what I'm seeing in the cvs history.
>and I was seeing this while the namedQueries were being added:
>java.lang.NullPointerException
>        at
>org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addQueryMessages(GenericJavaEntity.java:1835)
>        at
>org.eclipse.jpt.core.internal.context.java.GenericJavaEntity.addToMessages(GenericJavaEntity.java:1758)


The IndexOutOfBoundsException is possibly affect by Brian's changes, but I'm pretty sure that will still exist because it is an issue in the java resource model, the events are firing in the wrong order.  Tom, is it possible to provide a failing unit test case that shows this problem?  Or does it only appear when running your code in the UI?  I know some of the issues like this are race conditions caused by the UI.

Comment 3 Karen Butzke CLA 2008-05-27 10:25:17 EDT

*** This bug has been marked as a duplicate of bug 233567 ***