public XATransactionContext<K, V> getCurrentContext() { if (currentXid == null) { return null; } return transactionContextFactory.get(new TransactionId(currentXid)); }
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); }
@Override public boolean containsKey(K key) throws StoreAccessException { checkKey(key); if (getCurrentContext().touched(key)) { return getCurrentContext().newValueHolderOf(key) != null; } ValueHolder<SoftLock<V>> softLockValueHolder = getSoftLockValueHolderFromUnderlyingStore(key); return softLockValueHolder != null && softLockValueHolder.get().getTransactionId() == null && softLockValueHolder.get().getOldValue() != null; }
@Override public Iterator<Cache.Entry<K, ValueHolder<V>>> iterator() { XATransactionContext<K, V> currentContext = getCurrentContext(); Map<K, XAValueHolder<V>> valueHolderMap = transactionContextFactory.listPuts(currentContext.getTransactionId()); return new XAIterator(valueHolderMap, underlyingStore.iterator(), currentContext.getTransactionId()); }
public XAValueHolder(XAValueHolder<V> valueHolder, V value) { super(-1, valueHolder.creationTime(), valueHolder.expirationTime()); this.value = value; this.valueSerialized = null; }
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); }
@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 readResolve() { return new XAValueHolder<>(id, creationTime, lastAccessTime, expirationTime, value, valueSerialized); } }
@Override public Map<K, ValueHolder<V>> bulkCompute(Set<? extends K> keys, Function<Iterable<? extends Map.Entry<? extends K, ? extends V>>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> remappingFunction) throws StoreAccessException { return bulkCompute(keys, remappingFunction, REPLACE_EQUALS_TRUE); }
@Override public XAStore.Provider create(ServiceCreationConfiguration<XAStore.Provider> configuration) { return new XAStore.Provider(); }
private XAValueHolder(long id, long creationTime, long lastAccessTime, long expirationTime, V value, byte[] valueSerialized) { super(id, creationTime, expirationTime); setLastAccessTime(lastAccessTime); this.value = value; this.valueSerialized = valueSerialized; }
@Override public int hashCode() { return serializableXid.hashCode(); }
private void fireInMiddleOf2PC() { for (TwoPcListener twoPcListener : twoPcListeners) { twoPcListener.inMiddleOf2PC(); } }
@Override public void rollback() throws IllegalStateException, SecurityException, SystemException { currentTransaction.rollback(); currentTransaction = null; }
@Override public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException { currentTransaction.commit(); currentTransaction = null; }
@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); }