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 {