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);
+ }
+
}
}