Community
Participate
Working Groups
Build ID: 3.4 RC4 Steps To Reproduce: We have some code that creates an new source folder as part of creating a WTP project. Due to threading issues in JavaProject.resolveClasspath(PerProjectInfo), this change to the project's classpath is getting lost. At the start of the resolveClasspath method, it makes a copy of the projects raw classpath, and at the end, it calls perProjectInfo.setClasspath() with that copy. The problem we are seeing is that after resolveClasspath has made its copy, a second thread executes which updates the project's classpath, and then execution swithces back to the resolveClasspath on the first thread, which calls perProjectInfo.setClasspath() with the stale copy of the raw classpath, wiping out the change. I added some trace statements to the start and end of JavaProject.resolveClasspath() which print out the value of the saved raw classpath, and to perProjectInfo.setClasspath() which prints out the newRawClasspath passed to it, to show this this happening. Since resolveClasspath gets invoked recursively, the number in brackets indicates the recursive depth. Thread[ModalContext,6,main] ++ (1) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] -- (1) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (1) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (2) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (2) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (2) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (2) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ++ (1) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] -- (1) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[ModalContext,6,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (2) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (2) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (2) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ++ (3) enter resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (3) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (2) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false], /TestEJB/gen/src[CPE_SOURCE][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] ** set classpath ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] Thread[Worker-2,5,main] -- (1) exit resolve ** [/TestEJB/ejbModule[CPE_SOURCE][K_SOURCE][isExported:false], org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6.1 JRE[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.server.core.container/com.ibm.ws.ast.st.runtime.runtimeTarget.v61/was.base.v61[CPE_CONTAINER][K_SOURCE][isExported:false], org.eclipse.jst.j2ee.internal.module.container[CPE_CONTAINER][K_SOURCE][isExported:false]] [00312991]
Created attachment 105826 [details] Trace output Since the trace statements in the description are hard to read, I have attached them as a file to this bugzilla.
This is the same issue as in bug 235778. A fix will be available for 3.4.1. *** This bug has been marked as a duplicate of bug 235778 ***
Verified for 3.5M1 using I20080805-1307
Verified for 3.4.1 using build M20080827-2000.