Package zh.solr.se.indexer.solrproxy

Source Code of zh.solr.se.indexer.solrproxy.LocalListingSolrServerFactory

package zh.solr.se.indexer.solrproxy;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;

import zh.solr.se.indexer.util.ConfigFactory;
import zh.solr.se.indexer.util.ConfigProperties;


/**
* Factory class to fetch a LocalSolrServer This was created because I had
* issues when running via hadoop in that using the environment settings to set
* the home and config were causing an issue and I didn't have time to
* investigate further.
*
*/

public class LocalListingSolrServerFactory {
  private static LocalListingSolrServerFactory instance = new LocalListingSolrServerFactory();
  private CoreContainer coreContainer;
  private final Map<String, LocalSolrServer> serverMap = new HashMap<String, LocalSolrServer>();

  public static LocalListingSolrServerFactory getInstance() {
    return instance;
  }

  private LocalListingSolrServerFactory() {
    final Logger logger = Logger.getLogger("org.apache");
    logger.setLevel(Level.ALL);

    // set the Solr home
    final ConfigProperties config = ConfigFactory.getInstance().getConfigProperties(ConfigFactory.SOLR_CONFIG_PATH);
    final String solrHome = config.getProperty(ConfigProperties.CONFIG_NAME_SOLR_HOME, "/var/solr/solr");
    System.setProperty("solr.solr.home", solrHome);

    // a workaround to keep the data import handlers happy since they use a relative path
    final String configFile = "/var/solr/solr/core-local/conf/data-config.xml";
    System.setProperty("data.import.config", configFile);

    // initialize the core container
    final CoreContainer.Initializer initializer = new CoreContainer.Initializer();
    try {
      coreContainer = initializer.initialize();
    } catch (final Exception e) {
      e.printStackTrace();
      throw new NullPointerException("Could not initialize Solr cores." +
          "Solr config might not been installed correctly. Error: " + e.getMessage());
    }

  }

  synchronized public LocalSolrServer getLocalSolrServer(String coreName) {
    // check for null core name, in case single core
    if (coreName == null) {
      coreName = "";
    }

    // check if the server instance already exists
    LocalSolrServer localServer = serverMap.get(coreName);
    if (localServer == null) {
      localServer = createLocalSolrServer(coreName);
      if (localServer != null) {
        serverMap.put(coreName, localServer);
      }
    }

    return localServer;
  }

  private LocalSolrServer createLocalSolrServer(final String coreName) {
    final SolrCore solrCore = coreContainer.getCore(coreName);
    final EmbeddedSolrServer solrServer = new EmbeddedSolrServer(coreContainer, coreName);

    return new LocalSolrServer(solrServer, solrCore);
  }
}
TOP

Related Classes of zh.solr.se.indexer.solrproxy.LocalListingSolrServerFactory

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.