wlu: handle concurrent exception during load opposite feature call
diff --git a/1.5/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/MultiFileResourceSetImpl.java b/1.5/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/MultiFileResourceSetImpl.java
index 3b9f613..1707247 100644
--- a/1.5/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/MultiFileResourceSetImpl.java
+++ b/1.5/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/MultiFileResourceSetImpl.java
@@ -2351,6 +2351,25 @@
//
// }
}
+
+ private ArrayList copyCollectionToList(Collection c) {
+ int max = 5;
+ for (int i = 0; i < max; i++) { //Try up to max times for any concurrent exception
+ try {
+ return new ArrayList(c);
+ } catch (Exception e) {
+ if (i == max - 1) {
+ CommonPlugin.INSTANCE.log(e);
+ } else {
+ try {
+ Thread.sleep(1000);
+ } catch (Exception ee) {
+ }
+ }
+ }
+ }
+ return new ArrayList();
+ }
// /**
// * @return Returns the exceptions.
@@ -2364,7 +2383,7 @@
if (max < 0) {
return;
}
- ArrayList elements = new ArrayList(getGuidToMethodElementMap().values());
+ ArrayList elements = copyCollectionToList(getGuidToMethodElementMap().values());
HashSet loadedElements = new HashSet();
while (!elements.isEmpty()) {
for (Iterator iter = elements.iterator(); iter.hasNext();) {
@@ -2395,7 +2414,7 @@
// gets the newly loaded elements to load their opposite features
//
loadedElements.addAll(elements);
- elements = new ArrayList(getGuidToMethodElementMap().values());
+ elements = copyCollectionToList(getGuidToMethodElementMap().values());
elements.removeAll(loadedElements);
}
}
@@ -2405,7 +2424,7 @@
if (max < 0) {
return;
}
- ArrayList elements = new ArrayList(getGuidToMethodElementMap().values());
+ ArrayList elements = copyCollectionToList(getGuidToMethodElementMap().values());
HashSet loadedElements = new HashSet();
while (!elements.isEmpty()) {
for (Iterator iter = elements.iterator(); iter.hasNext();) {
@@ -2481,7 +2500,7 @@
// gets the newly loaded elements to load their opposite features
//
loadedElements.addAll(elements);
- elements = new ArrayList(getGuidToMethodElementMap().values());
+ elements = copyCollectionToList(getGuidToMethodElementMap().values());
elements.removeAll(loadedElements);
}
}