Author: ivol
Date: Fri Oct 22 09:19:02 2010
New Revision: 203

Log:
[AMDATU-104] Replaced last service trackers with dependency manager

Removed:
   
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/TenantAwareServiceAdapter.java
   
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/service/TenantAwareServiceAdapterImpl.java
Modified:
   
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/osgi/Activator.java
   
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
   
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/service/WinkRegistrationServiceImpl.java
   trunk/readme.txt

Modified: 
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/osgi/Activator.java
==============================================================================
--- 
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/osgi/Activator.java
  (original)
+++ 
trunk/platform-bundles/tenant-service/src/main/java/org/amdatu/platform/tenant/osgi/Activator.java
  Fri Oct 22 09:19:02 2010
@@ -21,11 +21,9 @@
 import org.amdatu.platform.cassandra.listener.ColumnFamilyAvailable;
 import org.amdatu.platform.cassandra.listener.ColumnFamilyProvider;
 import 
org.amdatu.platform.cassandra.persistencemanager.CassandraPersistenceManager;
-import org.amdatu.platform.tenant.TenantAwareServiceAdapter;
 import org.amdatu.platform.tenant.TenantDAO;
 import org.amdatu.platform.tenant.TenantManagementService;
 import org.amdatu.platform.tenant.dao.TenantDAOCassandraImpl;
-import org.amdatu.platform.tenant.service.TenantAwareServiceAdapterImpl;
 import org.amdatu.platform.tenant.service.TenantColumnFamilyProvider;
 import org.amdatu.platform.tenant.service.TenantManagementServiceImpl;
 import org.apache.felix.dm.DependencyActivatorBase;
@@ -69,12 +67,6 @@
                 .setInterface(TenantManagementService.class.getName(), null)
                 
.add(createServiceDependency().setService(TenantDAO.class).setRequired(true))
                 
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
-
-        // Create and register a tenant aware service adapter
-        manager.add(
-                createComponent()
-                .setImplementation(TenantAwareServiceAdapterImpl.class)
-                .setInterface(TenantAwareServiceAdapter.class.getName(), 
null));
     }
 
     @Override

Modified: 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
==============================================================================
--- 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
  (original)
+++ 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
  Fri Oct 22 09:19:02 2010
@@ -43,6 +43,7 @@
                 .setImplementation(WinkRegistrationServiceImpl.class)
                 
.add(createServiceDependency().setService(LogService.class).setRequired(true))
                 
.add(createServiceDependency().setService(HttpContextServiceFactory.class).setRequired(true))
+                
.add(createServiceDependency().setService("(objectclass=*)").setCallbacks("onAdded",
 "onRemoved"))
                 
.add(createServiceDependency().setService(HttpService.class).setRequired(true)));
     }
 

Modified: 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/service/WinkRegistrationServiceImpl.java
==============================================================================
--- 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/service/WinkRegistrationServiceImpl.java
     (original)
+++ 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/service/WinkRegistrationServiceImpl.java
     Fri Oct 22 09:19:02 2010
@@ -18,18 +18,19 @@
 
 import static org.amdatu.platform.wink.osgi.Activator.RESOURCE_ID;
 
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+
 import javax.servlet.ServletException;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Variant.VariantListBuilder;
 import javax.ws.rs.ext.RuntimeDelegate;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.List;
 
 import org.amdatu.platform.httpcontext.HttpContextServiceFactory;
 import org.amdatu.platform.httpcontext.ResourceProvider;
@@ -37,17 +38,15 @@
 import org.apache.wink.common.internal.runtime.RuntimeDelegateImpl;
 import org.apache.wink.server.utils.RegistrationUtils;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.HttpContext;
 import org.osgi.service.http.HttpService;
 import org.osgi.service.http.NamespaceException;
 import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * This class is responsible for booting Wink as well as registration of 
