Author: rwesten
Date: Mon Sep 23 11:23:33 2013
New Revision: 1525556

URL: http://svn.apache.org/r1525556
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

Modified:
    
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
    
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
    
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java

Modified: 
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
--- 
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
 (original)
+++ 
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
 Mon Sep 23 11:23:33 2013
@@ -20,6 +20,8 @@ import java.io.CharArrayReader;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -102,30 +104,9 @@ public class LuceneLabelTokenizer implem
         if(value != null && !value.toString().isEmpty() && 
!DEFAULT_CLASS_NAME_CONFIG.equals(value)){
             Entry<String,Map<String,String>> charFilterConfig = 
parseConfigLine(
                 PROPERTY_CHAR_FILTER_FACTORY, value.toString());
-            Object factoryObject;
-            try {
-                factoryObject = 
resourceLoader.newInstance(charFilterConfig.getKey(), Object.class);
-            } catch (SolrException e) {
-                throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, 
"Unable to instantiate the "
-                        + "class '"+charFilterConfig.getKey()+"'!", e);
-            }
-
-            if(factoryObject instanceof CharFilterFactory){
-                charFilterFactory = (CharFilterFactory)factoryObject;
-                Map<String,String> config = charFilterConfig.getValue();
-                addLuceneMatchVersionIfNotPresent(config, charFilterFactory);
-                charFilterFactory.init(config);
-                if(factoryObject instanceof ResourceLoaderAware){
-                    try {
-                        
((ResourceLoaderAware)factoryObject).inform(resourceLoader);
-                    } catch (IOException e) {
-                        throw new 
ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, "Could not load 
configuration");
-                    }
-                }
-            } else {
-                throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, 
"The parsed class '"
-                        + charFilterConfig.getKey() +"' is not assignable to 
"+CharFilterFactory.class);
-            }
+            charFilterFactory = initAnalyzer(PROPERTY_CHAR_FILTER_FACTORY, 
+                charFilterConfig.getKey(), CharFilterFactory.class, 
+                charFilterConfig.getValue());
         } else {
             charFilterFactory = null;
         }
@@ -137,32 +118,9 @@ public class LuceneLabelTokenizer implem
         }
         Entry<String,Map<String,String>> tokenizerConfig = parseConfigLine(
             PROPERTY_CHAR_FILTER_FACTORY, value.toString());
-
-        Object factoryObject;
-        try {
-            factoryObject = 
resourceLoader.newInstance(tokenizerConfig.getKey(), Object.class);
-        } catch (SolrException e) {
-            throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY, 
"Unable to instantiate the "
-                    + "class '"+tokenizerConfig.getKey()+"'!", e);
-        }
-
-        if(factoryObject instanceof TokenizerFactory){
-            tokenizerFactory = (TokenizerFactory)factoryObject;
-            Map<String,String> config = tokenizerConfig.getValue();
-            addLuceneMatchVersionIfNotPresent(config, tokenizerFactory);
-            tokenizerFactory.init(config);
-        } else {
-            throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY, "The 
instance "
-                    + factoryObject + "of the parsed parsed class '" + 
tokenizerConfig.getKey()
-                    + "' is not assignable to "+TokenizerFactory.class);
-        }
-        if(factoryObject instanceof ResourceLoaderAware){
-            try {
-                ((ResourceLoaderAware)factoryObject).inform(resourceLoader);
-            } catch (IOException e) {
-                throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY, 
"Could not load configuration");
-            }
-        }
+        tokenizerFactory = initAnalyzer(PROPERTY_TOKENIZER_FACTORY, 
+            tokenizerConfig.getKey(), TokenizerFactory.class, 
+            tokenizerConfig.getValue());
 
         //initialise the list of Token Filters
         Collection<String> values;
@@ -189,31 +147,10 @@ public class LuceneLabelTokenizer implem
             }
             Entry<String,Map<String,String>> filterConfig = parseConfigLine(
                 PROPERTY_CHAR_FILTER_FACTORY, filterConfigLine);
