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 ObjectThe 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 StringEVENTLOG_LOCK_DATE
-
Constructor Summary
Constructors Constructor Description EventLogService()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description EventLogcreateEvent(String topic, String refID)Creates/updates a new event log entry.EventLogcreateEvent(String topic, String refID, Calendar timeout)Creates/updates a new event log entry.EventLogcreateEvent(String topic, String refID, Map<String,List<Object>> data, Calendar timeout)Creates/updates a new event log entry.EventLogcreateEvent(String topic, String refID, ItemCollection document)Creates/updates a new event log entry.EventLogcreateEvent(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 topicsEventLoggetEvent(String id)Returns an detached event log entry by its ID.booleanlock(EventLog _eventLogEntry)This method locks an eventLog entry for processing.voidreleaseDeadLocks(long deadLockInterval, String... topic)This method unlocks eventlog entries which are older than 1 minute.voidremoveEvent(String id)Deletes an existing eventLog by its id.voidremoveEvent(EventLog _eventLog)Deletes an existing eventLog.booleanunlock(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.
-
-