package io.ebeaninternal.server.cache;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

Data held in the bean cache for cached beans.
/** * Data held in the bean cache for cached beans. */
public class CachedBeanData implements Externalizable { private long whenCreated; private long version; private String discValue; private Map<String, Object> data;
The sharable bean is effectively transient (near cache only).
/** * The sharable bean is effectively transient (near cache only). */
private transient Object sharableBean;
Construct from a loaded bean.
/** * Construct from a loaded bean. */
public CachedBeanData(Object sharableBean, String discValue, Map<String, Object> data, long version) { this.whenCreated = System.currentTimeMillis(); this.sharableBean = sharableBean; this.discValue = discValue; this.data = data; this.version = version; }
Construct from serialisation.
/** * Construct from serialisation. */
public CachedBeanData() { } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeLong(version); out.writeLong(whenCreated); boolean hasDisc = discValue != null; out.writeBoolean(hasDisc); if (hasDisc) { out.writeUTF(discValue); } out.writeInt(data.size()); for (Map.Entry<String, Object> entry : data.entrySet()) { out.writeUTF(entry.getKey()); out.writeObject(entry.getValue()); } } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { version = in.readLong(); whenCreated = in.readLong(); if (in.readBoolean()) { discValue = in.readUTF(); } data = new LinkedHashMap<>(); int count = in.readInt(); for (int i = 0; i < count; i++) { String key = in.readUTF(); Object val = in.readObject(); data.put(key, val); } } @Override public String toString() { return data.toString(); }
Create and return a new version of CachedBeanData based on this entry applying the given changes.
/** * Create and return a new version of CachedBeanData based on this * entry applying the given changes. */
public CachedBeanData update(Map<String, Object> changes, long version) { Map<String, Object> copy = new HashMap<>(); copy.putAll(data); copy.putAll(changes); return new CachedBeanData(null, discValue, copy, version); }
Return when the cached data was created.
/** * Return when the cached data was created. */
public long getWhenCreated() { return whenCreated; }
Return the version value.
/** * Return the version value. */
public long getVersion() { return version; }
Return the raw discriminator value.
/** * Return the raw discriminator value. */
public String getDiscValue() { return discValue; }
Return a sharable (immutable read only) bean. Near cache only use.
/** * Return a sharable (immutable read only) bean. Near cache only use. */
public Object getSharableBean() { return sharableBean; }
Return true if the property is held.
/** * Return true if the property is held. */
public boolean isLoaded(String propertyName) { return data.containsKey(propertyName); }
Return the value for a given property name.
/** * Return the value for a given property name. */
public Object getData(String propertyName) { return data.get(propertyName); }
Return all the property data.
/** * Return all the property data. */
public Map<String, Object> getData() { return data; } }