use of javax.cache.integration.CacheWriterException in project redisson by redisson.
the class JCache method getAndPut.
@Override
public V getAndPut(K key, V value) {
checkNotClosed();
if (key == null) {
throw new NullPointerException();
}
if (value == null) {
throw new NullPointerException();
}
long startTime = currentNanoTime();
if (config.isWriteThrough()) {
RLock lock = getLock(key);
lock.lock(30, TimeUnit.MINUTES);
try {
List<Object> result = getAndPutValueLocked(key, value);
if (result.isEmpty()) {
cacheManager.getStatBean(this).addPuts(1);
cacheManager.getStatBean(this).addMisses(1);
cacheManager.getStatBean(this).addGetTime(currentNanoTime() - startTime);
cacheManager.getStatBean(this).addPutTime(currentNanoTime() - startTime);
return null;
}
Long added = (Long) result.get(0);
if (added == null) {
cacheManager.getStatBean(this).addPuts(1);
cacheManager.getStatBean(this).addHits(1);
cacheManager.getStatBean(this).addGetTime(currentNanoTime() - startTime);
cacheManager.getStatBean(this).addPutTime(currentNanoTime() - startTime);
return (V) result.get(1);
}
if (Long.valueOf(1).equals(added)) {
try {
cacheWriter.write(new JCacheEntry<K, V>(key, value));
} catch (CacheWriterException e) {
removeValues(key);
throw e;
} catch (Exception e) {
removeValues(key);
throw new CacheWriterException(e);
}
} else {
try {
cacheWriter.delete(key);
} catch (CacheWriterException e) {
if (result.size() == 4 && result.get(1) != null) {
putValue(key, result.get(1));
}
throw e;
} catch (Exception e) {
if (result.size() == 4 && result.get(1) != null) {
putValue(key, result.get(1));
}
throw new CacheWriterException(e);
}
}
return getAndPutResult(startTime, result);
} finally {
lock.unlock();
}
} else {
RLock lock = getLockedLock(key);
try {
List<Object> result = getAndPutValueLocked(key, value);
return getAndPutResult(startTime, result);
} finally {
lock.unlock();
}
}
}
use of javax.cache.integration.CacheWriterException in project redisson by redisson.
the class JCache method getAndRemove.
@Override
public V getAndRemove(K key) {
checkNotClosed();
if (key == null) {
throw new NullPointerException();
}
long startTime = currentNanoTime();
if (config.isWriteThrough()) {
RLock lock = getLock(key);
lock.lock(30, TimeUnit.MINUTES);
try {
Object value = getAndRemoveValue(key);
if (value != null) {
cacheManager.getStatBean(this).addHits(1);
cacheManager.getStatBean(this).addRemovals(1);
} else {
cacheManager.getStatBean(this).addMisses(1);
}
try {
cacheWriter.delete(key);
} catch (CacheWriterException e) {
if (value != null) {
putValue(key, value);
}
throw e;
} catch (Exception e) {
if (value != null) {
putValue(key, value);
}
throw new CacheWriterException(e);
}
cacheManager.getStatBean(this).addGetTime(currentNanoTime() - startTime);
cacheManager.getStatBean(this).addRemoveTime(currentNanoTime() - startTime);
return (V) value;
} finally {
lock.unlock();
}
} else {
V value = getAndRemoveValue(key);
if (value != null) {
cacheManager.getStatBean(this).addHits(1);
cacheManager.getStatBean(this).addRemovals(1);
} else {
cacheManager.getStatBean(this).addMisses(1);
}
cacheManager.getStatBean(this).addGetTime(currentNanoTime() - startTime);
cacheManager.getStatBean(this).addRemoveTime(currentNanoTime() - startTime);
return value;
}
}
use of javax.cache.integration.CacheWriterException in project redisson by redisson.
the class JCache method remove.
@Override
public boolean remove(K key, V value) {
checkNotClosed();
if (key == null) {
throw new NullPointerException();
}
if (value == null) {
throw new NullPointerException();
}
long startTime = currentNanoTime();
boolean result;
if (config.isWriteThrough()) {
RLock lock = getLock(key);
lock.lock(30, TimeUnit.MINUTES);
try {
result = removeValueLocked(key, value);
if (result) {
try {
cacheWriter.delete(key);
} catch (CacheWriterException e) {
putValue(key, value);
throw e;
} catch (Exception e) {
putValue(key, value);
throw new CacheWriterException(e);
}
cacheManager.getStatBean(this).addHits(1);
cacheManager.getStatBean(this).addRemovals(1);
cacheManager.getStatBean(this).addRemoveTime(currentNanoTime() - startTime);
return true;
} else {
cacheManager.getStatBean(this).addMisses(1);
cacheManager.getStatBean(this).addRemoveTime(currentNanoTime() - startTime);
return false;
}
} finally {
lock.unlock();
}
} else {
RLock lock = getLockedLock(key);
try {
result = removeValueLocked(key, value);
if (result) {
cacheManager.getStatBean(this).addHits(1);
cacheManager.getStatBean(this).addRemovals(1);
} else {
cacheManager.getStatBean(this).addMisses(1);
}
cacheManager.getStatBean(this).addRemoveTime(currentNanoTime() - startTime);
return result;
} finally {
lock.unlock();
}
}
}
use of javax.cache.integration.CacheWriterException in project redisson by redisson.
the class JCache method putAll.
@Override
public void putAll(Map<? extends K, ? extends V> map) {
checkNotClosed();
Map<K, V> deletedKeys = new HashMap<K, V>();
Map<K, Cache.Entry<? extends K, ? extends V>> addedEntries = new HashMap<K, Cache.Entry<? extends K, ? extends V>>();
for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
K key = entry.getKey();
if (key == null) {
throw new NullPointerException();
}
V value = entry.getValue();
if (value == null) {
throw new NullPointerException();
}
}
for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
long startTime = currentNanoTime();
if (config.isWriteThrough()) {
RLock lock = getLock(key);
lock.lock(30, TimeUnit.MINUTES);
List<Object> result = getAndPutValue(key, value);
if (result.isEmpty()) {
cacheManager.getStatBean(this).addPuts(1);
cacheManager.getStatBean(this).addPutTime(currentNanoTime() - startTime);
continue;
}
Long added = (Long) result.get(0);
if (added == null) {
cacheManager.getStatBean(this).addPuts(1);
cacheManager.getStatBean(this).addPutTime(currentNanoTime() - startTime);
continue;
}
if (Long.valueOf(1).equals(added)) {
addedEntries.put(key, new JCacheEntry<K, V>(key, value));
} else {
V val = null;
if (result.size() == 4) {
val = (V) result.get(1);
}
deletedKeys.put(key, val);
}
cacheManager.getStatBean(this).addPuts(1);
waitSync(result);
} else {
boolean result = putValue(key, value);
if (result) {
cacheManager.getStatBean(this).addPuts(1);
}
}
cacheManager.getStatBean(this).addPutTime(currentNanoTime() - startTime);
}
if (config.isWriteThrough()) {
try {
try {
cacheWriter.writeAll(addedEntries.values());
} catch (CacheWriterException e) {
removeValues(addedEntries.keySet().toArray());
throw e;
} catch (Exception e) {
removeValues(addedEntries.keySet().toArray());
throw new CacheWriterException(e);
}
try {
cacheWriter.deleteAll(deletedKeys.keySet());
} catch (CacheWriterException e) {
for (Map.Entry<K, V> deletedEntry : deletedKeys.entrySet()) {
if (deletedEntry.getValue() != null) {
putValue(deletedEntry.getKey(), deletedEntry.getValue());
}
}
throw e;
} catch (Exception e) {
for (Map.Entry<K, V> deletedEntry : deletedKeys.entrySet()) {
if (deletedEntry.getValue() != null) {
putValue(deletedEntry.getKey(), deletedEntry.getValue());
}
}
throw new CacheWriterException(e);
}
} finally {
for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
getLock(entry.getKey()).unlock();
}
}
}
}
use of javax.cache.integration.CacheWriterException in project ignite by apache.
the class CacheHibernatePersonStore method delete.
/** {@inheritDoc} */
@SuppressWarnings({ "JpaQueryApiInspection" })
@Override
public void delete(Object key) {
System.out.println(">>> Store delete [key=" + key + ']');
Session hibSes = ses.attachment();
try {
hibSes.createQuery("delete " + Person.class.getSimpleName() + " where key = :key").setParameter("key", key).executeUpdate();
} catch (HibernateException e) {
throw new CacheWriterException("Failed to remove value from cache store [key=" + key + ']', e);
}
}
Aggregations