[266705] Deadlock during J2EEComponentClasspathContainer.update()
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
index 46e1ca8..70202a9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
@@ -274,6 +274,24 @@
 			return true;
 		else return componentFile.isSynchronized(IResource.DEPTH_ZERO);
 	}
+	
+	public IFile getComponentFile() {
+		IFile compFile = getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
+		if (compFile.isAccessible())
+			return compFile;
+		else { //Need to check for legacy file locations also....
+			compFile = getProject().getFile(ModuleStructuralModel.R1_MODULE_META_FILE_NAME);
+			if (compFile.isAccessible())
+				return compFile;
+			else {
+				compFile = getProject().getFile(ModuleStructuralModel.R0_7_MODULE_META_FILE_NAME);
+				if (compFile.isAccessible())
+					return compFile;
+			}
+		}
+		return getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
+	}
+	
 	public WTPModulesResource  makeWTPModulesResource() {
 		return (WTPModulesResource) createResource(WTPModulesResourceFactory.WTP_MODULES_URI_OBJ);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
index 3891ce6..9b04b00 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
@@ -11,6 +11,7 @@
 
 package org.eclipse.wst.common.componentcore.internal;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -18,6 +19,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -435,10 +437,25 @@
 	 * to add or remove {@see WorkbenchComponent}s. If a client needs to just read the existing
 	 * {@see WorkbenchComponent}s, use {@see #getWorkbenchModules()}.
 	 * </p>
+	 * <p>
+	 * Deadlock Warning: Calling this method requires two locks.  First the component file's file lock
+	 * is required and then the EMFWorkbenchEditContextFactory's projectILock is required.  If another
+	 * thread acquires these same two locks in the opposite order, deadlock could occur.
+	 * </p>
 	 * 
 	 * @return The root object of the underlying model
 	 */
 	public ProjectComponents getComponentModelRoot() {
+		IFile file = structuralModel.getComponentFile();
+		if (!file.isSynchronized(IResource.DEPTH_ONE)) {
+			try {
+				File iofile = file.getFullPath().toFile();
+				if (iofile.exists() || file.exists())
+					file.refreshLocal(IResource.DEPTH_ONE, null);
+			} catch (CoreException ce) {
+				//ignore
+			}
+		}	
 		ProjectComponents comps = null;
 		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(structuralModel.getProject());
 		try{