Author: rwesten
Date: Tue Dec 17 11:14:51 2013
New Revision: 1551511

URL: http://svn.apache.org/r1551511
Log:
STANBOL-1239: Engines and Chains tracker now start tracking only at their first 
usage.

Modified:
    
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/ChainsTracker.java
    
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/EnginesTracker.java
    
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/NameBasedServiceTrackingState.java

Modified: 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/ChainsTracker.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/ChainsTracker.java?rev=1551511&r1=1551510&r2=1551511&view=diff
==============================================================================
--- 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/ChainsTracker.java
 (original)
+++ 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/ChainsTracker.java
 Tue Dec 17 11:14:51 2013
@@ -64,6 +64,10 @@ public class ChainsTracker implements Ch
     private Set<String> trackedChains;
 
     private NameBasedServiceTrackingState nameTracker;
+
+    private boolean initialised;
+
+    private boolean open;
     /**
      * Protected constructor intended to be used by subclasses that do not want
      * to compete the initialisation as part of construction(e.g.
@@ -146,7 +150,7 @@ public class ChainsTracker implements Ch
      */
     protected void initChainTracker(BundleContext context, Set<String> 
chainNames, ServiceTrackerCustomizer customiser) {
         if(nameTracker != null){ //if we re-initialise
-            nameTracker.close(); //try to close the current ServiceTracker
+            close(); //call close first
         }
         if(context == null){
             throw new IllegalStateException("Unable to initialise tracking if 
NULL is parsed as Bundle Context!");
@@ -195,17 +199,31 @@ public class ChainsTracker implements Ch
                         "parsed chain names "+trackedChains,e);
             }
         }
+        initialised = true;
     }
     /**
-     * Starts tracking based on the configuration parsed in the constructor
+     * getter for the NameTracker. Starts tracking on the first call
      */
