[199520] classpath container deadlock
diff --git a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java index 7ec6fb2..8227f17 100644 --- a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java +++ b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java
@@ -37,6 +37,8 @@ import org.eclipse.jst.j2ee.internal.J2EEConstants; import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainerUtils; import org.eclipse.jst.j2ee.jca.Connector; import org.eclipse.jst.j2ee.jca.modulecore.util.ConnectorArtifactEdit; import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties; @@ -166,7 +168,10 @@ // ClasspathHelper.addClasspathEntries( project, fv, <something> ); } - + if(J2EEComponentClasspathContainerUtils.getDefaultUseEARLibraries()){ + final IPath earLibContainer = new Path(J2EEComponentClasspathContainer.CONTAINER_ID); + addToClasspath(jproj, JavaCore.newContainerEntry(earLibContainer)); + } try { ((IDataModelOperation) model.getProperty(FacetDataModelProvider.NOTIFICATION_OPERATION)).execute(monitor, null);
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java index cf5cced..132b5c7 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java
@@ -34,6 +34,8 @@ import org.eclipse.jst.common.project.facet.core.ClasspathHelper; import org.eclipse.jst.j2ee.internal.J2EEConstants; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainerUtils; import org.eclipse.jst.j2ee.internal.web.classpath.WebAppLibrariesContainer; import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties; import org.eclipse.jst.j2ee.project.facet.J2EEFacetInstallDelegate; @@ -135,9 +137,16 @@ } // Add the web libraries container. + + if(J2EEComponentClasspathContainerUtils.getDefaultUseWebAppLibraries()){ + final IPath webLibContainer = new Path(WebAppLibrariesContainer.CONTAINER_ID); + addToClasspath(jproj, JavaCore.newContainerEntry(webLibContainer)); + } - final IPath webLibContainer = new Path(WebAppLibrariesContainer.CONTAINER_ID); - addToClasspath(jproj, JavaCore.newContainerEntry(webLibContainer)); + if(J2EEComponentClasspathContainerUtils.getDefaultUseEARLibraries()){ + final IPath earLibContainer = new Path(J2EEComponentClasspathContainer.CONTAINER_ID); + addToClasspath(jproj, JavaCore.newContainerEntry(earLibContainer)); + } try { ((IDataModelOperation) model.getProperty(FacetDataModelProvider.NOTIFICATION_OPERATION)).execute(monitor, null);
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java index 50cfd02..c419dbf 100644 --- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java +++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java
@@ -28,6 +28,8 @@ import org.eclipse.jst.j2ee.applicationclient.componentcore.util.AppClientArtifactEdit; import org.eclipse.jst.j2ee.internal.J2EEConstants; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainerUtils; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.datamodel.FacetDataModelProvider; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties; @@ -65,6 +67,11 @@ // if (model.getBooleanProperty(IAppClientFacetInstallDataModelProperties.CREATE_DEFAULT_MAIN_CLASS)) // addMainClass(monitor, model, project); + if(J2EEComponentClasspathContainerUtils.getDefaultUseEARLibraries()){ + final IPath earLibContainer = new Path(J2EEComponentClasspathContainer.CONTAINER_ID); + addToClasspath(jproj, JavaCore.newContainerEntry(earLibContainer)); + } + try { ((IDataModelOperation) model.getProperty(FacetDataModelProvider.NOTIFICATION_OPERATION)).execute(monitor, null); } catch (ExecutionException e) {
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java index 7efb7f7..3a26192 100644 --- a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
@@ -275,28 +275,9 @@ Object[] projects = moduleQueue.getListeners(); for (int i = 0; i < projects.length; i++) { IProject project = (IProject) projects[i]; + // this block is for Web app Libraries if (J2EEProjectUtilities.isDynamicWebProject(project)) { - // this block is for Web app Libraries - - IClasspathContainer webAppLibrariesContainer = null; - // The Web App Libraries container will only be auto added/removed from the classpath once. - // Thereafter the user controls the Web App Librareis container with the JDT UI. - boolean shouldConsiderModifyingWebAppLibraries = !J2EEComponentClasspathContainerUtils.isWebAppLibrariesProcessed(project); - if (shouldConsiderModifyingWebAppLibraries) { - J2EEComponentClasspathContainerUtils.setWebAppLibrariesProcessed(project, true); - boolean shouldAddWebAppLibraries = J2EEComponentClasspathContainerUtils.getDefaultUseWebAppLibraries(); - if (shouldAddWebAppLibraries) { - webAppLibrariesContainer = addContainerToModuleIfNecessary(project, WEB_APP_LIBS_PATH); - } else { - removeContainerFromModuleIfNecessary(project, WEB_APP_LIBS_PATH); - } - } - - // If the container was not just added, see if it is already present - if (null == webAppLibrariesContainer) { - webAppLibrariesContainer = J2EEComponentClasspathContainerUtils.getInstalledWebAppLibrariesContainer(project); - } - + IClasspathContainer webAppLibrariesContainer = J2EEComponentClasspathContainerUtils.getInstalledWebAppLibrariesContainer(project); // If the container is present, refresh it if (webAppLibrariesContainer != null) { ((FlexibleProjectContainer) webAppLibrariesContainer).refresh(); @@ -304,26 +285,7 @@ } // ******************** The following is for EAR Libraries - - IClasspathContainer earLibrariesContainer = null; - // The EAR Libraries container will only be auto added/removed from the classpath once. - // Thereafter the user controls the Ear Librareis container with the JDT UI. - boolean shouldConsiderModifyingEARLibraries = !J2EEComponentClasspathContainerUtils.isEARLibrariesProcessed(project); - if (shouldConsiderModifyingEARLibraries) { - J2EEComponentClasspathContainerUtils.setEARLibrariesProcessed(project, true); - boolean shouldAddEARLibraries = J2EEComponentClasspathContainerUtils.getDefaultUseEARLibraries(); - if (shouldAddEARLibraries) { - earLibrariesContainer = addContainerToModuleIfNecessary(project, J2EEComponentClasspathContainer.CONTAINER_PATH); - } else { - removeContainerFromModuleIfNecessary(project, J2EEComponentClasspathContainer.CONTAINER_PATH); - } - } - - // If the container was not just added, see if it is already present - if (null == earLibrariesContainer) { - earLibrariesContainer = J2EEComponentClasspathContainerUtils.getInstalledEARLibrariesContainer(project); - } - + IClasspathContainer earLibrariesContainer = J2EEComponentClasspathContainerUtils.getInstalledEARLibrariesContainer(project); // If the container is present, refresh it if (earLibrariesContainer != null) { ((J2EEComponentClasspathContainer) earLibrariesContainer).refresh(forceUpdateOnNextRun);
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/UtilityFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/UtilityFacetInstallDelegate.java index 00a68ed..b338ffc 100644 --- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/UtilityFacetInstallDelegate.java +++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/UtilityFacetInstallDelegate.java
@@ -28,6 +28,8 @@ import org.eclipse.jem.util.logger.proxy.Logger; import org.eclipse.jst.common.project.facet.WtpUtils; import org.eclipse.jst.common.project.facet.core.ClasspathHelper; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer; +import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainerUtils; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.datamodel.FacetDataModelProvider; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; @@ -104,6 +106,11 @@ // ClasspathHelper.addClasspathEntries( project, fv, <something> ); } + if(J2EEComponentClasspathContainerUtils.getDefaultUseEARLibraries()){ + final IPath earLibContainer = new Path(J2EEComponentClasspathContainer.CONTAINER_ID); + addToClasspath(jproj, JavaCore.newContainerEntry(earLibContainer)); + } + try { ((IDataModelOperation) model.getProperty(FacetDataModelProvider.NOTIFICATION_OPERATION)).execute(monitor, null); } catch (ExecutionException e) {