dynamic resources.
+ * 
  * @author ivol
  */
 public class WinkRegistrationServiceImpl implements ResourceProvider {
@@ -62,12 +61,10 @@
 
     // List of registered servlets, stored to be sure the servlet is registerd 
before unregistering it
     private List<String> m_registeredServlets = new ArrayList<String>();
-    
+
     // Our HTTP context
     private Component m_httpContextComponent;
     private HttpContext m_httpContext;
-    
-    private RESTResourceTracker m_restResourceTracker;
 
     /**
      * The init() method is invoked by the Felix dependency manager.
@@ -76,19 +73,10 @@
         // Create our own http context and register resources
         m_httpContextComponent = 
m_httpContextServiceFactory.create(m_bundleContext, this);
         m_httpContext = (HttpContext) m_httpContextComponent.getService();
-        
+
         // Set the runtime delegate
         setRuntimeDelegate();
 
-        // Create a service tracker to monitor RESTService services.
-        try {
-            Filter filter = m_bundleContext.createFilter("(objectClass=*)");
-            m_restResourceTracker = new RESTResourceTracker(filter);
-            m_restResourceTracker.open(true);
-        } catch (InvalidSyntaxException e) {
-            m_logService.log(LogService.LOG_ERROR, "Could not register REST 
resource service tracker", e);
-        }
-
         m_logService.log(LogService.LOG_INFO, getClass().getName() + " service 
initialized");
     }
 
@@ -102,14 +90,12 @@
             m_httpService.unregister(servletUrl);
             m_registeredServlets.remove(servletUrl);
             m_logService.log(LogService.LOG_INFO, "Wink application 
unregistered REST servlet '" + servletUrl
-                    + "'");
+                + "'");
         }
-        
-        m_restResourceTracker.close();
-        
+
         // Stop the HTTP context service we created ourselves
         m_httpContextComponent.stop();
-        
+
         m_logService.log(LogService.LOG_INFO, getClass().getName() + " service 
destroyed");
     }
 
@@ -128,7 +114,7 @@
         // The nasty fix is to set some dummy RuntimeDelegate first, then set 
the Wink RuntimeDelegateImpl
         RuntimeDelegate.setInstance(new RuntimeDelegate() {
             public <T> T createEndpoint(Application arg0, Class<T> arg1) 
throws IllegalArgumentException,
-                    UnsupportedOperationException {
+                UnsupportedOperationException {
                 return null;
             }
 
@@ -151,87 +137,74 @@
         RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
     }
 
-    /**
-     * Service tracker for REST resources.
-     * @author ivol
-     */
-    private class RESTResourceTracker extends ServiceTracker {
-        /**
-         * Constructor.
-         */
-        private RESTResourceTracker(Filter filter) {
-            super(m_bundleContext, filter, null);
-        }
-
-        public Object addingService(ServiceReference ref) {
-            // Check if this is a JAX-RS annotated class
-            Object service = m_bundleContext.getService(ref);
-            if (service.getClass().getAnnotation(Path.class) != null) {
-                // Register a new REST servlet for this REST resource
-                addRestServlet(service);
-            }
-            return context.getService(ref);
+    public void onAdded(ServiceReference ref, Object service) {
+        // Check if this is a JAX-RS annotated class
+        if (service.getClass().getAnnotation(Path.class) != null) {
+            // Register a new REST servlet for this REST resource
+            addRestServlet(service);
         }
+    }
 
-        public void removedService(ServiceReference ref, Object obj) {
-            // Check if this is a JAX-RS annotated class
-            Object service = m_bundleContext.getService(ref);
-            if (service.getClass().getAnnotation(Path.class) != null) {
-                // Unregister the REST servlet registered earlier this REST 
resource
-                removeRestServlet(service);
-            }
+    public void onRemoved(ServiceReference ref, Object service) {
+        // Check if this is a JAX-RS annotated class
+        if (service.getClass().getAnnotation(Path.class) != null) {
+            // Unregister the REST servlet registered earlier this REST 
resource
+            removeRestServlet(service);
         }
+    }
 
-        /**
-         * Registers a new REST servlet for this resource.
-         * @param service The REST resource service to register the servlet for
-         */
-        private void addRestServlet(Object service) {
-            synchronized (m_registeredServlets) {
-                try {
-                    // Initialize the servlet
-                    Dictionary<String, String> initParams = new 
Hashtable<String, String>();
-                    initParams.put("applicationConfigLocation", APP_RPOPS);
-                    String restPath = 
service.getClass().getAnnotation(Path.class).value();
-                    if (restPath.startsWith("/")) {
-                        restPath = restPath.substring(1);
-                    }
-                    WinkRestServlet restServlet = new 
WinkRestServlet(restPath);
-                    
-                    // FIXME: the only problem with creating a REST servlet 
for each REST resource
-                    // is that the REST resource path appears twice in the 
URL; once to point to a
-                    // particular servlet instance and one for the resource. 
For example a REST URL becomes:
-                    // 
http://localhost/rest/services/sparqlendpoint/sparqlendpoint?executeSPARQLQuery
-                    // instead of
-                    // 
http://localhost/rest/services/sparqlendpoint?executeSPARQLQuery
-                    // There seems to be no proper way to prevent this using 
Apache Wink however.
-                    String servletUrl = "/" + RESOURCE_ID + "/" + restPath;
-                    m_httpService.registerServlet(servletUrl, restServlet, 
initParams, m_httpContext);
-                    String reqProcAttr = restPath;
-                    
RegistrationUtils.registerInstances(restServlet.getServletContext(), 
reqProcAttr, service);
-                    m_registeredServlets.add(servletUrl);
-                    m_logService.log(LogService.LOG_INFO, "Wink application 
registered REST servlet '" + servletUrl
-                            + "'");
-                } catch (ServletException e) {
-                    m_logService.log(LogService.LOG_ERROR, "Failed to register 
servlet for REST service '"
-                            + service.getClass() + "'", e);
-                } catch (NamespaceException e) {
-                    m_logService.log(LogService.LOG_ERROR, "Failed to register 
servlet for REST service '"
-                            + service.getClass() + "'", e);
+    /**
+     * Registers a new REST servlet for this resource.
+     * 
+     * @param service The REST resource service to register the servlet for
+     */
+    private void addRestServlet(Object service) {
+        synchronized (m_registeredServlets) {
+            try {
+                // Initialize the servlet
+                Dictionary<String, String> initParams = new Hashtable<String, 
String>();
+                initParams.put("applicationConfigLocation", APP_RPOPS);
+                String restPath = 
service.getClass().getAnnotation(Path.class).value();
+                if (restPath.startsWith("/")) {
+                    restPath = restPath.substring(1);
                 }
+                WinkRestServlet restServlet = new WinkRestServlet(restPath);
+
+                // FIXME: the only problem with creating a REST servlet for 
each REST resource
+                // is that the REST resource path appears twice in the URL; 
once to point to a
+                // particular servlet instance and one for the resource. For 
example a REST URL becomes:
+                // 
http://localhost/rest/services/sparqlendpoint/sparqlendpoint?executeSPARQLQuery
+                // instead of
+                // 
http://localhost/rest/services/sparqlendpoint?executeSPARQLQuery
+                // There seems to be no proper way to prevent this using 
Apache Wink however.
+                String servletUrl = "/" + RESOURCE_ID + "/" + restPath;
+                m_httpService.registerServlet(servletUrl, restServlet, 
initParams, m_httpContext);
+                String reqProcAttr = restPath;
+                
RegistrationUtils.registerInstances(restServlet.getServletContext(), 
reqProcAttr, service);
+                m_registeredServlets.add(servletUrl);
+                m_logService.log(LogService.LOG_INFO, "Wink application 
registered REST servlet '" + servletUrl
+                    + "'");
+            }
+            catch (ServletException e) {
+                m_logService.log(LogService.LOG_ERROR, "Failed to register 
servlet for REST service '"
+                    + service.getClass() + "'", e);
+            }
+            catch (NamespaceException e) {
+                m_logService.log(LogService.LOG_ERROR, "Failed to register 
servlet for REST service '"
+                    + service.getClass() + "'", e);
             }
         }
+    }
 
-        private void removeRestServlet(Object service) {
-            synchronized (m_registeredServlets) {
-                String restPath = 
service.getClass().getAnnotation(Path.class).value();
-                String servletUrl = "/" + RESOURCE_ID + "/" + restPath;
-                if (m_registeredServlets.contains(servletUrl)) {
-                    m_httpService.unregister(servletUrl);
-                    m_registeredServlets.remove(servletUrl);
-                    m_logService.log(LogService.LOG_INFO, "Wink application 
unregistered REST servlet '" + servletUrl
-                            + "'");
-                }
+    private void removeRestServlet(Object service) {
+        synchronized (m_registeredServlets) {
+            String restPath = 
service.getClass().getAnnotation(Path.class).value();
+            String servletUrl = "/" + RESOURCE_ID + "/" + restPath;
+            if (m_registeredServlets.contains(servletUrl)) {
+                m_httpService.unregister(servletUrl);
+                m_registeredServlets.remove(servletUrl);
+                m_logService.log(LogService.LOG_INFO, "Wink application 
unregistered REST servlet '" + servletUrl
+                    + "'");
             }
         }
     }
@@ -239,7 +212,7 @@
     public URL getResource(String name) {
         return null;
     }
-    
+
     public String getResourceId() {
         return RESOURCE_ID;
     }

Modified: trunk/readme.txt
==============================================================================
--- trunk/readme.txt    (original)
+++ trunk/readme.txt    Fri Oct 22 09:19:02 2010
@@ -52,7 +52,7 @@
 
===================================================================================================
 -4- HARDWARE AND SOFTWARE REQUIREMENTS
 
===================================================================================================
-- JDK or JRE 1.5 or higher
+- JDK or JRE 1.6 or higher
 - Firefox 3 or higher
 
 
===================================================================================================

Reply via email to