From d783abbf27f87d7bef35f656033c4d4d20a1d727 Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Tue, 16 Aug 2016 11:56:39 +0200
Subject: [PATCH 1/1] Fix endless loop in entity cache when opening "Inspect
Active Session"
---
.../cache/EntityCacherDebugResult.java | 24 +++++++++----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java
index 3390ddf2a..442bc6112 100644
--- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java
+++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java
@@ -246,10 +246,7 @@ public class EntityCacherDebugResult {
return;
}
- int originalMapSize = map.size();
-
Iterator> iter = map.entrySet().iterator();
- int i=0;
while ( iter.hasNext() ) {
Map.Entry e = iter.next();
CdmEntityInfo childCei = new CdmEntityInfo(e);
@@ -268,15 +265,22 @@ public class EntityCacherDebugResult {
private void debug(Collection collection,
List alreadyVisitedEntities,
CdmEntityInfo cei) {
- int length = collection.size();
- Object[] result = new Object[length];
Iterator collectionItr = collection.iterator();
while(collectionItr.hasNext()) {
Object obj = collectionItr.next();
- CdmEntityInfo childCei = new CdmEntityInfo(ProxyUtils.deproxy(obj));
- cei.addChild(childCei);
- debugRecursive(obj, alreadyVisitedEntities, childCei);
+ boolean alreadyVisited = false;
+ for (CdmEntityInfo entityInfo: alreadyVisitedEntities) {
+ if(obj.equals(entityInfo.getObject())){
+ alreadyVisited = true;
+ break;
+ }
+ }
+ if(!alreadyVisited){
+ CdmEntityInfo childCei = new CdmEntityInfo(ProxyUtils.deproxy(obj));
+ cei.addChild(childCei);
+ debugRecursive(obj, alreadyVisitedEntities, childCei);
+ }
}
@@ -312,7 +316,6 @@ public class EntityCacherDebugResult {
// retrieve the actual object corresponding to the field.
// this object will be either a CdmBase or a Collection / Map
// with CdmBase as the generic type
- String f = field;
CdmEntityInfo childCei = getDebugCdmBaseTypeFieldValue(cdmEntity, field, alreadyVisitedEntities, cei);
if(!childCei.isProxy()) {
Object object = childCei.getObject();
@@ -356,9 +359,6 @@ public class EntityCacherDebugResult {
o = ProxyUtils.deproxy(o);
CdmBase cdmEntityInSubGraph = null;
- boolean isHibernateProxy = false;
- boolean isPersistentCollection = false;
-
childCei = new CdmEntityInfo(o);
cei.addChild(childCei);
childCei.setField(field);
--
2.34.1