@Test public void testSerialization() throws Exception { long now = System.currentTimeMillis(); XAValueHolder<String> valueHolder = new XAValueHolder<>("value", now - 1000); valueHolder.accessed(now, Duration.ofSeconds(100)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(baos); outputStream.writeObject(valueHolder); outputStream.close(); @SuppressWarnings("unchecked") XAValueHolder<String> result = (XAValueHolder<String>) new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject(); assertThat(result.getId(), is(valueHolder.getId())); assertThat(result.creationTime(), is(valueHolder.creationTime())); assertThat(result.lastAccessTime(), is(valueHolder.lastAccessTime())); assertThat(result.expirationTime(), is(valueHolder.expirationTime())); assertThat(result.get(), is(valueHolder.get())); } }
protected SoftLock<V> copyAfterDeserialization(Serializer<V> valueSerializer, SoftLock<V> serializedSoftLock) throws ClassNotFoundException { V oldValue = null; if (serializedSoftLock.oldValueSerialized != null) { oldValue = valueSerializer.read(ByteBuffer.wrap(serializedSoftLock.oldValueSerialized)); } XAValueHolder<V> newValueHolder = null; if (this.newValueHolder != null) { newValueHolder = this.newValueHolder.copyAfterDeserialization(valueSerializer); } return new SoftLock<>(transactionId, oldValue, newValueHolder); }
protected SoftLock<V> copyForSerialization(Serializer<V> valueSerializer) { ByteBuffer serializedOldValue = null; if (oldValue != null) { serializedOldValue = valueSerializer.serialize(oldValue); } XAValueHolder<V> serializedXaValueHolder = null; if (newValueHolder != null) { serializedXaValueHolder = newValueHolder.copyForSerialization(valueSerializer); } return new SoftLock<>(transactionId, serializedOldValue, serializedXaValueHolder); }
public XAValueHolder(XAValueHolder<V> valueHolder, V value) { super(-1, valueHolder.creationTime(), valueHolder.expirationTime()); this.value = value; this.valueSerialized = null; }
private Object writeReplace() { return new SerializedXAValueHolder<>(getId(), creationTime(), lastAccessTime(), expirationTime(), get(), valueSerialized); }
@Override public SoftLock<T> copyForWrite(SoftLock<T> obj) { T oldValue = valueCopier.copyForWrite(obj.getOldValue()); XAValueHolder<T> valueHolder = obj.getNewValueHolder(); XAValueHolder<T> newValueHolder = valueHolder == null ? null : new XAValueHolder<>(valueHolder, valueCopier.copyForWrite(valueHolder .get())); return new SoftLock<>(obj.getTransactionId(), oldValue, newValueHolder); }
private Object readResolve() { return new XAValueHolder<>(id, creationTime, lastAccessTime, expirationTime, value, valueSerialized); } }
public V newValueOf(K key) { Command<V> command = commands.get(key); XAValueHolder<V> valueHolder = command == null ? null : command.getNewValueHolder(); return valueHolder == null ? null : valueHolder.get(); }
@Override public int hashCode() { int result = transactionId != null ? transactionId.hashCode() : 0; result = 31 * result + (oldValue != null ? oldValue.hashCode() : 0); result = 31 * result + (newValueHolder != null ? newValueHolder.hashCode() : 0); return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SoftLock<?> softLock = (SoftLock<?>) o; if (transactionId != null ? !transactionId.equals(softLock.transactionId) : softLock.transactionId != null) return false; if (oldValue != null ? !oldValue.equals(softLock.oldValue) : softLock.oldValue != null) return false; return !(newValueHolder != null ? !newValueHolder.equals(softLock.newValueHolder) : softLock.newValueHolder != null); }
private Object writeReplace() { return new SerializedXAValueHolder<>(getId(), creationTime(NATIVE_TIME_UNIT), lastAccessTime(NATIVE_TIME_UNIT), expirationTime(NATIVE_TIME_UNIT), get(), valueSerialized); }
@Override public SoftLock<T> copyForRead(SoftLock<T> obj) { T oldValue = valueCopier.copyForRead(obj.getOldValue()); XAValueHolder<T> valueHolder = obj.getNewValueHolder(); XAValueHolder<T> newValueHolder = valueHolder == null ? null : new XAValueHolder<>(valueHolder, valueCopier.copyForRead(valueHolder .get())); return new SoftLock<>(obj.getTransactionId(), oldValue, newValueHolder); }
protected XAValueHolder<V> copyForSerialization(Serializer<V> valueSerializer) { ByteBuffer serializedValue = valueSerializer.serialize(value); return new XAValueHolder<>(this, serializedValue); }
private XAValueHolder(XAValueHolder<V> valueHolder, ByteBuffer serializedValue) { super(-1, valueHolder.creationTime(), valueHolder.expirationTime()); this.value = null; this.valueSerialized = new byte[serializedValue.remaining()]; serializedValue.get(this.valueSerialized); }
.getNewValueHolder().get(); Duration duration; try {
@Override public int hashCode() { int result = transactionId != null ? transactionId.hashCode() : 0; result = 31 * result + (oldValue != null ? oldValue.hashCode() : 0); result = 31 * result + (newValueHolder != null ? newValueHolder.hashCode() : 0); return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SoftLock<?> softLock = (SoftLock<?>) o; if (transactionId != null ? !transactionId.equals(softLock.transactionId) : softLock.transactionId != null) return false; if (oldValue != null ? !oldValue.equals(softLock.oldValue) : softLock.oldValue != null) return false; return !(newValueHolder != null ? !newValueHolder.equals(softLock.newValueHolder) : softLock.newValueHolder != null); }
return new XAValueHolder<>(currentContext.oldValueOf(key), timeSource.getTimeMillis()); V computed = mappingFunction.apply(key); if (computed != null) { xaValueHolder = new XAValueHolder<>(computed, timeSource.getTimeMillis()); currentContext.addCommand(key, new StorePutCommand<>(null, xaValueHolder)); } else { xaValueHolder = new XAValueHolder<>(softLockValueHolder, softLockValueHolder.get().getNewValueHolder().get()); } else { if (updated) { xaValueHolder = currentContext.newValueHolderOf(key); } else { xaValueHolder = new XAValueHolder<>(softLockValueHolder, softLockValueHolder.get().getOldValue());
protected XAValueHolder<V> copyAfterDeserialization(Serializer<V> valueSerializer) throws ClassNotFoundException { return new XAValueHolder<>(this, valueSerializer.read(ByteBuffer.wrap(valueSerialized))); }
public XAValueHolder(XAValueHolder<V> valueHolder, V value) { super(-1, valueHolder.creationTime(TimeUnit.MILLISECONDS), valueHolder.expirationTime(TimeUnit.MILLISECONDS)); this.value = value; this.valueSerialized = null; }