/** Returns true if it managed to populate/load the bean from the cache. */ boolean beanCacheLoad( EntityBean bean, EntityBeanIntercept ebi, Object id, PersistenceContext context) { CachedBeanData cacheData = (CachedBeanData) getBeanCache().get(id); if (cacheData == null) { if (beanLog.isTraceEnabled()) { beanLog.trace(" LOAD {}({}) - cache miss", cacheName, id); } return false; } int lazyLoadProperty = ebi.getLazyLoadPropertyIndex(); if (lazyLoadProperty > -1 && !cacheData.isLoaded(ebi.getLazyLoadProperty())) { if (beanLog.isTraceEnabled()) { beanLog.trace( " LOAD {}({}) - cache miss on property({})", cacheName, id, ebi.getLazyLoadProperty()); } return false; } CachedBeanDataToBean.load(desc, bean, cacheData, context); if (beanLog.isDebugEnabled()) { beanLog.debug(" LOAD {}({}) - hit", cacheName, id); } return true; }
/** Return a bean from the bean cache. */ @SuppressWarnings("unchecked") private T beanCacheGetInternal(Object id, Boolean readOnly, PersistenceContext context) { CachedBeanData data = (CachedBeanData) getBeanCache().get(id); if (data == null) { if (beanLog.isTraceEnabled()) { beanLog.trace(" GET {}({}) - cache miss", cacheName, id); } return null; } if (cacheSharableBeans && !Boolean.FALSE.equals(readOnly)) { Object bean = data.getSharableBean(); if (bean != null) { if (beanLog.isTraceEnabled()) { beanLog.trace(" GET {}({}) - hit shared bean", cacheName, id); } if (desc.isReadAuditing()) { desc.readAuditBean("l2", "", bean); } return (T) bean; } } return (T) loadBean(id, readOnly, data, context); }
/** Load the embedded bean checking for inheritance. */ EntityBean embeddedBeanLoad(CachedBeanData data, PersistenceContext context) { String discValue = data.getDiscValue(); if (discValue == null) { return embeddedBeanLoadDirect(data, context); } else { return rootDescriptor(discValue).cacheEmbeddedBeanLoadDirect(data, context); } }
/** Load the entity bean taking into account inheritance. */ private EntityBean loadBean( Object id, Boolean readOnly, CachedBeanData data, PersistenceContext context) { String discValue = data.getDiscValue(); if (discValue == null) { return loadBeanDirect(id, readOnly, data, context); } else { return rootDescriptor(discValue).cacheBeanLoadDirect(id, readOnly, data, context); } }
/** Put the bean into the bean cache. */ void beanCachePutDirect(EntityBean bean) { CachedBeanData beanData = beanExtractData(desc, bean); Object id = desc.getId(bean); if (beanLog.isDebugEnabled()) { beanLog.debug(" PUT {}({}) data:{}", cacheName, id, beanData); } getBeanCache().put(id, beanData); if (naturalKeyProperty != null) { Object naturalKey = beanData.getData(naturalKeyProperty); if (naturalKey != null) { if (natLog.isDebugEnabled()) { natLog.debug(" PUT {}({}, {})", cacheName, naturalKey, id); } naturalKeyCache.get().put(naturalKey, id); } } }
/** Apply changes to the bean cache entry. */ void cacheBeanUpdate( Object id, Map<String, Object> changes, boolean updateNaturalKey, long version) { ServerCache cache = getBeanCache(); CachedBeanData existingData = (CachedBeanData) cache.get(id); if (existingData != null) { long currentVersion = existingData.getVersion(); if (version > 0 && version < currentVersion) { if (beanLog.isDebugEnabled()) { beanLog.debug( " REMOVE {}({}) - version conflict old:{} new:{}", cacheName, id, currentVersion, version); } cache.remove(id); } else { if (version == 0) { version = currentVersion; } CachedBeanData newData = existingData.update(changes, version); if (beanLog.isDebugEnabled()) { beanLog.debug(" UPDATE {}({}) changes:{}", cacheName, id, changes); } cache.put(id, newData); } if (updateNaturalKey) { Object oldKey = existingData.getData(naturalKeyProperty); if (oldKey != null) { if (natLog.isDebugEnabled()) { natLog.debug(".. update {} REMOVE({}) - old key for ({})", cacheName, oldKey, id); } naturalKeyCache.get().remove(oldKey); } } } }