-            Object filterFactoryObject;
-            try {
-                filterFactoryObject = 
resourceLoader.newInstance(filterConfig.getKey(), Object.class);
-            } catch (SolrException e) {
-                throw new 
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "Unable to instantiate 
the "
-                        + "class '"+filterConfig.getKey()+"'!", e);
-            }
-
-            if(filterFactoryObject instanceof TokenFilterFactory){
-                TokenFilterFactory tff = 
(TokenFilterFactory)filterFactoryObject;
-                Map<String,String> config = filterConfig.getValue();
-                addLuceneMatchVersionIfNotPresent(config,tff);
-                tff.init(config);
-                filterFactories.add(tff);
-            } else {
-                throw new 
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "The parsed class '"
-                        + filterConfig.getKey() +"' is not assignable to 
"+TokenFilterFactory.class);
-            }
-            if(filterFactoryObject instanceof ResourceLoaderAware){
-                try {
-                    
((ResourceLoaderAware)filterFactoryObject).inform(resourceLoader);
-                } catch (IOException e) {
-                    throw new 
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "Could not load 
configuration");
-                }
-            }
+            TokenFilterFactory tff = 
initAnalyzer(PROPERTY_TOKEN_FILTER_FACTORY, 
+                filterConfig.getKey(), TokenFilterFactory.class, 
+                filterConfig.getValue());
+            filterFactories.add(tff);
         }
         //init the language configuration
         value = ctx.getProperties().get(LabelTokenizer.SUPPORTED_LANUAGES);
@@ -224,12 +161,9 @@ public class LuceneLabelTokenizer implem
         langConf.setConfiguration(ctx.getProperties());
     }
 
-       private void addLuceneMatchVersionIfNotPresent(Map<String, String> 
config, AbstractAnalysisFactory factory) {
+       private static void addLuceneMatchVersionIfNotPresent(Map<String, 
String> config) {
                if(!config.containsKey("luceneMatchVersion")){
-                   config.put("luceneMatchVersion", 
Version.LUCENE_41.toString());
-               }
-               if(factory.getLuceneMatchVersion() == null){
-                       factory.setLuceneMatchVersion(Version.LUCENE_41);
+                   config.put("luceneMatchVersion", 
Version.LUCENE_44.toString());
                }
        }
 
@@ -341,4 +275,50 @@ public class LuceneLabelTokenizer implem
         }
         return params.isEmpty() ? new HashMap<String,String>() : params;
     }
+    
+    private <T> T initAnalyzer(String property, String analyzerName, Class<T> 
type, Map<String,String> config)
+        throws ConfigurationException {
+        Class<? extends T> analyzerClass;
+        try {
+            analyzerClass = resourceLoader.findClass(analyzerName, type);
+        } catch (SolrException e) {
+            throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, 
"Unable find "
+                + type.getSimpleName()+ " '" + analyzerName+"'!", e);
+        }
+        Constructor<? extends T> constructor;
+        try {
+            constructor = analyzerClass.getConstructor(Map.class);
+        } catch (NoSuchMethodException e1) {
+            throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, 
"Unable find "
+                + type.getSimpleName()+ "constructor with parameter 
Map<String,String> "
+                + "for class " + analyzerClass +" (analyzer: 
'"+analyzerName+"') !");
+        }
+        addLuceneMatchVersionIfNotPresent(config);
+        T analyzer;
+        try {
+            analyzer = constructor.newInstance(config);
+        } catch (IllegalArgumentException e) {
+            throw new ConfigurationException(property, "Unable to instantiate "
+                +type.getSimpleName()+' '+ analyzerClass +" (analyzer: 
"+analyzerName+"') !",e);
+        } catch (InstantiationException e) {
+            throw new ConfigurationException(property, "Unable to instantiate "
+                    +type.getSimpleName()+' '+ analyzerClass +" (analyzer: 
"+analyzerName+"') !",e);
+        } catch (IllegalAccessException e) {
+            throw new ConfigurationException(property, "Unable to instantiate "
+                    +type.getSimpleName()+' '+ analyzerClass +" (analyzer: 
"+analyzerName+"') !",e);
+        } catch (InvocationTargetException e) {
+            throw new ConfigurationException(property, "Unable to instantiate "
+                    +type.getSimpleName()+' '+ analyzerClass +" (analyzer: 
"+analyzerName+"') !",e);
+        }
+        if(analyzer instanceof ResourceLoaderAware){
+            try {
+                ((ResourceLoaderAware)analyzer).inform(resourceLoader);
+            } catch (IOException e) {
+                throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, 
"Could not load configuration");
+            }
+        }
+        return analyzer;
+    }
+    
+    
 }

Modified: 
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
--- 
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
 (original)
+++ 
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
 Mon Sep 23 11:23:33 2013
@@ -115,7 +115,7 @@ import org.slf4j.LoggerFactory;
 })
 public class KuromojiNlpEngine extends 
