SOLR-166 - JNDI solr.home code refactoring

git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@509406 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris M. Hostetter 2007-02-20 01:38:26 +00:00
parent 5ddfe531ed
commit cacf143d65
3 changed files with 45 additions and 28 deletions

View File

@ -88,7 +88,7 @@ New Features
8. SOLR-104: Support for "Update Plugins" -- RequestHandlers that want
access to streams of data for doing updates. ContentStreams can come
from the raw POST body, multi-part form data, or remote URLs.
Included in this change is a new SlrDispatchFilter that allows
Included in this change is a new SolrDispatchFilter that allows
RequestHandlers registered with names that begin with a "/" to be
accessed using a URL structure based on that name.
(Ryan McKinley via hossman)
@ -140,6 +140,14 @@ Bug Fixes
4. SOLR-145: Fix for bug introduced in SOLR-104 where some Exceptions
were being ignored by all "out of the box" RequestHandlers. (hossman)
5. SOLR-166: JNDI solr.home code refactoring. SOLR-104 moved
some JNDI related code to the init method of a Servlet Filter -
according to the Servlet Spec, all Filter's should be initialized
prior to initializing any Servlets, but this is not the case in at
least one Servlet Container (Resin). This "bug fix" refactors
this JNDI code so that it should be executed the first time any
attempt is made to use the solr.home dir.
Other Changes
1. Updated to Lucene 2.1

View File

@ -24,6 +24,10 @@ import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrException;
import org.apache.solr.util.DOMUtil;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NoInitialContextException;
import javax.xml.parsers.*;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
@ -236,15 +240,38 @@ public class Config {
}
public static String getInstanceDir() {
if (instanceDir==null) {
String prop = project + ".solr.home";
instanceDir = normalizeDir(System.getProperty(prop));
if (instanceDir==null) {
instanceDir=project + '/';
log.info("Solr home defaulted to '" + instanceDir + "' (system property " + prop + " not set)");
} else {
log.info("Solr home set to '" + instanceDir + "' from system property " + prop);
if ( ! isInstanceDirInitalized() ) {
String home = null;
// Try JNDI
try {
Context c = new InitialContext();
home = (String)c.lookup("java:comp/env/solr/home");
log.info("Using JNDI solr.home: "+home );
} catch (NoInitialContextException e) {
log.info("JNDI not configured for Solr (NoInitialContextEx)");
} catch (NamingException e) {
log.info("No /solr/home in JNDI");
} catch( RuntimeException ex ) {
log.warning("Odd RuntimeException while testing for JNDI: "
+ ex.getMessage());
}
// Now try system property
if( home == null ) {
String prop = project + ".solr.home";
home = normalizeDir(System.getProperty(prop));
if( home != null ) {
log.info("using system property solr.home: " + home );
}
}
// if all else fails, try
if( home == null ) {
home = project + '/';
log.info("Solr home defaulted to '" + instanceDir + "' (could not find system property or JNDI)");
}
setInstanceDir(home);
}
return instanceDir;
}

View File

@ -22,10 +22,6 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NoInitialContextException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
@ -35,7 +31,6 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.solr.core.Config;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrException;
@ -60,20 +55,7 @@ public class SolrDispatchFilter implements Filter
public void init(FilterConfig config) throws ServletException
{
log.info("SolrDispatchFilter.init()");
// Only initalize the directory if it has not been done yet
if( !Config.isInstanceDirInitalized() ) {
try {
Context c = new InitialContext();
String home = (String)c.lookup("java:comp/env/solr/home");
if (home!=null) Config.setInstanceDir(home);
} catch (NoInitialContextException e) {
log.info("JNDI not configured for Solr (NoInitialContextEx)");
} catch (NamingException e) {
log.info("No /solr/home in JNDI");
}
}
// web.xml configuration
this.pathPrefix = config.getInitParameter( "path-prefix" );
this.handleSelect = "true".equals( config.getInitParameter( "handle-select" ) );