zoukankan      html  css  js  c++  java
  • solr dataimport 数据导入源码分析(四)

    我们查看DocBuilder类的源码发现,并不是直接持有对SqlEntityProcessor类的引用,而是另外一个包装类EntityProcessorWrapper,EntityProcessorWrapper直接继承自抽象类EntityProcessor,而不是继承自中间的EntityProcessorBase类,简要类图如下

     包装类额外添加了缓存处理以及格式转换等功能,然后调用SqlEntityProcessor相应方法进行处理,相当于SqlEntityProcessor的代理类,共同继承自抽象类EntityProcessor(SqlEntityProcessor 是通过EntityProcessorBase 间接继承自EntityProcessor)

     EntityProcessorWrapper类的简要代码如下

    public class EntityProcessorWrapper extends EntityProcessor {
      private static final Logger log = LoggerFactory.getLogger(EntityProcessorWrapper.class);

      EntityProcessor delegate;
      private DocBuilder docBuilder;

      String onError;
      Context context;
      protected VariableResolverImpl resolver;
      String entityName;

      protected List<Transformer> transformers;

      protected List<Map<String, Object>> rowcache;

      public EntityProcessorWrapper(EntityProcessor delegate, DocBuilder docBuilder) {
        this.delegate = delegate;
        this.docBuilder = docBuilder;
      }

      @Override
      public void init(Context context) {

        delegate.init(context);

      }
      
      protected Map<String, Object> getFromRowCache() {
        if (rowcache.isEmpty()){
          return null;
        }
        return rowcache.remove(0);
      }

      @Override
      public Map<String, Object> nextRow() {
        pullRow();
      }
      

      protected Map<String,Object> pullRow() {
        Map<String,Object> arow = null;
        try {
          arow = delegate.nextRow();
        } catch (Exception e) {
          if (ABORT.equals(onError)) {
            wrapAndThrow(SEVERE, e);
          } else {
            // SKIP is not really possible. If this calls the nextRow() again the
            
    // Entityprocessor would be in an inconistent state
            log.error("Exception in entity : " + entityName, e);
            return null;
          }
        }
        log.debug("arow : {}", arow);
        return arow;
      }

      @Override
      public Map<String, Object> nextModifiedRowKey() {
        Map<String, Object> row = delegate.nextModifiedRowKey();
        row = applyTransformer(row);
        rowcache = null;
        return row;
      }

      @Override
      public Map<String, Object> nextDeletedRowKey() {
        Map<String, Object> row = delegate.nextDeletedRowKey();
        row = applyTransformer(row);
        rowcache = null;
        return row;
      }

      @Override
      public Map<String, Object> nextModifiedParentRowKey() {
        return delegate.nextModifiedParentRowKey();
      }

      @Override
      public void destroy() {
        delegate.destroy();
      }
      

      @Override
      public void close() {
        delegate.close();
      }

  • 相关阅读:
    OS-lab4
    OS-lab3
    OS-lab2
    OS-lab1
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    HTTP_POST
    实习日志1(2020.7.27-2020.9.31)
    Web app ------ 从Servlet读取Json数据并显示,生成历史数据曲线图
  • 原文地址:https://www.cnblogs.com/chenying99/p/2677764.html
Copyright © 2011-2022 走看看