Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 340675 - ArrayIndexOutOfBoundsException trying to init J2EEComponentClasspathContainer from multiple threads
Summary: ArrayIndexOutOfBoundsException trying to init J2EEComponentClasspathContainer...
Status: NEW
Alias: None
Product: WTP Common Tools
Classification: WebTools
Component: wst.common (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: wst.common CLA
QA Contact: Carl Anderson CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-03-22 11:52 EDT by Randall Theobald CLA
Modified: 2011-03-22 11:52 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Randall Theobald CLA 2011-03-22 11:52:04 EDT
Build Identifier: Eclipse version: 3.6.2.r362_v20110210 build: M20110210-1200

I am a performance analyst for an adopting product. I recently ran into some errors that I think denotes a lack of thread safety in WST. I have the following two exceptions at very close timestamps. They both failed in the same code. It hints at non-compatible concurrent access.

!ENTRY org.eclipse.core.jobs 4 2 2011-03-22 09:52:26.250
!MESSAGE An internal error occurred during: "Building the index".
!STACK 0
java.lang.ArrayIndexOutOfBoundsException
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl$EAdapterList.data(BasicNotifierImpl.java:176)
	at org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil.getAdapter(ExtendedEcoreUtil.java:254)
	at org.eclipse.wst.common.componentcore.internal.StructureEdit.getEclipseResource(StructureEdit.java:247)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findMatchingVirtualPathsSet(ResourceTreeNode.java:195)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findModuleResourcesSet(ResourceTreeNode.java:178)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findModuleResources(ResourceTreeNode.java:143)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualResource.getProjectRelativePaths(VirtualResource.java:132)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualResource.getProjectRelativePath(VirtualResource.java:153)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualFile.getUnderlyingFile(VirtualFile.java:98)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getNonBinaryComponentManifest(ManifestUtilities.java:125)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getManifest(ManifestUtilities.java:81)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getManifestClasspath(ManifestUtilities.java:147)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getManifestClasspath(J2EEModuleVirtualComponent.java:241)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.calculateManifestReferences(J2EEModuleVirtualComponent.java:368)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.cacheManifestReferences(J2EEModuleVirtualComponent.java:360)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:144)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.update(J2EEComponentClasspathContainer.java:286)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.install(J2EEComponentClasspathContainer.java:487)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.install(J2EEComponentClasspathContainer.java:510)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathInitializer.initialize(J2EEComponentClasspathInitializer.java:48)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2707)
	at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2613)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2653)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1845)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:2705)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2645)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2783)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1915)
	at org.eclipse.jdt.internal.core.JavaModelManager.determineIfOnClasspath(JavaModelManager.java:1003)
	at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManager.java:888)
	at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManager.java:829)
	at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:2590)
        ...


and


!ENTRY org.eclipse.core.jobs 4 2 2011-03-22 09:52:26.281
!MESSAGE An internal error occurred during: "Initializing Java Tooling".
!STACK 0
java.lang.ArrayIndexOutOfBoundsException
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl$EAdapterList.data(BasicNotifierImpl.java:178)
	at org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil.getAdapter(ExtendedEcoreUtil.java:254)
	at org.eclipse.wst.common.componentcore.internal.StructureEdit.getEclipseResource(StructureEdit.java:247)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findMatchingVirtualPathsSet(ResourceTreeNode.java:195)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findModuleResourcesSet(ResourceTreeNode.java:178)
	at org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode.findModuleResources(ResourceTreeNode.java:143)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualResource.getProjectRelativePaths(VirtualResource.java:132)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualFile.getUnderlyingFiles(VirtualFile.java:104)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualFile.getUnderlyingResources(VirtualFile.java:93)
	at org.eclipse.wst.common.componentcore.internal.resources.VirtualResource.exists(VirtualResource.java:88)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getNonBinaryComponentManifest(ManifestUtilities.java:124)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getManifest(ManifestUtilities.java:81)
	at org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities.getManifestClasspath(ManifestUtilities.java:147)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getManifestClasspath(J2EEModuleVirtualComponent.java:241)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.calculateManifestReferences(J2EEModuleVirtualComponent.java:368)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.cacheManifestReferences(J2EEModuleVirtualComponent.java:360)
	at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:144)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.update(J2EEComponentClasspathContainer.java:286)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.install(J2EEComponentClasspathContainer.java:487)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.install(J2EEComponentClasspathContainer.java:510)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathInitializer.initialize(J2EEComponentClasspathInitializer.java:48)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2707)
	at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2613)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2653)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1845)
	at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3463)
	at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:35)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)


Please see if there is a way to prevent this from happening by some sort of locking.



Reproducible: Sometimes