package org.f1x.store; import org.gflogger.GFLog; import org.gflogger.GFLogFactory; public final class SafeMessageStore implements MessageStore { private static final GFLog LOGGER = GFLogFactory.getLog(SafeMessageStore.class); private MessageStore delegate; public SafeMessageStore(MessageStore delegate) { if (delegate == null) throw new NullPointerException("delegate is null"); this.delegate = delegate; } @Override public void put(int seqNum, byte[] message, int offset, int length) { try { delegate.put(seqNum, message, offset, length); } catch (Throwable e) { LOGGER.warn().append("Error putting message in message store: ").append(e).commit(); } } @Override public void clean() { try { delegate.clean(); } catch (Throwable e) { LOGGER.warn().append("Error cleaning message store: ").append(e).commit(); } } @Override public int get(int seqNum, byte[] buffer) { try { return delegate.get(seqNum, buffer); } catch (Throwable e) { LOGGER.warn().append("Error getting message from message store: ").append(e).commit(); return -1; } } @Override public MessageStoreIterator iterator(int fromSeqNum, int toSeqNum) { try { return new SafeMessageStoreIterator(delegate.iterator(fromSeqNum, toSeqNum)); } catch (Throwable e) { LOGGER.warn().append("Error getting message store iterator: ").append(e).commit(); return EmptyMessageStore.EmptyMessageStoreIterator.getInstance(); } } public static final class SafeMessageStoreIterator implements MessageStoreIterator { private final MessageStoreIterator delegate; public SafeMessageStoreIterator(MessageStoreIterator delegate) { if (delegate == null) throw new NullPointerException("delegate is null"); this.delegate = delegate; } @Override public int next(byte[] buffer) { try { return delegate.next(buffer); } catch (Throwable e) { LOGGER.warn().append("Error getting message from message store by iterator: ").append(e).commit(); return -1; } } } }