You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/05/08 07:04:01 UTC
[6/6] aries-jax-rs-whiteboard git commit: Avoid timeouts
Avoid timeouts
Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/77e9bf3e
Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/77e9bf3e
Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/77e9bf3e
Branch: refs/heads/master
Commit: 77e9bf3e49f067748f5c5ec8a3ae26253e288584
Parents: a1b410f
Author: Carlos Sierra <cs...@apache.org>
Authored: Mon Apr 30 17:28:58 2018 +0200
Committer: Carlos Sierra <cs...@apache.org>
Committed: Tue May 8 09:01:47 2018 +0200
----------------------------------------------------------------------
jax-rs.itests/src/main/java/test/JaxrsTest.java | 92 +++++++++++++++++++-
.../jax/rs/whiteboard/internal/Whiteboard.java | 21 ++---
2 files changed, 96 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77e9bf3e/jax-rs.itests/src/main/java/test/JaxrsTest.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/JaxrsTest.java b/jax-rs.itests/src/main/java/test/JaxrsTest.java
index 35f7aa4..ab5e561 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -48,6 +48,11 @@ import org.apache.cxf.Bus;
import org.apache.cxf.jaxrs.ext.ContextProvider;
import org.apache.cxf.message.Message;
import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.cm.Configuration;
@@ -63,7 +68,8 @@ import org.osgi.service.jaxrs.runtime.dto.ResourceDTO;
import org.osgi.service.jaxrs.runtime.dto.ResourceMethodInfoDTO;
import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO;
import org.osgi.util.promise.Promise;
-
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
import test.types.ConfigurationAwareResource;
import test.types.CxfExtensionTestAddon;
import test.types.ExtensionA;
@@ -1171,7 +1177,9 @@ public class JaxrsTest extends TestHelper {
}
@Test
- public void testDefaultWeb() throws IOException, InterruptedException {
+ public void testDefaultWeb() throws
+ IOException, InterruptedException, InvalidSyntaxException {
+
WebTarget defaultTarget = createDefaultTarget();
assertFalse(
@@ -1190,18 +1198,94 @@ public class JaxrsTest extends TestHelper {
"org.apache.aries.jax.rs.whiteboard.default.application",
"false");
+ CountDownLatch countDownLatch = new CountDownLatch(3);
+
+ ServiceTracker<Object, Object> tracker =
+ new ServiceTracker<>(
+ bundleContext,
+ bundleContext.createFilter(
+ "(&(osgi.jaxrs.name=.default)" +
+ "(objectClass=org.apache.aries.jax.rs.whiteboard." +
+ "internal.cxf.CxfJaxrsServiceRegistrator))"),
+ new ServiceTrackerCustomizer<Object, Object>() {
+
+ @Override
+ public Object addingService(
+ ServiceReference<Object> serviceReference) {
+
+ countDownLatch.countDown();
+
+ return serviceReference;
+ }
+
+ @Override
+ public void modifiedService(
+ ServiceReference<Object> serviceReference,
+ Object o) {
+
+ }
+
+ @Override
+ public void removedService(
+ ServiceReference<Object> serviceReference,
+ Object o) {
+
+ countDownLatch.countDown();
+ }
+ });
+
+ tracker.open();
+
configuration.update(properties);
- Thread.sleep(3000);
+ countDownLatch.await(1, TimeUnit.MINUTES);
assertTrue(
defaultTarget.request().get(String.class).
contains("No services have been found"));
}
finally {
+ CountDownLatch countDownLatch = new CountDownLatch(3);
+
+ ServiceTracker<Object, Object> tracker =
+ new ServiceTracker<>(
+ bundleContext,
+ bundleContext.createFilter(
+ "(&(osgi.jaxrs.name=.default)" +
+ "(objectClass=org.apache.aries.jax.rs.whiteboard." +
+ "internal.cxf.CxfJaxrsServiceRegistrator))"),
+ new ServiceTrackerCustomizer<Object, Object>() {
+
+ @Override
+ public Object addingService(
+ ServiceReference<Object> serviceReference) {
+
+ countDownLatch.countDown();
+
+ return serviceReference;
+ }
+
+ @Override
+ public void modifiedService(
+ ServiceReference<Object> serviceReference,
+ Object o) {
+
+ }
+
+ @Override
+ public void removedService(
+ ServiceReference<Object> serviceReference,
+ Object o) {
+
+ countDownLatch.countDown();
+ }
+ });
+
+ tracker.open();
+
configuration.delete();
- Thread.sleep(3000);
+ countDownLatch.await(1, TimeUnit.MINUTES);
}
assertFalse(
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77e9bf3e/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
index 3e1e2bc..aa53942 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
@@ -590,12 +590,14 @@ public class Whiteboard {
return
getCxfExtensions(tuple.getCachingServiceReference()).
flatMap(extensions ->
- deployRegistrator(extensions, tuple, properties).
+ createRegistrator(extensions, tuple, properties).
flatMap(registrator ->
registerCXFServletService(
registrator.getBus(), properties, contextReference).then(
+ register(
+ CxfJaxrsServiceRegistrator.class, () -> registrator, properties).then(
just(registrator)
- )));
+ ))));
}
public OSGi<Map<String, ServiceTuple<Object>>> getCxfExtensions(
@@ -648,21 +650,14 @@ public class Whiteboard {
getClassLoader();
}
- private OSGi<CxfJaxrsServiceRegistrator> deployRegistrator(
+ private OSGi<CxfJaxrsServiceRegistrator> createRegistrator(
Map<String, ServiceTuple<Object>> extensions,
ServiceTuple<Application> tuple, Supplier<Map<String, ?>> props) {
return
- just(() ->
- new CxfJaxrsServiceRegistrator(
- createBus(extensions), tuple, props.get())).
- flatMap(registrator ->
- onClose(registrator::close).then(
- register(
- CxfJaxrsServiceRegistrator.class, () -> registrator, props).
- then(
- just(registrator)
- )));
+ just(() -> new CxfJaxrsServiceRegistrator(
+ createBus(extensions), tuple, props.get())).
+ effects(__ -> {}, CxfJaxrsServiceRegistrator::close);
}
private OSGi<CachingServiceReference<Object>>