-    public void open(){
-        nameTracker.open();
+    private NameBasedServiceTrackingState getNameTracker(){
+        if(!initialised){
+            throw new IllegalStateException("ChainTracker is not initialised 
or already closed!");
+        }
+        if(!open){
+            synchronized (this) {
+                if(!open){
+                    nameTracker.open();
+                    open = true;
+                }
+            }
+        }
+        return nameTracker;
     }
     /**
      * Closes this tracker
      */
     public void close(){
+        open = false;
+        initialised = false;
         nameTracker.close();
         nameTracker = null;
     }
@@ -231,7 +249,7 @@ public class ChainsTracker implements Ch
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
         if(trackedChains.isEmpty() || trackedChains.contains(name)){
-            return nameTracker.getReference(name);
+            return getNameTracker().getReference(name);
         } else {
             throw new IllegalArgumentException("The Chain with the parsed name 
'"+
                 name+"' is not tracked (tracked: "+trackedChains+")!");
@@ -246,7 +264,7 @@ public class ChainsTracker implements Ch
         if(name == null || name.isEmpty()){
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
-        return nameTracker.getReference(name) != null;
+        return getNameTracker().getReference(name) != null;
     }
     /*
      * (non-Javadoc)
@@ -258,7 +276,7 @@ public class ChainsTracker implements Ch
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
         if(trackedChains.isEmpty() || trackedChains.contains(name)){
-            List<ServiceReference> refs = nameTracker.getReferences(name);
+            List<ServiceReference> refs = getNameTracker().getReferences(name);
             if(refs == null){
                 refs = Collections.emptyList();
             }
@@ -274,7 +292,7 @@ public class ChainsTracker implements Ch
      */
     @Override
     public Set<String> getActiveChainNames(){
-        return nameTracker.getNames();
+        return getNameTracker().getNames();
     }
     /**
      * Getter for the map with the names and the {@link ServiceReference} of 
the 
@@ -283,7 +301,7 @@ public class ChainsTracker implements Ch
      * currently active and tracked chains
      */
     public Map<String,ServiceReference> getActiveChainReferences(){
-        return nameTracker.getActive();
+        return getNameTracker().getActive();
     }
     /*
      * (non-Javadoc)
@@ -292,14 +310,14 @@ public class ChainsTracker implements Ch
     @Override
     public Chain getChain(String name){
         ServiceReference ref = getReference(name);
-        return ref == null ? null : (Chain)nameTracker.getService(ref);
+        return ref == null ? null : (Chain)getNameTracker().getService(ref);
     }
     /*
      * (non-Javadoc)
      * @see 
org.apache.stanbol.enhancer.servicesapi.ChainManager#getChain(org.osgi.framework.ServiceReference)
      */
     public Chain getChain(ServiceReference chainReference){
-        return (Chain)nameTracker.getService(chainReference);
+        return (Chain)getNameTracker().getService(chainReference);
     }
 
     /*
@@ -310,7 +328,7 @@ public class ChainsTracker implements Ch
     public Chain getDefault() {
         Chain chain = getChain(DEFAULT_CHAIN_NAME);
         if(chain == null){
-            chain = (Chain)nameTracker.getService();
+            chain = (Chain)getNameTracker().getService();
         }
         return chain;
     }
@@ -322,6 +340,6 @@ public class ChainsTracker implements Ch
      * @return the chain tracking state
      */
     protected final NameBasedServiceTrackingState getChainTrackingState() {
-        return nameTracker;
+        return getNameTracker();
     }
 }

Modified: 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/EnginesTracker.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/EnginesTracker.java?rev=1551511&r1=1551510&r2=1551511&view=diff
==============================================================================
--- 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/EnginesTracker.java
 (original)
+++ 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/EnginesTracker.java
 Tue Dec 17 11:14:51 2013
@@ -74,6 +74,10 @@ public class EnginesTracker implements E
     private Set<String> trackedEngines;
 
     private NameBasedServiceTrackingState nameTracker;
+
+    private boolean initialised;
+
+    private boolean open;
     /**
      * Protected constructor intended to be used by subclasses that do not want
      * to compete the initialisation as part of construction(e.g.
@@ -156,7 +160,7 @@ public class EnginesTracker implements E
      */
     protected void initEngineTracker(BundleContext context, Set<String> 
engineNames, ServiceTrackerCustomizer customiser) {
         if(nameTracker != null){ //if this is a re-initialisation
-            nameTracker.close(); //try to close the existing service tracker 
instance
+            close(); //try to close the existing service tracker instance
         }
         if(context == null){
             throw new IllegalStateException("Unable to initialise tracking if 
NULL is parsed as Bundle Context!");
@@ -204,17 +208,32 @@ public class EnginesTracker implements E
                         "parsed Engine names "+trackedEngines,e);
             }
         }
+        initialised = true;
     }
     /**
      * Starts tracking based on the configuration parsed in the constructor
+     * @return 
      */
-    public void open(){
-        nameTracker.open();
+    public NameBasedServiceTrackingState getNameTracker(){
+        if(!initialised){
+            throw new IllegalStateException("EngiensTracker was not 
initialised or is already closed!");
+        }
+        if(!open){
+            synchronized (this) {
+                if(!open){
+                    nameTracker.open();
+                    open = true;
+                }
+            }
+        }
+        return nameTracker;
     }
     /**
      * Closes this tracker
      */
     public void close(){
+        open = false;
+        initialised = false;
         nameTracker.close();
         nameTracker = null;
     }
@@ -240,7 +259,7 @@ public class EnginesTracker implements E
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
         if(trackedEngines.isEmpty() || trackedEngines.contains(name)){
-            return nameTracker.getReference(name);
+            return getNameTracker().getReference(name);
         } else {
             throw new IllegalArgumentException("The Engine with the parsed 
name '"+
                 name+"' is not tracked (tracked: "+trackedEngines+")!");
@@ -251,7 +270,7 @@ public class EnginesTracker implements E
         if(name == null || name.isEmpty()){
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
-        return nameTracker.getReference(name) != null;
+        return getNameTracker().getReference(name) != null;
     }
     /*
      * (non-Javadoc)
@@ -263,7 +282,7 @@ public class EnginesTracker implements E
             throw new IllegalArgumentException("The parsed name MUST NOT be 
NULL or empty");
         }
         if(trackedEngines.isEmpty() || trackedEngines.contains(name)){
-            List<ServiceReference> refs = nameTracker.getReferences(name);
+            List<ServiceReference> refs = getNameTracker().getReferences(name);
             if(refs == null){
                 refs = Collections.emptyList();
             }
@@ -279,7 +298,7 @@ public class EnginesTracker implements E
      */
     @Override
     public Set<String> getActiveEngineNames(){
-        return nameTracker.getNames();
+        return getNameTracker().getNames();
     }
     /**
      * Getter for the map with the names and the {@link ServiceReference} of 
the 
@@ -288,7 +307,7 @@ public class EnginesTracker implements E
      * currently active and tracked engines
      */
     public Map<String,ServiceReference> getActiveEngineReferences(){
-        return nameTracker.getActive();
+        return getNameTracker().getActive();
     }
     /*
      * (non-Javadoc)
@@ -297,14 +316,14 @@ public class EnginesTracker implements E
     @Override
     public EnhancementEngine getEngine(String name){
         ServiceReference ref = getReference(name);
-        return ref == null ? null : 
(EnhancementEngine)nameTracker.getService(ref);
+        return ref == null ? null : 
(EnhancementEngine)getNameTracker().getService(ref);
     }
     /*
      * (non-Javadoc)
      * @see 
org.apache.stanbol.enhancer.servicesapi.EnhancementEngineManager#getEngine(org.osgi.framework.ServiceReference)
      */
     public EnhancementEngine getEngine(ServiceReference engineReference){
-        return (EnhancementEngine)nameTracker.getService(engineReference);
+        return (EnhancementEngine)getNameTracker().getService(engineReference);
     }
     /**
      * Getter for the name based service tracker. {@link ServiceReference}s
@@ -314,6 +333,6 @@ public class EnginesTracker implements E
      * @return the engine tracking state
      */
     protected final NameBasedServiceTrackingState getEngineTrackingState() {
-        return nameTracker;
+        return getNameTracker();
     }
 }

Modified: 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/NameBasedServiceTrackingState.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/NameBasedServiceTrackingState.java?rev=1551511&r1=1551510&r2=1551511&view=diff
==============================================================================
--- 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/NameBasedServiceTrackingState.java
 (original)
+++ 
stanbol/trunk/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/impl/NameBasedServiceTrackingState.java
 Tue Dec 17 11:14:51 2013
@@ -35,6 +35,8 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Used to manage the state of ServiceReferences for services that are 
@@ -48,6 +50,9 @@ import org.osgi.util.tracker.ServiceTrac
  *
  */
 public class NameBasedServiceTrackingState extends ServiceTracker implements 
ServiceTrackerCustomizer {
+
+    private final Logger log = 
LoggerFactory.getLogger(NameBasedServiceTrackingState.class);
+    
 //    /**
 //     * Allows to forward to an other customiser after this class has finished
 //     * his work
@@ -150,6 +155,7 @@ public class NameBasedServiceTrackingSta
             lock.writeLock().unlock();
         }
         final Object service;
+        log.info(" ... adding service {}",reference);
         if(customizer != null){
             service =  customizer.addingService(reference);
         } else {


Reply via email to