Class EventLogService
- java.lang.Object
-
- org.imixs.workflow.engine.EventLogService
-
@DeclareRoles({"org.imixs.ACCESSLEVEL.NOACCESS","org.imixs.ACCESSLEVEL.READERACCESS","org.imixs.ACCESSLEVEL.AUTHORACCESS","org.imixs.ACCESSLEVEL.EDITORACCESS","org.imixs.ACCESSLEVEL.MANAGERACCESS"}) @RolesAllowed({"org.imixs.ACCESSLEVEL.NOACCESS","org.imixs.ACCESSLEVEL.READERACCESS","org.imixs.ACCESSLEVEL.AUTHORACCESS","org.imixs.ACCESSLEVEL.EDITORACCESS","org.imixs.ACCESSLEVEL.MANAGERACCESS"}) public class EventLogService extends Object
The EventLogService is a service to create and access an event log .An event that occurs during an update or a processing function within a transaction becomes a fact when the transaction completes successfully. The EventLogService can be used to store this kind of "Change Data Capture" events in a log. An example is the LuceneUpdateService, which should update the index of a document only if the document was successfully written to the database.
The service is bound to the current PersistenceContext and stores a EventLog entity directly in the database to represent an event. These types of events can be queried by clients through the service.
The EventLogService provides a lock/unlock mechanism. An eventLog entry can optional be locked for processing. The topic of the event will be suffixed with '.lock' to indicate that this topic is locked by a running process. If a lock is successful a client can exclusive process this eventLog entry.
The method releaseDeadLocks unlocks eventlog entries which are older than 1 minute. We assume that these events are deadlocks.
- Version:
- 1.0
- Author:
- rsoika
- See Also:
EventLog
,UpdateService
-
-
Field Summary
Fields Modifier and Type Field Description static String
EVENTLOG_LOCK_DATE
-
Constructor Summary
Constructors Constructor Description EventLogService()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description EventLog
createEvent(String topic, String refID)
Creates/updates a new event log entry.EventLog
createEvent(String topic, String refID, Calendar timeout)
Creates/updates a new event log entry.EventLog
createEvent(String topic, String refID, Map<String,List<Object>> data, Calendar timeout)
Creates/updates a new event log entry.EventLog
createEvent(String topic, String refID, ItemCollection document)
Creates/updates a new event log entry.EventLog
createEvent(String topic, String refID, ItemCollection document, Calendar timeout)
Creates/updates a new event log entry.List<EventLog>
findAllEvents(int firstResult, int maxResult)
Returns all event log entriesList<EventLog>
findEventsByRef(int maxCount, String ref, String... topic)
Finds events for one or many given topics assigned to a given document reference ($uniqueId).List<EventLog>
findEventsByTimeout(int maxCount, String... topic)
Finds events for one or many given topics within the current timeout.List<EventLog>
findEventsByTopic(int maxCount, String... topic)
Finds events for one or many given topicsEventLog
getEvent(String id)
Returns an detached event log entry by its ID.boolean
lock(EventLog _eventLogEntry)
This method locks an eventLog entry for processing.void
releaseDeadLocks(long deadLockInterval, String... topic)
This method unlocks eventlog entries which are older than 1 minute.void
removeEvent(String id)
Deletes an existing eventLog by its id.void
removeEvent(EventLog _eventLog)
Deletes an existing eventLog.boolean
unlock(EventLog _eventLogEntry)
This method unlocks an eventLog entry.
-
-
-
Field Detail
-
EVENTLOG_LOCK_DATE
public static final String EVENTLOG_LOCK_DATE
- See Also:
- Constant Field Values
-
-
Method Detail
-
createEvent
public EventLog createEvent(String topic, String refID)
Creates/updates a new event log entry.- Parameters:
refID
- - uniqueid of the document to be assigned to the eventtopic
- - the topic of the event.- Returns:
- - generated event log entry
-
createEvent
public EventLog createEvent(String topic, String refID, Calendar timeout)
Creates/updates a new event log entry.- Parameters:
refID
- - uniqueid of the document to be assigned to the eventtopic
- - the topic of the event.timeout
- - optional timeout calendar object- Returns:
- - generated event log entry
-
createEvent
public EventLog createEvent(String topic, String refID, ItemCollection document)
Creates/updates a new event log entry.- Parameters:
refID
- - uniqueId of the document to be assigned to the eventtopic
- - the topic of the event.document
- - optional document providing a data map- Returns:
- - generated event log entry
-
createEvent
public EventLog createEvent(String topic, String refID, ItemCollection document, Calendar timeout)
Creates/updates a new event log entry.- Parameters:
refID
- - uniqueId of the document to be assigned to the eventtopic
- - the topic of the event.document
- - optional document providing a data maptimeout
- - optional timeout calendar object- Returns:
- - generated event log entry
-
createEvent
public EventLog createEvent(String topic, String refID, Map<String,List<Object>> data, Calendar timeout)
Creates/updates a new event log entry.- Parameters:
refID
- - uniqueId of the document to be assigned to the eventtopic
- - the topic of the event.data
- - optional data map- Returns:
- - generated event log entry
-
findEventsByTopic
public List<EventLog> findEventsByTopic(int maxCount, String... topic)
Finds events for one or many given topics- Parameters:
maxCount
- - maximum count of events to be returnedtopic
- - list of topics- Returns:
- - list of eventLogEntries
-
findEventsByTimeout
public List<EventLog> findEventsByTimeout(int maxCount, String... topic)
Finds events for one or many given topics within the current timeout.The attribute 'timeout' is optional. If the timeout is set to a future point of time, the event will be ignored by this method.
- Parameters:
maxCount
- - maximum count of events to be returnedtopic
- - list of topics- Returns:
- - list of eventLogEntries
-
findEventsByRef
public List<EventLog> findEventsByRef(int maxCount, String ref, String... topic)
Finds events for one or many given topics assigned to a given document reference ($uniqueId). The method returns an empty list if no event log entries exist of the given refId,- Parameters:
maxCount
- - maximum count of events to be returnedref
- - a reference ID for an assigned Document or Workitem instancetopic
- - list of topics- Returns:
- - list of eventLogEntries
-
findAllEvents
public List<EventLog> findAllEvents(int firstResult, int maxResult)
Returns all event log entries- Parameters:
firstResult
- - first resultmaxResult
- - maximum count of events to be returned- Returns:
- - list of eventLogEntries
-
removeEvent
public void removeEvent(EventLog _eventLog)
Deletes an existing eventLog. The method catches jakarta.persistence.OptimisticLockException as this may occur during parallel requests.- Parameters:
eventLog
-
-
removeEvent
public void removeEvent(String id)
Deletes an existing eventLog by its id. The method catches jakarta.persistence.OptimisticLockException as this may occur during parallel requests.- Parameters:
eventLog
-
-
getEvent
public EventLog getEvent(String id)
Returns an detached event log entry by its ID.- Parameters:
id
- - id of the eventLog Entry- Returns:
- detached eventLog entry or null if not found
-
lock
public boolean lock(EventLog _eventLogEntry)
This method locks an eventLog entry for processing. The topic will be suffixed with '.lock' to indicate that this topic is locked by a process. If a lock is successful a client can exclusive process this eventLog entry.The method adds a item 'eventlog.lock.date' with a timestamp. This timestamp is used by the method 'autoUnlock' to release locked entries.
- Parameters:
eventLogEntry
-- Returns:
- - true if lock was successful
-
unlock
public boolean unlock(EventLog _eventLogEntry)
This method unlocks an eventLog entry. The topic suffix '.lock' will be removed.- Parameters:
eventLogEntry
-- Returns:
- - true if unlock was successful
-
releaseDeadLocks
public void releaseDeadLocks(long deadLockInterval, String... topic)
This method unlocks eventlog entries which are older than 1 minute. We assume that these events are deadlocks.
-
-