Bug 238448 - Change to project classpath is lost
Summary: Change to project classpath is lost
Status: VERIFIED DUPLICATE of bug 235778
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4   Edit
Hardware: PC Windows XP
: P3 critical (vote)
Target Milestone: 3.4.1   Edit
Assignee: JDT-Core-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-06-25 14:04 EDT by John Pitman CLA
Modified: 2008-08-28 12:37 EDT (History)
1 user (show)

See Also:


Attachments
Trace output (15.57 KB, text/plain)
2008-06-25 14:14 EDT, John Pitman CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description John Pitman CLA 2008-06-25 14:04:46 EDT
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]
Comment 1 John Pitman CLA 2008-06-25 14:14:23 EDT
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.
Comment 2 Jerome Lanneluc CLA 2008-06-26 02:21:59 EDT
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 ***
Comment 3 Olivier Thomann CLA 2008-08-06 14:38:16 EDT
Verified for 3.5M1 using I20080805-1307
Comment 4 Frederic Fusier CLA 2008-08-28 12:37:24 EDT
Verified for 3.4.1 using build M20080827-2000.