Package org.hibernate.search.reader.impl

Source Code of org.hibernate.search.reader.impl.ManagedMultiReader

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.reader.impl;

import java.io.IOException;
import java.util.Arrays;

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiReader;
import org.hibernate.search.indexes.spi.ReaderProvider;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;

/**
* Wraps a MultiReader to keep references to owning managers.
*
* @author Emmanuel Bernard
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc.
*/
public class ManagedMultiReader extends MultiReader {

  private static final Log log = LoggerFactory.make();

  final IndexReader[] subReaders;
  final ReaderProvider[] managers;

  public ManagedMultiReader(IndexReader[] subReaders, ReaderProvider[] managers) {
    // If this flag isn't set to true, the MultiReader will increase the usage counter!
    super( subReaders, true );
    this.subReaders = subReaders;
    this.managers = managers;
    assert subReaders.length == managers.length;
  }

  @Override
  protected synchronized void doClose() throws IOException {
    /**
     * Important: we don't really close the sub readers but we delegate to the
     * close method of the managing ReaderProvider, which might reuse the same
     * IndexReader.
     */
    final boolean debugEnabled = log.isDebugEnabled();
    if ( debugEnabled ) {
      log.debugf( "Closing MultiReader: %s", this );
    }
    for ( int i = 0; i < subReaders.length; i++ ) {
      ReaderProvider container = managers[i];
      container.closeIndexReader( subReaders[i] ); // might be virtual
    }
    if ( debugEnabled ) {
      log.trace( "MultiReader closed." );
    }
  }

  @Override
  public String toString() {
    return "CacheableMultiReader [subReaders=" + Arrays.toString( subReaders ) + ", managers=" + Arrays.toString( managers ) + "]";
  }

}
TOP

Related Classes of org.hibernate.search.reader.impl.ManagedMultiReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.