Project

General

Profile

« Previous | Next » 

Revision d783abbf

Added by Patrick Plitzner over 7 years ago

Fix endless loop in entity cache when opening "Inspect Active Session"

View differences:

eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java
246 246
            return;
247 247
        }
248 248

  
249
        int originalMapSize = map.size();
250

  
251 249
        Iterator<Map.Entry<T,T>> iter = map.entrySet().iterator();
252
        int i=0;
253 250
        while ( iter.hasNext() ) {
254 251
            Map.Entry<T,T> e = iter.next();
255 252
            CdmEntityInfo childCei = new CdmEntityInfo(e);
......
268 265
    private <T extends Object> void debug(Collection<T> collection,
269 266
            List<CdmEntityInfo> alreadyVisitedEntities,
270 267
            CdmEntityInfo cei) {
271
        int length = collection.size();
272
        Object[] result = new Object[length];
273 268
        Iterator<T> collectionItr = collection.iterator();
274 269

  
275 270
        while(collectionItr.hasNext()) {
276 271
            Object obj = collectionItr.next();
277
            CdmEntityInfo childCei = new CdmEntityInfo(ProxyUtils.deproxy(obj));
278
            cei.addChild(childCei);
279
            debugRecursive(obj, alreadyVisitedEntities, childCei);
272
            boolean alreadyVisited = false;
273
            for (CdmEntityInfo entityInfo: alreadyVisitedEntities) {
274
                if(obj.equals(entityInfo.getObject())){
275
                    alreadyVisited = true;
276
                    break;
277
                }
278
            }
279
            if(!alreadyVisited){
280
                CdmEntityInfo childCei = new CdmEntityInfo(ProxyUtils.deproxy(obj));
281
                cei.addChild(childCei);
282
                debugRecursive(obj, alreadyVisitedEntities, childCei);
283
            }
280 284

  
281 285
        }
282 286

  
......
312 316
                // retrieve the actual object corresponding to the field.
313 317
                // this object will be either a CdmBase or a Collection / Map
314 318
                // with CdmBase as the generic type
315
                String f = field;
316 319
                CdmEntityInfo childCei = getDebugCdmBaseTypeFieldValue(cdmEntity, field, alreadyVisitedEntities, cei);
317 320
                if(!childCei.isProxy()) {
318 321
                    Object object = childCei.getObject();
......
356 359
            o = ProxyUtils.deproxy(o);
357 360
            CdmBase cdmEntityInSubGraph = null;
358 361

  
359
            boolean isHibernateProxy = false;
360
            boolean isPersistentCollection = false;
361

  
362 362
            childCei = new CdmEntityInfo(o);
363 363
            cei.addChild(childCei);
364 364
            childCei.setField(field);

Also available in: Unified diff