Class DefaultJournalService
- java.lang.Object
-
- com.atlassian.confluence.impl.journal.DefaultJournalService
-
- All Implemented Interfaces:
JournalService
public class DefaultJournalService extends Object implements JournalService
This is the default implementation ofJournalService
.- Since:
- 5.6
-
-
Constructor Summary
Constructors Constructor Description DefaultJournalService(JournalManager journalManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
countEntries(@NonNull JournalIdentifier journalId)
Counts the number of entries in a journal.long
enqueue(@NonNull JournalEntry entry)
Adds the given entry to a journal.Iterable<JournalEntry>
peek(@NonNull JournalIdentifier journalId, int maxEntries)
Return a copy of journal entries that are waiting to be processed.<V> V
processEntries(@NonNull JournalIdentifier journalId, int maxEntries, @NonNull com.google.common.base.Function<Iterable<JournalEntry>,EntryProcessorResult<V>> entryProcessor)
Processes journal entries that were added since the last time this method was called for this journal on this cluster node.void
reset(@NonNull JournalIdentifier journalId)
Resets the state of the journal so that all entries currently in the journal will be skipped.void
waitForRecentEntriesToBecomeVisible()
Waits long enough to ensure that entries added before calling this method will be available to subsequent call toJournalService.processNewEntries(JournalIdentifier, int, Function)
.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.atlassian.confluence.api.service.journal.JournalService
processNewEntries
-
-
-
-
Constructor Detail
-
DefaultJournalService
public DefaultJournalService(JournalManager journalManager)
-
-
Method Detail
-
enqueue
public long enqueue(@NonNull JournalEntry entry) throws ServiceException
Description copied from interface:JournalService
Adds the given entry to a journal.New journal is automatically created if a journal with the given name does not exists.
- Specified by:
enqueue
in interfaceJournalService
- Parameters:
entry
- entry to persist- Returns:
- id generated for the entry
- Throws:
ServiceException
- if the entry could not be persisted
-
processEntries
public <V> V processEntries(@NonNull JournalIdentifier journalId, int maxEntries, @NonNull com.google.common.base.Function<Iterable<JournalEntry>,EntryProcessorResult<V>> entryProcessor) throws ServiceException
Description copied from interface:JournalService
Processes journal entries that were added since the last time this method was called for this journal on this cluster node.This method does not return entries that were added immediately before calling this method. Use
JournalService.waitForRecentEntriesToBecomeVisible()
for ensuring these entries will be included.This method can miss some entries due to identifier assignment and entry insertion not being an atomic operation. The risk of missed entries can be reduced by creating new entries as close to transaction commit as possible.
If entryProcessor throws an exception, the same entries will be returned again when this method is next called for this journal on this cluster node.
New journal is automatically created if a journal with the given name does not exists.
- Specified by:
processEntries
in interfaceJournalService
- Parameters:
journalId
- only entries with this journal id will be returnedmaxEntries
- maximum number of entries to processentryProcessor
- function that will process entries that were added since the last time- Returns:
- result of entryProcessor
- Throws:
ServiceException
- if entries could not be fetched or the journal state could not be saved
-
waitForRecentEntriesToBecomeVisible
public void waitForRecentEntriesToBecomeVisible() throws InterruptedException
Description copied from interface:JournalService
Waits long enough to ensure that entries added before calling this method will be available to subsequent call toJournalService.processNewEntries(JournalIdentifier, int, Function)
.- Specified by:
waitForRecentEntriesToBecomeVisible
in interfaceJournalService
- Throws:
InterruptedException
- if the thread got interrupted
-
peek
public Iterable<JournalEntry> peek(@NonNull JournalIdentifier journalId, int maxEntries) throws ServiceException
Description copied from interface:JournalService
Return a copy of journal entries that are waiting to be processed.- Specified by:
peek
in interfaceJournalService
- Parameters:
journalId
- only entries with this journal id will be returnedmaxEntries
- maximum number of entries to return- Returns:
- a copy of journal entries that are waiting to be processed
- Throws:
ServiceException
- if entries could not be fetched
-
reset
public void reset(@NonNull JournalIdentifier journalId) throws ServiceException
Description copied from interface:JournalService
Resets the state of the journal so that all entries currently in the journal will be skipped.- Specified by:
reset
in interfaceJournalService
- Parameters:
journalId
- identifier of the journal to reset- Throws:
ServiceException
- if the reset fails
-
countEntries
public int countEntries(@NonNull JournalIdentifier journalId) throws ServiceException
Description copied from interface:JournalService
Counts the number of entries in a journal.- Specified by:
countEntries
in interfaceJournalService
- Parameters:
journalId
- identifier of the journal- Throws:
ServiceException
- if entries could not be counted
-
-