You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2013/09/23 13:21:27 UTC
svn commit: r1525555 - in /stanbol/trunk/commons/solr: core/
core/src/main/java/org/apache/stanbol/commons/solr/
core/src/main/java/org/apache/stanbol/commons/solr/impl/
core/src/main/java/org/apache/stanbol/commons/solr/utils/ managed/
managed/src/mai...
Author: rwesten
Date: Mon Sep 23 11:21:27 2013
New Revision: 1525555
URL: http://svn.apache.org/r1525555
Log:
STANBOL-1162: update to Solr 4.4.0; This comes along with several adaptions to API changes of Solr. See comments on the Issue for details
Added:
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/RegisteredSolrAnalyzerFactory.java
Modified:
stanbol/trunk/commons/solr/core/pom.xml
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrConstants.java
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrServerAdapter.java
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/impl/OsgiSolrResourceLoader.java
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/AbstractAnalyzerFactoryActivator.java
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/DataFileResourceLoader.java
stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/StanbolResourceLoader.java
stanbol/trunk/commons/solr/managed/pom.xml
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/standalone/StandaloneManagedSolrServer.java
stanbol/trunk/commons/solr/web/src/main/java/org/apache/stanbol/commons/solr/web/dispatch/DelegatingSolrDispatchFilter.java
Modified: stanbol/trunk/commons/solr/core/pom.xml
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/pom.xml?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/pom.xml (original)
+++ stanbol/trunk/commons/solr/core/pom.xml Mon Sep 23 11:21:27 2013
@@ -88,6 +88,7 @@
org.tartarus.snowball;resolution:=optional,
org.restlet;resolution:=optional,
org.restlet.*;resolution:=optional,
+ org.apache.hadoop.*;resolution:=optional,
*
</Import-Package>
<DynamicImport-Package>*</DynamicImport-Package>
@@ -98,7 +99,7 @@
lucene-spatial, lucene-spellchecker, lucene-misc, lucene-queries,
lucene-memory, lucene-phonetic, lucene-grouping, lucene-codecs,
lucene-queryparser, lucene-sandbox, lucene-suggest,
- zookeeper
+ zookeeper, noggit
</Embed-Dependency>
<Private-Package>
org.apache.stanbol.commons.solr.impl;version=${project.version}
@@ -258,6 +259,11 @@
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
</dependency>
+ <dependency> <!-- used by Lucene for JSON serialization -->
+ <groupId>org.noggit</groupId>
+ <artifactId>noggit</artifactId>
+ </dependency>
+
<!--
Restlet is used starting with Solr 4.2. For now commented as this in only
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrConstants.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrConstants.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrConstants.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrConstants.java Mon Sep 23 11:21:27 2013
@@ -20,6 +20,9 @@ import java.io.File;
import java.util.Locale;
import org.apache.lucene.analysis.util.AbstractAnalysisFactory;
+import org.apache.lucene.analysis.util.CharFilterFactory;
+import org.apache.lucene.analysis.util.TokenFilterFactory;
+import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.Version;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;
@@ -152,6 +155,17 @@ public final class SolrConstants {
* to find anayzer factory instances.
*/
public static final String PROPERTY_ANALYZER_FACTORY_NAME = "org.apache.lucene.analysis.factory.name";
+ /**
+ * The full qualified name of the {@link AbstractAnalysisFactory} implementation
+ * registered with the {@link #PROPERTY_ANALYZER_FACTORY_NAME name}.
+ */
+ public static final String PROPERTY_ANALYZER_FACTORY_IMPL = "org.apache.lucene.analysis.factory.impl";
+ /**
+ * The full qualified name of the {@link AbstractAnalysisFactory} interface
+ * implemented by the class. One of {@link CharFilterFactory},
+ * {@link TokenizerFactory}or {@link TokenFilterFactory}.
+ */
+ public static final String PROPERTY_ANALYZER_FACTORY_TYPE = "org.apache.lucene.analysis.factory.type";
public static final String PROPERTY_LUCENE_MATCH_VERSION = Version.class.getName().toLowerCase(Locale.ROOT);
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrServerAdapter.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrServerAdapter.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrServerAdapter.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/SolrServerAdapter.java Mon Sep 23 11:21:27 2013
@@ -57,12 +57,14 @@ import org.apache.commons.io.FilenameUti
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.core.CloseHook;
+import org.apache.solr.core.ConfigSolr;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.IndexSchemaFactory;
import org.apache.stanbol.commons.solr.impl.OsgiSolrResourceLoader;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -228,16 +230,17 @@ public class SolrServerAdapter {
//create a clone so that only we control who changes to the properties
serverProperties = parsedServerProperties.clone();
+ File solrCof = new File(solrDir,parsedServerProperties.getSolrXml());
ClassLoader classLoader = updateContextClassLoader();
CoreContainer container;
try {
+ log.info(" ... create OSGI enabled SolrCore (conf: {}",solrCof);
SolrResourceLoader loader = new OsgiSolrResourceLoader(context, solrDir.getAbsolutePath(),
SolrServerAdapter.class.getClassLoader());
- container = new OsgiCoreContainer(loader, context);
+ container = new OsgiCoreContainer(loader, context,solrCof);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
- File solrCof = new File(solrDir,parsedServerProperties.getSolrXml());
this.server = container;
this.registrations = Collections.synchronizedMap(
new HashMap<String,CoreRegistration>());
@@ -249,8 +252,7 @@ public class SolrServerAdapter {
//now load the cores
classLoader = updateContextClassLoader();
try {
- log.info(" ... load SolrConfig {}",solrCof);
- container.load(solrDir.getAbsolutePath(), solrCof);
+ container.load();
log.info(" - loaded SolrConfig {}",solrCof);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
@@ -617,8 +619,8 @@ public class SolrServerAdapter {
private final class OsgiCoreContainer extends CoreContainer {
private final BundleContext context;
- private OsgiCoreContainer(SolrResourceLoader loader, BundleContext context) {
- super(loader);
+ private OsgiCoreContainer(SolrResourceLoader loader, BundleContext context, File solrConf) {
+ super(loader,ConfigSolr.fromFile(loader, solrConf));
this.context = context;
}
@@ -626,6 +628,9 @@ public class SolrServerAdapter {
//to create SolrCores
@Override
public SolrCore create(CoreDescriptor dcore) {
+ if (isShutDown()) {
+ throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE, "Solr has shutdown.");
+ }
log.info(" .... createCore {}:{}",serverProperties.getServerName(),dcore.getName());
if (getZkController() != null) {
//TODO: add support for ZooKeeper managed cores
@@ -633,17 +638,43 @@ public class SolrServerAdapter {
} else {
File idir = new File(dcore.getInstanceDir());
String instanceDir = idir.getPath();
- //TODO: we can not use the indexSchemaCache because it is
- // a private variable
SolrResourceLoader loader = new OsgiSolrResourceLoader(context, instanceDir,
CoreContainer.class.getClassLoader());
SolrConfig config;
try {
config = new SolrConfig(loader, dcore.getConfigName(), null);
} catch (Exception e) {
+ log.error("Failed to load file {}", new File(instanceDir, dcore.getConfigName()).getAbsolutePath());
throw new SolrException(ErrorCode.SERVER_ERROR, "Could not load config for " + dcore.getConfigName(), e);
}
- IndexSchema schema = new IndexSchema(config,dcore.getSchemaName(),null);
+ IndexSchema schema = null;
+ //indexSchemaCache is now protected (Solr 4.4)
+ if (indexSchemaCache != null) {
+ final String resourceNameToBeUsed = IndexSchemaFactory.getResourceNameToBeUsed(dcore.getSchemaName(), config);
+ File schemaFile = new File(resourceNameToBeUsed);
+ if (!schemaFile.isAbsolute()) {
+ schemaFile = new File(loader.getConfigDir(), schemaFile.getPath());
+ }
+ if (schemaFile.exists()) {
+ String key = schemaFile.getAbsolutePath()
+ + ":"
+ + new SimpleDateFormat("yyyyMMddHHmmss", Locale.ROOT).format(new Date(
+ schemaFile.lastModified()));
+ schema = indexSchemaCache.get(key);
+ if (schema == null) {
+ log.info("creating new schema object for core: " + dcore.getProperty(CoreDescriptor.CORE_NAME));
+ schema = IndexSchemaFactory.buildIndexSchema(dcore.getSchemaName(), config);
+ indexSchemaCache.put(key, schema);
+ } else {
+ log.info("re-using schema object for core: " + dcore.getProperty(CoreDescriptor.CORE_NAME));
+ }
+ }
+ }
+
+ if (schema == null) {
+ schema = IndexSchemaFactory.buildIndexSchema(dcore.getSchemaName(), config);
+ }
+
SolrCore core = new SolrCore(dcore.getName(), null, config, schema, dcore);
if (core.getUpdateHandler().getUpdateLog() != null) {
// always kick off recovery if we are in standalone mode.
@@ -655,10 +686,9 @@ public class SolrServerAdapter {
//this ensures that a closeHook is added to registered cores
@Override
- protected SolrCore registerCore(Map<String,SolrCore> whichCores, String name, SolrCore core,
- boolean returnPrevNotClosed) {
+ protected SolrCore registerCore(boolean isTransientCore, String name, SolrCore core, boolean returnPrevNotClosed) {
log.info(" .... registerCore {}:{}",serverProperties.getServerName(),name);
- SolrCore old = super.registerCore(whichCores, name, core, returnPrevNotClosed);
+ SolrCore old = super.registerCore(isTransientCore, name, core, returnPrevNotClosed);
//NOTE: we can not register the services here, as this can trigger
// a deadlock!!
//Reason: OSGI ensures that activation is done by a single thread.
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/impl/OsgiSolrResourceLoader.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/impl/OsgiSolrResourceLoader.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/impl/OsgiSolrResourceLoader.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/impl/OsgiSolrResourceLoader.java Mon Sep 23 11:21:27 2013
@@ -31,6 +31,7 @@ import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.stanbol.commons.solr.SolrServerAdapter;
import org.apache.stanbol.commons.solr.utils.AbstractAnalyzerFactoryActivator;
+import org.apache.stanbol.commons.solr.utils.RegisteredSolrAnalyzerFactory;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
@@ -98,16 +99,18 @@ public class OsgiSolrResourceLoader exte
String filter;
try {
filter = String.format("(%s=%s)", PROPERTY_ANALYZER_FACTORY_NAME, name.toLowerCase(Locale.ROOT));
- referenced = bc.getServiceReferences(expectedType.getName(), filter);
+ referenced = bc.getServiceReferences(RegisteredSolrAnalyzerFactory.class.getName(), filter);
} catch (InvalidSyntaxException e) {
throw new IllegalStateException("Unable to create Filter for Service with name '" + name
+ "'!", e);
}
if (referenced != null && referenced.length > 0) {
Object service = bc.getService(referenced[0]);
- if (service != null) {
- clazz = (Class<? extends T>) service.getClass();
- bc.ungetService(referenced[0]); //we return the class and do not use the service
+ if (service instanceof RegisteredSolrAnalyzerFactory) {
+ //TODO: we could check the type here
+ clazz = ((RegisteredSolrAnalyzerFactory)service).getFactoryClass();
+ //we do not use a service so immediately unget it
+ bc.ungetService(referenced[0]);
return clazz;
}
} else {
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/AbstractAnalyzerFactoryActivator.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/AbstractAnalyzerFactoryActivator.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/AbstractAnalyzerFactoryActivator.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/AbstractAnalyzerFactoryActivator.java Mon Sep 23 11:21:27 2013
@@ -146,28 +146,33 @@ public abstract class AbstractAnalyzerFa
throw new ServiceConfigurationError("The class name " + service.getName() +
" has wrong suffix, allowed are: " + Arrays.toString(suffixes));
}
- AbstractAnalysisFactory factory;
- try {
- factory = service.newInstance();
- } catch (Exception e) {
- throw new IllegalArgumentException("SPI class of type "+ type.getName()
- + " with name '"+name+"' cannot be instantiated. This is likely "
- + "due to a misconfiguration of the java class '"
- + service.getName() + "': ", e);
- }
+ //as if Solr 4.4. we can no longer create an instance of the Factories
+ //as constructors not take the Map<String,String> with the configuration
+ //(we do not have any configuration).
+ //because of that we register the new RegisteredSolrAnalyzerFactory class
+ //instead
+// AbstractAnalysisFactory factory;
+// try {
+// factory = service.newInstance();
+// } catch (Exception e) {
+// throw new IllegalArgumentException("SPI class of type "+ type.getName()
+// + " with name '"+name+"' cannot be instantiated. This is likely "
+// + "due to a misconfiguration of the java class '"
+// + service.getName() + "': ", e);
+// }
Dictionary<String,Object> prop = new Hashtable<String,Object>();
- prop.put(SolrConstants.PROPERTY_ANALYZER_FACTORY_NAME,name);
- Version version = factory.getLuceneMatchVersion();
- if(version != null){
- prop.put(SolrConstants.PROPERTY_LUCENE_MATCH_VERSION, version.name());
- }
+ prop.put(SolrConstants.PROPERTY_ANALYZER_FACTORY_NAME, name);
+ prop.put(SolrConstants.PROPERTY_ANALYZER_FACTORY_IMPL, service.getName());
+ prop.put(SolrConstants.PROPERTY_ANALYZER_FACTORY_TYPE, type.getName());
//use 0 - bundle id as service ranking. This ensures that if two
//factories do use the same name the one provided by the bundle with the
//lower id is used by default
int serviceRanking = 0 - (int)bc.getBundle().getBundleId();
prop.put(Constants.SERVICE_RANKING, serviceRanking);
log.debug(" ... {} (name={})",service.getName(),name);
- registrations.add(bc.registerService(type.getName(), factory, prop));
+ //register the AnalyzerFactory
+ registrations.add(bc.registerService(RegisteredSolrAnalyzerFactory.class.getName(),
+ new RegisteredSolrAnalyzerFactory<S>(name, type, service), prop));
}
return registrations;
}
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/DataFileResourceLoader.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/DataFileResourceLoader.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/DataFileResourceLoader.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/DataFileResourceLoader.java Mon Sep 23 11:21:27 2013
@@ -93,4 +93,9 @@ public class DataFileResourceLoader impl
throw new UnsupportedOperationException("Loading of ClassFiles is not supported");
}
+ @Override
+ public <T> Class<? extends T> findClass(String cname, Class<T> expectedType) {
+ throw new UnsupportedOperationException("Loading of ClassFiles is not supported");
+ }
+
}
Added: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/RegisteredSolrAnalyzerFactory.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/RegisteredSolrAnalyzerFactory.java?rev=1525555&view=auto
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/RegisteredSolrAnalyzerFactory.java (added)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/RegisteredSolrAnalyzerFactory.java Mon Sep 23 11:21:27 2013
@@ -0,0 +1,50 @@
+package org.apache.stanbol.commons.solr.utils;
+
+import java.util.ServiceLoader;
+
+import org.apache.lucene.analysis.util.AbstractAnalysisFactory;
+import org.apache.lucene.analysis.util.CharFilterFactory;
+import org.apache.lucene.analysis.util.TokenFilterFactory;
+import org.apache.lucene.analysis.util.TokenizerFactory;
+import org.apache.solr.core.SolrResourceLoader;
+import org.apache.stanbol.commons.solr.SolrServerAdapter;
+
+/**
+ * Helper Interface used to register Solr {@link CharFilterFactory},
+ * {@link TokenizerFactory} and {@link TokenFilterFactory} implementations as
+ * OSGI services. This is required as the {@link SolrResourceLoader} does not
+ * work within OSGI because it uses functionality similar to
+ * {@link ServiceLoader} to locate and load implementations.<p>
+ * Registration is implemented by the {@link AbstractAnalyzerFactoryActivator}
+ * sub-classes contained in all o.a.stanbol.commons.solr.* modules that do
+ * provide Solr Analyzers. Registered services are consumed by the
+ * OsgiSolrResourceLoader. NOTE that the {@link SolrServerAdapter} replaces the
+ * default {@link SolrResourceLoader} with the OSGI one.
+ * @author Rupert Westenthaler
+ *
+ */
+public class RegisteredSolrAnalyzerFactory<T extends AbstractAnalysisFactory> {
+
+ private final String name;
+ private final Class<T> factoryType;
+ private final Class<? extends T> factoryImpl;
+
+ public RegisteredSolrAnalyzerFactory(String name, Class<T> factoryType, Class<? extends T> factoryImpl) {
+ this.name = name;
+ this.factoryType = factoryType;
+ this.factoryImpl = factoryImpl;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Class<T> getFactoryType(){
+ return factoryType;
+ }
+
+ public Class<? extends T> getFactoryClass() {
+ return factoryImpl;
+ }
+
+}
Modified: stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/StanbolResourceLoader.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/StanbolResourceLoader.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/StanbolResourceLoader.java (original)
+++ stanbol/trunk/commons/solr/core/src/main/java/org/apache/stanbol/commons/solr/utils/StanbolResourceLoader.java Mon Sep 23 11:21:27 2013
@@ -24,8 +24,11 @@ import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import org.apache.lucene.analysis.util.ResourceLoader;
+import org.apache.lucene.analysis.util.ResourceLoaderAware;
import org.apache.solr.common.SolrException;
+import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.util.plugin.SolrCoreAware;
import org.apache.stanbol.commons.stanboltools.datafileprovider.DataFileProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -113,38 +116,39 @@ public class StanbolResourceLoader imple
}
return lines;
}
-
@Override
- public <T> T newInstance(String cname, Class<T> expectedType) {
+ public <T> Class<? extends T> findClass(String cname, Class<T> expectedType) {
String parentMessage = null;
+ Class<? extends T> clazz = null;
if(parent != null){
try {
- return parent.newInstance(cname, expectedType);
+ clazz = parent.findClass(cname, expectedType);
} catch (SecurityException e) { //do not catch security related exceptions
throw e;
} catch (RuntimeException e) {
parentMessage = e.getMessage();
}
}
- Class<T> clazz = null;
- // first try cname == full name
- try {
- clazz = (Class<T>) classloader.loadClass(cname);
- } catch (Exception e) {
- String newName = cname;
- if (newName.startsWith(project)) {
- newName = cname.substring(project.length() + 1);
- }
- for (String subpackage : packages) {
- try {
- String name = base + '.' + subpackage + newName;
- log.trace("Trying class name " + name);
- clazz = (Class<T>) classloader.loadClass(name);
- break;
- } catch (Exception e1) {
- // ignore... assume first exception is best.
+ if(clazz == null){
+ try {
+ clazz = (Class<T>) classloader.loadClass(cname);
+ } catch (Exception e) {
+ String newName = cname;
+ if (newName.startsWith(project)) {
+ newName = cname.substring(project.length() + 1);
+ }
+ for (String subpackage : packages) {
+ try {
+ String name = base + '.' + subpackage + newName;
+ log.trace("Trying class name " + name);
+ clazz = (Class<T>) classloader.loadClass(name);
+ break;
+ } catch (Exception e1) {
+ // ignore... assume first exception is best.
+ }
}
}
+
}
if(clazz == null){
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
@@ -153,12 +157,19 @@ public class StanbolResourceLoader imple
+ "via Classloader "+classloader);
}
+ return clazz;
+ }
+
+ @Override
+ public <T> T newInstance(String cname, Class<T> expectedType) {
+ Class<? extends T> clazz = findClass(cname, expectedType);
try {
return clazz.newInstance();
} catch (Exception e) {
- throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
- "Error instantiating class: '" + clazz.getName()+"'", e);
+ throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
+ "Error instantiating class: '" + clazz.getName()+"'", e);
}
+
}
}
Modified: stanbol/trunk/commons/solr/managed/pom.xml
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/managed/pom.xml?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/managed/pom.xml (original)
+++ stanbol/trunk/commons/solr/managed/pom.xml Mon Sep 23 11:21:27 2013
@@ -94,11 +94,6 @@
<artifactId>org.apache.stanbol.commons.solr.core</artifactId>
<version>0.12.0-SNAPSHOT</version>
</dependency>
- <!-- dependency>
- <groupId>org.apache.stanbol</groupId>
- <artifactId>org.apache.stanbol.commons.solr.web</artifactId>
- <version>0.9.0-incubating</version>
- </dependency -->
<!-- OSGI dependencies -->
<dependency>
Modified: stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/standalone/StandaloneManagedSolrServer.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/standalone/StandaloneManagedSolrServer.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/standalone/StandaloneManagedSolrServer.java (original)
+++ stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/standalone/StandaloneManagedSolrServer.java Mon Sep 23 11:21:27 2013
@@ -216,9 +216,8 @@ public class StandaloneManagedSolrServer
}
}
server = new CoreContainer(managedSolrDir.getAbsolutePath());
- File solrXml = new File(managedSolrDir,"solr.xml");
- server.load(managedSolrDir.getAbsolutePath(), solrXml);
- server.setPersistent(true);
+ //File solrXml = new File(managedSolrDir,"solr.xml");
+ server.load();
}
private void shutdown() {
server.shutdown();
Modified: stanbol/trunk/commons/solr/web/src/main/java/org/apache/stanbol/commons/solr/web/dispatch/DelegatingSolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/web/src/main/java/org/apache/stanbol/commons/solr/web/dispatch/DelegatingSolrDispatchFilter.java?rev=1525555&r1=1525554&r2=1525555&view=diff
==============================================================================
--- stanbol/trunk/commons/solr/web/src/main/java/org/apache/stanbol/commons/solr/web/dispatch/DelegatingSolrDispatchFilter.java (original)
+++ stanbol/trunk/commons/solr/web/src/main/java/org/apache/stanbol/commons/solr/web/dispatch/DelegatingSolrDispatchFilter.java Mon Sep 23 11:21:27 2013
@@ -16,18 +16,14 @@
*/
package org.apache.stanbol.commons.solr.web.dispatch;
-import java.io.IOException;
import javax.servlet.Filter;
-import javax.xml.parsers.ParserConfigurationException;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.CoreContainer.Initializer;
import org.apache.solr.servlet.SolrDispatchFilter;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
/**
* A {@link SolrDispatchFilter} that does not create a new {@link CoreContainer}
@@ -50,27 +46,6 @@ public abstract class DelegatingSolrDisp
* multiple calls to init)
*/
private CoreContainer delegate = null;
- /**
- * {@link Initializer} implementation that calls the abstract
- * {@link #getCoreContainerReference()} method to lookup the {@link ServiceReference}
- * to the {@link CoreContainer} used for this dispatch filter
- *
- */
- private Initializer initialiser = new Initializer() {
- @Override
- public CoreContainer initialize() {
- //support multiple calls
- if(delegate != null){
- ungetCoreContainer(); //cleanup current
- }
- delegate = getCoreContainer();
- if(delegate != null){
- return delegate;
- } else {
- throw new IllegalStateException("CoreContainer currently not available");
- }
- }
- };
/**
@@ -79,16 +54,16 @@ public abstract class DelegatingSolrDisp
public DelegatingSolrDispatchFilter(){
super();
}
-
@Override
- protected Initializer createInitializer() {
- //we do not need to initialise a new CoreContaine. Just get the service
- //via the OSGI environment
- return initialiser;
+ protected final CoreContainer createCoreContainer() {
+ if(delegate == null){
+ delegate = getCoreContainer();
+ }
+ return delegate;
}
@Override
- public void destroy() {
+ public final void destroy() {
//we need NOT do shutdown the CoreContainer! Just release the
//OSGI service!
try {