From: Patrick Plitzner Date: Tue, 16 Aug 2016 09:56:39 +0000 (+0200) Subject: Fix endless loop in entity cache when opening "Inspect Active Session" X-Git-Tag: 4.3.0^2~75 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/d783abbf27f87d7bef35f656033c4d4d20a1d727?hp=22244d5fb09cf2d47ad8712171777b9e65b93372;ds=inline Fix endless loop in entity cache when opening "Inspect Active Session" --- 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);