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/03/07 08:32:39 UTC

svn commit: r1453716 - /stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java

Author: rwesten
Date: Thu Mar  7 07:32:39 2013
New Revision: 1453716

URL: http://svn.apache.org/r1453716
Log:
STANBOL-975: Fixes this by (1) catching NoSuchElementException for SortedSet#last() and (2) optaining a local reference to the ServiceTracker for the labelTokenizer and checking it for NOT beeing NULL

Modified:
    stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java

Modified: stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java?rev=1453716&r1=1453715&r2=1453716&view=diff
==============================================================================
--- stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java (original)
+++ stanbol/trunk/enhancement-engines/entityhublinking/src/main/java/org/apache/stanbol/enhancer/engines/entityhublinking/EntityhubLinkingEngine.java Thu Mar  7 07:32:39 2013
@@ -42,6 +42,7 @@ import static org.osgi.framework.Constan
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.NavigableSet;
+import java.util.NoSuchElementException;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
@@ -212,74 +213,87 @@ public class EntityhubLinkingEngine impl
             entitySearcher = new ReferencedSiteSearcher(bundleContext,siteName,10,this);
         }
         labelTokenizerTracker = new ServiceTracker(bundleContext, LabelTokenizer.class.getName(), 
-            new ServiceTrackerCustomizer() {
-                
-            @Override
-            public Object addingService(ServiceReference reference) {
-                Object service = bundleContext.getService(reference);
-                synchronized (labelTokenizersRefs) {
-                    labelTokenizersRefs.add(reference);
-                    ServiceReference higest = labelTokenizersRefs.last();
-                    EntityLinkingEngine engine = entityLinkingEngine;
-                    if(engine != null){
-                        LabelTokenizer lt = (LabelTokenizer)
-                                (higest.equals(reference) ? service : 
-                                    labelTokenizerTracker.getService(higest));
-                        if(!lt.equals(engine.getLabelTokenizer())){
-                            log.info(" ... setting LabelTokenizer of Engine '{}' to {}",
-                                engine.getName(),lt);
-                            engine.setLabelTokenizer(lt);
+                new ServiceTrackerCustomizer() {
+                    
+                @Override
+                public Object addingService(ServiceReference reference) {
+                    Object service = bundleContext.getService(reference);
+                    synchronized (labelTokenizersRefs) {
+                        labelTokenizersRefs.add(reference);
+                        ServiceReference higest;
+                        try {
+                            higest = labelTokenizersRefs.last();
+                        } catch (NoSuchElementException e) {
+                            higest = null;
                         }
-                    }
-                }
-                return service;
-            }
-
-            @Override
-            public void removedService(ServiceReference reference, Object service) {
-                synchronized (labelTokenizersRefs) {
-                    labelTokenizersRefs.remove(reference); //override
-                    EntityLinkingEngine engine = entityLinkingEngine;
-                    if(engine != null){
-                        if(labelTokenizersRefs.isEmpty()){
-                            log.info(" ... setting LabelTokenizer of Engine '{}' to null",
-                                engine.getName());
-                            engine.setLabelTokenizer(null);
-                        } else {
-                            LabelTokenizer lt = (LabelTokenizer)labelTokenizerTracker.getService(
-                                labelTokenizersRefs.last());
+                        EntityLinkingEngine engine = entityLinkingEngine;
+                        ServiceTracker tracker = labelTokenizerTracker;
+                        if(engine != null && tracker != null){
+                            LabelTokenizer lt = (LabelTokenizer)
+                                    (reference.equals(higest) || higest == null ? service : 
+                                        tracker.getService(higest));
                             if(!lt.equals(engine.getLabelTokenizer())){
                                 log.info(" ... setting LabelTokenizer of Engine '{}' to {}",
                                     engine.getName(),lt);
                                 engine.setLabelTokenizer(lt);
                             }
-                        }
+                        }//if engine or tracker is null deactivate was already called
                     }
+                    return service;
                 }
-                bundleContext.ungetService(reference);
-            }
-                
-            @Override
-            public void modifiedService(ServiceReference reference, Object service) {
-                synchronized (labelTokenizersRefs) {
-                    labelTokenizersRefs.remove(reference); //override
-                    labelTokenizersRefs.add(reference);
-                    ServiceReference higest = labelTokenizersRefs.last();
-                    EntityLinkingEngine engine = entityLinkingEngine;
-                    if(engine != null){
-                        LabelTokenizer lt = (LabelTokenizer)
-                            (higest.equals(reference) ? service : 
-                                labelTokenizerTracker.getService(higest));
-                        if(!lt.equals(engine.getLabelTokenizer())){
-                            log.info(" ... setting LabelTokenizer of Engine '{}' to {}",
-                                engine.getName(),lt);
-                            engine.setLabelTokenizer(lt);
+
+                @Override
+                public void removedService(ServiceReference reference, Object service) {
+                    synchronized (labelTokenizersRefs) {
+                        labelTokenizersRefs.remove(reference); //override
+                        EntityLinkingEngine engine = entityLinkingEngine;
+                        ServiceTracker tracker = labelTokenizerTracker;
+                        if(engine != null && tracker != null){
+                            if(labelTokenizersRefs.isEmpty()){
+                                log.info(" ... setting LabelTokenizer of Engine '{}' to null",
+                                    engine.getName());
+                                engine.setLabelTokenizer(null);
+                            } else {
+                                LabelTokenizer lt = (LabelTokenizer)tracker.getService(
+                                    labelTokenizersRefs.last());
+                                if(!lt.equals(engine.getLabelTokenizer())){
+                                    log.info(" ... setting LabelTokenizer of Engine '{}' to {}",
+                                        engine.getName(),lt);
+                                    engine.setLabelTokenizer(lt);
+                                }
+                            }
+                        } //if engine or tracker is null deactivate was already called
+                    }
+                    bundleContext.ungetService(reference);
+                }
+                    
+                @Override
+                public void modifiedService(ServiceReference reference, Object service) {
+                    synchronized (labelTokenizersRefs) {
+                        labelTokenizersRefs.remove(reference); //override
+                        labelTokenizersRefs.add(reference);
+                        ServiceReference higest;
+                        try {
+                            higest = labelTokenizersRefs.last();
+                        } catch (NoSuchElementException e) {
+                            higest = null;
                         }
+                        EntityLinkingEngine engine = entityLinkingEngine;
+                        ServiceTracker tracker = labelTokenizerTracker;
+                        if(engine != null && tracker != null){
+                            LabelTokenizer lt = (LabelTokenizer)
+                                    (reference.equals(higest) || higest == null ? service : 
+                                        tracker.getService(higest));
+                            if(!lt.equals(engine.getLabelTokenizer())){
+                                log.info(" ... setting LabelTokenizer of Engine '{}' to {}",
+                                    engine.getName(),lt);
+                                engine.setLabelTokenizer(lt);
+                            }
+                        } //if engine or tracker is null deactivate was already called
                     }
                 }
-            }
-                
-            });
+                    
+                });
         //create the engine
         entityLinkingEngine = new EntityLinkingEngine(engineName,
             entitySearcher, //the searcher might not be available