Como foi mencionado, o Artemis tem suporte a eventos e um ciclo de vida tanto para a inserção e a atualização dos dados. O ciclo de vida é gerenciado pela classe WorkFlow que por padrão tem o seguinte fluxo:
firePreEntity: O objeto recebido pelo Artemis.
firePreEntityDataBaseType: Semelhante ao anterior, porém, específico para o tipo de banco de dados, ou seja, cada banco terão seu tipo específico de evento.
firePreAPI: o objeto convertido numa entidade de comunicação.
firePostAPI: A entidade de comunicação enviada como resposta do banco de dados.
firePostEntity: A entidade bean convertida oriunda do firePostAPIAs classes repositórios têm como principal objetivo converter a classe entidade, por exemplo, Person para o Diana, a API de nível de comunicação.
firePostEntityDataBaseType: Semelhante ao anterior, porém, específico para o tipo de banco de dados, ou seja, cada banco terão seu tipo específico de evento.
Para observar esses eventos, basta utilizar o @Observes, recurso oriundo do próprio CDI.
ColumnWorkFlow
@ApplicationScopedpublicclassPersonEvent {privatestaticfinalLogger LOGGER =Logger.getLogger(PersonEvent.class.getName());publicvoidobserver(@ObservesEntityPrePersist event) {LOGGER.info("Event to pre persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityColumnPrePersist event) {LOGGER.info("Event to pre document persistence"+event.getValue()); }publicvoidobserver(@ObservesColumnEntityPrePersist event) {LOGGER.info("Event to pre document entity"+event.getEntity()); }publicvoidobserver(@ObservesColumnEntityPostPersist event) {LOGGER.info("Event to post document entity"+event.getEntity()); }publicvoidobserver(@ObservesEntityPostPersit event) {LOGGER.info("Event to post persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityColumnPostPersist event) {LOGGER.info("Event to post document entity"+event.getValue()); }}
DocumentWorkFlow
@ApplicationScopedpublicclassPersonEvent {privatestaticfinalLogger LOGGER =Logger.getLogger(PersonEvent.class.getName());publicvoidobserver(@ObservesEntityPrePersist event) {LOGGER.info("Event to pre persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityDocumentPrePersist event) {LOGGER.info("Event to pre document persistence"+event.getValue()); }publicvoidobserver(@ObservesDocumentEntityPrePersist event) {LOGGER.info("Event to pre document entity"+event.getEntity()); }publicvoidobserver(@ObservesDocumentEntityPostPersist event) {LOGGER.info("Event to post document entity"+event.getEntity()); }publicvoidobserver(@ObservesEntityPostPersit event) {LOGGER.info("Event to post persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityDocumentPostPersist event) {LOGGER.info("Event to post document entity"+event.getValue()); }}
KeyValueWorkFlow
@ApplicationScopedpublicclassUserEvent {privatestaticfinalLogger LOGGER =Logger.getLogger(UserEvent.class.getName());publicvoidobserver(@ObservesEntityPrePersist event) {LOGGER.info("Event to pre persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityKeyValuePrePersist event) {LOGGER.info("Event to pre document persistence"+event.getValue()); }publicvoidobserver(@ObservesKeyValueEntityPrePersist event) {LOGGER.info("Event to pre document entity"+event.getEntity()); }publicvoidobserver(@ObservesKeyValueEntityPostPersist event) {LOGGER.info("Event to post document entity"+event.getEntity()); }publicvoidobserver(@ObservesEntityPostPersit event) {LOGGER.info("Event to post persistence"+event.getValue()); }publicvoidobserver(@ObservesEntityKeyValuePostPersist event) {LOGGER.info("Event to post document entity"+event.getValue()); }}
Eventos para buscar e deletar informações
Além dos eventos de inserção e atualização, dentro do das APIs de colunas e documentos, o Artemis tem um evento específico para quando uma query de busca ou uma remoção é efetuada.
publicclassColumnQueryEvent {privatestaticfinalLogger LOGGER =Logger.getLogger(ColumnQueryEvent.class.getName());publicvoidobserver(@ObservesColumnQueryExecute event) {ColumnQuery query =event.getQuery();LOGGER.info("Event to pre persistence"+ query); }publicvoidobserver(@ObservesColumnDeleteQueryExecute event) {ColumnDeleteQuery query =event.getQuery();LOGGER.info("Event to pre persistence"+ query); }}publicclassDocumentQueryEvent {privatestaticfinalLogger LOGGER =Logger.getLogger(DocumentQueryEvent.class.getName());publicvoidobserver(@ObservesDocumentQueryExecute event) {DocumentQuery query =event.getQuery();LOGGER.info("Event to pre persistence"+ query); }publicvoidobserver(@ObservesDocumentDeleteQueryExecute event) {DocumentDeleteQuery query =event.getQuery();LOGGER.info("Event to pre persistence"+ query); }}