204287
optimization for J2EEComponentClasspathUpdater.queueUpdate
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 af82e42..e87b93a 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.common.classpath;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -217,6 +218,9 @@
 		private Queue moduleQueue = new Queue();
 
 		private Queue earQueue = new Queue();
+		
+		//a private queue for adding modules queued by the EAR
+		private Queue earAddedModuleQueue = new Queue();
 
 		public ModuleUpdateJob() {
 			super(MODULE_UPDATE_JOB_NAME);
@@ -264,7 +268,7 @@
 						for (int j = 0; j < refs.length; j++) {
 							comp = refs[j].getReferencedComponent();
 							if (!comp.isBinary()) {
-								queueModule(comp.getProject());
+								earAddedModuleQueue.add(comp.getProject());
 							}
 						}
 					}
@@ -312,10 +316,15 @@
 
 				public void run() throws Exception {
 					try {
-						Object[] projects = moduleQueue.getListeners();
-						queueReferencingEars(projects);
+						Object[] moduleProjects = moduleQueue.getListeners();
+						queueReferencingEars(moduleProjects);
 						processEars();
-						processModules(projects);
+						Object [] earQueuedModuleProjects = earAddedModuleQueue.getListeners();
+						Set modulesSet = new HashSet();
+						modulesSet.addAll(Arrays.asList(moduleProjects));
+						modulesSet.addAll(Arrays.asList(earQueuedModuleProjects));
+						Object [] modulesArray = modulesSet.toArray();
+						processModules(modulesArray);
 					} finally {
 						forceUpdateOnNextRun = false;
 					}