Class AsyncOmIndexer

java.lang.Object
com.easydesk.lucene.om.AsyncOmIndexer
All Implemented Interfaces:
ObjectIndexer

@Component public class AsyncOmIndexer extends Object implements ObjectIndexer
OM 저장 시점에 받은 객체를 모아 두었다가 주기적으로 (easydesk.lucene.om.index-delay, 기본 1초) index 한다.

기존 lucene.AttributeValueListener 를 대체한다. 바로 index 하지 않는 이유:

  • 새로운 Item 은 ItemActivitySet 이 저장되기 전에 AttributeValue 가 먼저 저장되므로 그 시점에는 생성자/생성일을 구할 수 없다.
  • OM 저장(DB transaction) 을 index 오류나 지연으로 방해하지 않는다.
같은 객체가 여러 번 저장되어도 한 번만 index 한다. 실패한 객체는 다음 주기에 3 번까지 다시 시도한다.

주의 : DB transaction 이 rollback 되어도 이미 queue 에 들어간 객체는 index 된다. (다음 저장 시 다시 교체된다.)

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    실패 시 재시도 횟수
  • Constructor Summary

    Constructors
    Constructor
    Description
    AsyncOmIndexer(OmIndexer omIndexer, boolean enabled)
    Creates a new AsyncOmIndexer.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    종료 전에 남아 있는 객체를 index 한다
    int
    queue 에 있는 객체를 index 한다.
    void
    OM 이 생성/변경/삭제(removed) 되었음을 알린다.
    int
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MAX_RETRY

      public static final int MAX_RETRY
      실패 시 재시도 횟수
      See Also:
  • Constructor Details

    • AsyncOmIndexer

      public AsyncOmIndexer(OmIndexer omIndexer, @Value("${easydesk.lucene.om.index-enabled:true}") boolean enabled)
      Creates a new AsyncOmIndexer.
      Parameters:
      omIndexer - 실제 index 를 수행한다.
      enabled - easydesk.lucene.om.index-enabled (기본 true), false 이면 아무것도 하지 않는다.
  • Method Details

    • index

      public void index(Object om)
      Description copied from interface: ObjectIndexer
      OM 이 생성/변경/삭제(removed) 되었음을 알린다. 구현에 따라 즉시 또는 나중에 index 된다.
      Specified by:
      index in interface ObjectIndexer
      Parameters:
      om - 도메인 객체
    • pending

      public int pending()
      Returns:
      queue 에 남아 있는 객체 수
    • flush

      @Scheduled(fixedDelayString="${easydesk.lucene.om.index-delay:1000}", initialDelayString="${easydesk.lucene.om.index-delay:1000}") public int flush()
      queue 에 있는 객체를 index 한다.
      Returns:
      index 에 성공한 객체 수
    • close

      @PreDestroy public void close()
      종료 전에 남아 있는 객체를 index 한다. (LuceneSearchService 보다 먼저 종료된다.)