AbstractEnhancementEngine<IOException,RuntimeException> implements 
ServiceProperties {
 
-    private static final Version LUCENE_VERSION = Version.LUCENE_41;
+    private static final Version LUCENE_VERSION = Version.LUCENE_44;
     private static final String TOKENIZER_MODE = "search"; //normal, extended
     private static final Map<String,Object> SERVICE_PROPERTIES;
     private static final Map<String,String> TOKENIZER_FACTORY_CONFIG = new 
HashMap<String,String>();
@@ -361,25 +361,17 @@ public class KuromojiNlpEngine extends A
         //and third the parentResourceLoader (if present).
         resourceLoader = new 
StanbolResourceLoader(KuromojiNlpEngine.class.getClassLoader(), 
             new StanbolResourceLoader(parentResourceLoader));
-        tokenizerFactory = new JapaneseTokenizerFactory();
-        tokenizerFactory.init(TOKENIZER_FACTORY_CONFIG);
-        tokenizerFactory.setLuceneMatchVersion(LUCENE_VERSION);
+        tokenizerFactory = new 
JapaneseTokenizerFactory(TOKENIZER_FACTORY_CONFIG);
         ((ResourceLoaderAware) tokenizerFactory).inform(resourceLoader);
         //base form filter
-        TokenFilterFactory baseFormFilterFactory =  new 
JapaneseBaseFormFilterFactory();
-        baseFormFilterFactory.init(BASE_FORM_FILTER_CONFIG);
-        baseFormFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+        TokenFilterFactory baseFormFilterFactory =  new 
JapaneseBaseFormFilterFactory(BASE_FORM_FILTER_CONFIG);
         filterFactories.add(baseFormFilterFactory);
         //POS filter
-        TokenFilterFactory posFilterFactory = new 
JapanesePartOfSpeechStopFilterFactory();
-        posFilterFactory.init(POS_FILTER_CONFIG);
-        posFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+        TokenFilterFactory posFilterFactory = new 
JapanesePartOfSpeechStopFilterFactory(POS_FILTER_CONFIG);
         ((ResourceLoaderAware) posFilterFactory).inform(resourceLoader);
         filterFactories.add(posFilterFactory);
         //Stemming
-        TokenFilterFactory stemmFilterFactory = new 
JapaneseKatakanaStemFilterFactory();
-        stemmFilterFactory.init(STEMM_FILTER_CONFIG);
-        stemmFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+        TokenFilterFactory stemmFilterFactory = new 
JapaneseKatakanaStemFilterFactory(STEMM_FILTER_CONFIG);
         filterFactories.add(stemmFilterFactory);
     }
     

Modified: 
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
--- 
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
 (original)
+++ 
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
 Mon Sep 23 11:23:33 2013
@@ -29,6 +29,7 @@ import org.apache.solr.client.solrj.embe
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
 import org.xml.sax.SAXException;
 
 /**
@@ -78,10 +79,19 @@ public class EmbeddedSolrHelper {
         IOUtils.copy(is, new FileOutputStream(solrConfigFile));
 
         // create the embedded server
-        CoreContainer coreContainer = new 
CoreContainer(solrFolder.getAbsolutePath(), solrFile);
+        SolrResourceLoader loader = new 
SolrResourceLoader(solrFolder.getAbsolutePath());
+        CoreContainer coreContainer = new CoreContainer(loader);
+        //NOTE: with Solr 4.4 we need to call coreContainer.load() otherwise we
+        //would be affected by the issue stated at 
+        
//http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201301.mbox/%3CB7B8B36F1A0BE24F842758C318E56E925EB334%40EXCHDB2.na1.ad.group%3E
+        //while this was introduced with 4.1 this only affects this code with 
4.4
+        //as with an API change the methods implicitly calling load() where
+        //removed.
+        coreContainer.load();
         CoreDescriptor coreDescriptor = new CoreDescriptor(coreContainer, 
coreId,
                 solrCoreFolder.getAbsolutePath());
         SolrCore core = coreContainer.create(coreDescriptor);
+//        coreContainer.createAndLoad(solrHome, configFile)load();
         coreContainer.register(coreId, core, true);
         return new EmbeddedSolrServer(coreContainer, coreId);
     }


Reply via email to