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