Author: angelo.vandersijpt at luminis.eu
Date: Wed Dec 22 21:38:04 2010
New Revision: 540

Log:
AMDATU-128 The JSP handler now uses only the whiteboard mechanism for servlets.

Modified:
   trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/osgi/Activator.java
   
trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/service/ResourceProviderListener.java

Modified: 
trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/osgi/Activator.java
==============================================================================
--- trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/osgi/Activator.java   
(original)
+++ trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/osgi/Activator.java   
Wed Dec 22 21:38:04 2010
@@ -42,7 +42,6 @@
                 .setImplementation(ResourceProviderListener.class)
                 
.add(createServiceDependency().setService(LogService.class).setRequired(true))
                 
.add(createServiceDependency().setService(HttpContextServiceFactory.class).setRequired(true))
-                
.add(createServiceDependency().setService(HttpService.class).setRequired(true))
                 
.add(createServiceDependency().setService(ResourceProvider.class).setCallbacks("onAdded",
 "onRemoved")));
     }
 

Modified: 
trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/service/ResourceProviderListener.java
==============================================================================
--- 
trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/service/ResourceProviderListener.java
 (original)
+++ 
trunk/amdatu-web/jsp/src/main/java/org/amdatu/web/jsp/service/ResourceProviderListener.java
 Wed Dec 22 21:38:04 2010
@@ -17,15 +17,11 @@
 package org.amdatu.web.jsp.service;
 
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 
 import org.amdatu.web.httpcontext.HttpContextServiceFactory;
@@ -35,9 +31,6 @@
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.service.http.HttpContext;
-import org.osgi.service.http.HttpService;
-import org.osgi.service.http.NamespaceException;
 import org.osgi.service.log.LogService;
 
 /**
@@ -65,14 +58,11 @@
     private volatile BundleContext m_bundleContext;
     private volatile LogService m_logService;
     private volatile HttpContextServiceFactory m_httpContextFactoryService;
-    private volatile HttpService m_httpService;
     private volatile DependencyManager m_dependencyManager;
 
     // Http context variables
     private Component m_httpContextComponent;
-    private HttpContext m_httpContext;
 
-    List<ResourceProvider> m_resourceProviders = new 
ArrayList<ResourceProvider>();
     Map<String, Component> m_components = new HashMap<String, Component>();
 
     // This lock prevents concurrency issues caused by onAdded callback method 
being invoked during service destruction
@@ -82,21 +72,20 @@
     public void init() {
         // Create our own http context and register resources
         m_httpContextComponent = 
m_httpContextFactoryService.create(m_bundleContext, this);
-        m_httpContext = (HttpContext) m_httpContextComponent.getService();
     }
 
     public void destroy() {
         // When this service itself is stopped for any reason, onRemoved will 
not be invoked on the providers
         // and the corresponding JSP servlet would not be unregistered, 
resulting in a 'alias already in use'
-        // error upon starting this service. Therefore we explicitly invoke 
onRemoved on all available
-        // resource providers ourselves here
+        // error upon starting this service.
         // First retrieve a write destruction lock, to prevent new resource 
providers to be registered during destruction.
         WriteLock destructionLock = m_destructionLock.writeLock();
         destructionLock.lock();
         try {
-            while (m_resourceProviders.size() > 0) {
-                onRemoved(m_resourceProviders.get(0));
+            for (Component component : m_components.values()) {
+                m_dependencyManager.remove(component);
             }
+            m_components.clear();
             m_httpContextComponent.stop();
         }
         finally {
@@ -112,12 +101,16 @@
             // After retrieving the destruction lock, be sure the bundle is 
not being stopped (we might have been waiting for
             // the destruction lock to be released by the destroy() method)
             if (m_bundleContext.getBundle().getState() != Bundle.STOPPING) {
-                Dictionary<String, String> initParams = new Hashtable<String, 
String>();
                 String servletAlias = getServletAlias(provider);
 
+                Properties servletProps = new Properties();
+                servletProps.put("alias", servletAlias);
+                servletProps.put("contextId", Activator.RESOURCE_ID);
+
                 // Instantiate new ResourceProviderJspServlet service
                 ResourceProviderJspServlet jspServlet = new 
ResourceProviderJspServlet(provider);
                 Component component = m_dependencyManager.createComponent()
+                        .setInterface(Servlet.class.getName(), servletProps)
                         .setImplementation(jspServlet)
                         .add(m_dependencyManager.createServiceDependency()
                                 .setService(LogService.class)
@@ -127,22 +120,6 @@
                 // Add the component to the dependency manager
                 m_components.put(normalizeResourceId(provider), component);
                 m_dependencyManager.add(component);
-
-                try {
-                    m_httpService.registerServlet(servletAlias, jspServlet, 
initParams, m_httpContext);
-                    m_resourceProviders.add(provider);
-
-                }
-                catch (ServletException e) {
-                    m_logService.log(LogService.LOG_ERROR, "Could not register 
JSP servlet on alias '" + servletAlias
-                        + "' for resource provider " + provider, e);
-                    return;
-                }
-                catch (NamespaceException e) {
-                    m_logService.log(LogService.LOG_ERROR, "Could not register 
JSP servlet on alias '" + servletAlias
-                        + "' for resource provider " + 
provider.getResourceId(), e);
-                    return;
-                }
             }
             else {
                 m_logService.log(LogService.LOG_INFO, "Bundle state of JSP 
bundle is '"
@@ -158,13 +135,8 @@
 
     // This callback is invoked for each ResourceProvider that becomes 
unavailable
     public void onRemoved(ResourceProvider provider) {
-        try {
-            String alias = getServletAlias(provider);
-            m_httpService.unregister(alias);
-            
m_dependencyManager.remove(m_components.get(normalizeResourceId(provider)));
-        }
-        finally {
-            m_resourceProviders.remove(provider);
+        if (m_components.containsKey(normalizeResourceId(provider))) {
+            
m_dependencyManager.remove(m_components.remove(normalizeResourceId(provider)));
         }
         m_logService.log(LogService.LOG_DEBUG, "JSP servlet removed for 
resource provider " + provider.getResourceId());
     }

Reply via email to