package org.infinispan.query.indexmanager; import java.util.List; import org.hibernate.search.backend.IndexingMonitor; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.indexes.spi.IndexManager; /** * This backend only triggers initialization of a different backend when * incoming indexing operations trigger it, then transfers the incoming * operations to the new backend. * Which backed is being selected depends on the cluster state. * * @author Sanne Grinovero <sanne@hibernate.org> (C) 2014 Red Hat Inc. * @since 7.0 */ public class LazyInitializingBackend implements IndexingBackend { private final LazyInitializableBackend backend; public LazyInitializingBackend(LazyInitializableBackend backend) { this.backend = backend; } @Override public void applyWork(List<LuceneWork> workList, IndexingMonitor monitor, IndexManager indexManager) { backend.lazyInitialize(); backend.getCurrentIndexingBackend().applyWork(workList, monitor, indexManager); } @Override public void applyStreamWork(LuceneWork singleOperation, IndexingMonitor monitor, IndexManager indexManager) { backend.lazyInitialize(); backend.getCurrentIndexingBackend().applyStreamWork(singleOperation, monitor, indexManager); } @Override public boolean isMasterLocal() { // Avoid initializing yet return false; } @Override public void flushAndClose(IndexingBackend replacement) { //no-op: this is essentially stateless } public String toString() { return "LazyInitializingBackend"; } }