You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2012/09/25 14:43:44 UTC

svn commit: r1389838 - in /karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression: KarafWithBundleTest.java supports/EchoServlet.java supports/MyServlet.java supports/ServletActivator.java

Author: cschneider
Date: Tue Sep 25 12:43:44 2012
New Revision: 1389838

URL: http://svn.apache.org/viewvc?rev=1389838&view=rev
Log:
KARAF-1861 Using a ServiceTracker to avoid a timing issue with the HttpService. Adding a short sleep in the start of the test to make sure the servicetracker had some time to install the servlet

Added:
    karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/EchoServlet.java
      - copied, changed from r1389757, karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/MyServlet.java
Removed:
    karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/MyServlet.java
Modified:
    karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/KarafWithBundleTest.java
    karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/ServletActivator.java

Modified: karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/KarafWithBundleTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/KarafWithBundleTest.java?rev=1389838&r1=1389837&r2=1389838&view=diff
==============================================================================
--- karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/KarafWithBundleTest.java (original)
+++ karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/KarafWithBundleTest.java Tue Sep 25 12:43:44 2012
@@ -33,7 +33,7 @@ import java.net.URL;
 import java.net.URLConnection;
 
 import org.apache.karaf.tooling.exam.options.KarafDistributionOption;
-import org.apache.karaf.tooling.exam.regression.supports.MyServlet;
+import org.apache.karaf.tooling.exam.regression.supports.EchoServlet;
 import org.apache.karaf.tooling.exam.regression.supports.ServletActivator;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -49,6 +49,9 @@ import org.osgi.framework.Constants;
 public class KarafWithBundleTest {
     @Test
     public void testService() throws Exception {
+        // Give Servicetracker some time to install the servlet
+        Thread.sleep(1000);
+        System.out.println("Trying to get url");
         URL url = new URL("http://localhost:9080/test/services");
         URLConnection conn = url.openConnection();
         conn.setDoOutput(true);
@@ -71,13 +74,13 @@ public class KarafWithBundleTest {
                 .versionAsInProject()).useDeployFolder(false).unpackDirectory(new File("target/paxexam/unpack/")),
             keepRuntimeFolder(),
             scanFeatures(maven().groupId("org.apache.karaf.features").artifactId("standard").type("xml")
-                .classifier("features").versionAsInProject(), "war").start(),
+                .classifier("features").versionAsInProject(), "http").start(),
             // set the system property for pax web
             KarafDistributionOption.editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port",
                 "9080"),
             // create bundle to install
             streamBundle(bundle()
-                .add(MyServlet.class)
+                .add(EchoServlet.class)
                 .add(ServletActivator.class)
                 .set(Constants.BUNDLE_SYMBOLICNAME, "MyBundleTest")
                 .set(Constants.BUNDLE_ACTIVATOR, ServletActivator.class.getName())

Copied: karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/EchoServlet.java (from r1389757, karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/MyServlet.java)
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/EchoServlet.java?p2=karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/EchoServlet.java&p1=karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/MyServlet.java&r1=1389757&r2=1389838&rev=1389838&view=diff
==============================================================================
--- karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/MyServlet.java (original)
+++ karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/EchoServlet.java Tue Sep 25 12:43:44 2012
@@ -26,7 +26,7 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-public class MyServlet extends HttpServlet {
+public class EchoServlet extends HttpServlet {
 
     private static final long serialVersionUID = 1068664967007496710L;
 

Modified: karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/ServletActivator.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/ServletActivator.java?rev=1389838&r1=1389837&r2=1389838&view=diff
==============================================================================
--- karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/ServletActivator.java (original)
+++ karaf/trunk/tooling/exam/regression/src/test/java/org/apache/karaf/tooling/exam/regression/supports/ServletActivator.java Tue Sep 25 12:43:44 2012
@@ -24,6 +24,7 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.HttpContext;
 import org.osgi.service.http.HttpService;
+import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,52 +32,48 @@ public class ServletActivator implements
 
     private static final transient Logger LOG = LoggerFactory.getLogger(ServletActivator.class);
 
-    private static boolean registerService;
+    private HttpServiceTracker tracker;
 
-    /**
-     * HttpService reference.
-     */
-    private ServiceReference httpServiceRef;
-
-    /**
-     * Called when the OSGi framework starts our bundle
-     */
     @Override
     public void start(BundleContext bc) throws Exception {
-        registerServlet(bc);
+        tracker = new HttpServiceTracker(bc);
+        tracker.open();
     }
 
-    /**
-     * Called when the OSGi framework stops our bundle
-     */
     @Override
     public void stop(BundleContext bc) throws Exception {
-        if (httpServiceRef != null) {
-            bc.ungetService(httpServiceRef);
-            httpServiceRef = null;
-        }
+        tracker.close();
     }
 
-    protected void registerServlet(BundleContext bundleContext) throws Exception {
-        httpServiceRef = bundleContext.getServiceReference(HttpService.class.getName());
+    class HttpServiceTracker extends ServiceTracker<HttpService, HttpService> {
+
+        private static final String ALIAS = "/test/services";
+
+        public HttpServiceTracker(BundleContext context) {
+            super(context, HttpService.class, null);
+        }
 
-        if (httpServiceRef != null && !registerService) {
-            LOG.info("Register the servlet service");
-            final HttpService httpService = (HttpService) bundleContext.getService(httpServiceRef);
-            if (httpService != null) {
-                // create a default context to share between registrations
-                final HttpContext httpContext = httpService.createDefaultHttpContext();
-                // register the hello world servlet
-                final Dictionary<String, String> initParams = new Hashtable<String, String>();
-                initParams.put("servlet-name", "TestServlet");
-                httpService.registerServlet(
-                    "/test/services", // alias
-                    new MyServlet(), // register servlet
-                    initParams, // init params
-                    httpContext // http context
-                    );
-                registerService = true;
+        @Override
+        public HttpService addingService(ServiceReference<HttpService> reference) {
+            HttpService httpService = context.getService(reference);
+            final HttpContext httpContext = httpService.createDefaultHttpContext();
+            final Dictionary<String, String> initParams = new Hashtable<String, String>();
+            initParams.put("servlet-name", "TestServlet");
+            try {
+                httpService.registerServlet(ALIAS, new EchoServlet(), initParams, httpContext);
+                LOG.info("Servlet registered successfully");
+            } catch (Exception e) {
+                LOG.error(e.getMessage(), e);
             }
+            return super.addingService(reference);
         }
+
+        @Override
+        public void removedService(ServiceReference<HttpService> reference, HttpService service) {
+            HttpService httpService = context.getService(reference);
+            httpService.unregister(ALIAS);
+            super.removedService(reference, service);
+        }
+
     }
 }