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/10/04 16:20:50 UTC

[aries-jax-rs-whiteboard] branch master updated (9face0a -> 843fd7a)

This is an automated email from the ASF dual-hosted git repository.

csierra pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/aries-jax-rs-whiteboard.git.


    from 9face0a  re-resolve
     new 663414e  [ARIES-1843] Check if any service is unregistering
     new 843fd7a  [ARIES-1842] Handle null returns

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../internal/cxf/CxfJaxrsServiceRegistrator.java   | 42 ++++++++++++++++++----
 .../utils/ServiceReferenceResourceProvider.java    | 14 +++++++-
 .../rs/whiteboard/internal/utils/ServiceTuple.java | 10 +++++-
 .../jax/rs/whiteboard/internal/utils/Utils.java    | 19 ++++++++++
 4 files changed, 77 insertions(+), 8 deletions(-)


[aries-jax-rs-whiteboard] 02/02: [ARIES-1842] Handle null returns

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

csierra pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-jax-rs-whiteboard.git

commit 843fd7a21a6858fa790566dd24d26561193c0166
Author: Carlos Sierra <cs...@apache.org>
AuthorDate: Thu Oct 4 18:19:05 2018 +0200

    [ARIES-1842] Handle null returns
    
    fixes #ARIES-1842
---
 .../whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java  | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
index d275acc..0b6c4b7 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
@@ -211,6 +211,10 @@ public class CxfJaxrsServiceRegistrator {
 
         Application application = _applicationTuple.getService();
 
+        if (application == null) {
+            return;
+        }
+
         if (_services.isEmpty() &&
             application.getSingletons().isEmpty() &&
             application.getClasses().isEmpty()) {
@@ -250,7 +254,13 @@ public class CxfJaxrsServiceRegistrator {
 
             Object service = provider.getService();
 
-            if (service instanceof Feature || service instanceof DynamicFeature) {
+            if (service == null) {
+                continue;
+            }
+
+            if (service instanceof Feature ||
+                service instanceof DynamicFeature) {
+
                 _jaxRsServerFactoryBean.setProvider(service);
 
                 continue;


[aries-jax-rs-whiteboard] 01/02: [ARIES-1843] Check if any service is unregistering

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

csierra pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-jax-rs-whiteboard.git

commit 663414e70301c233ba0a6f47b60502ae15d5d6be
Author: Carlos Sierra <cs...@apache.org>
AuthorDate: Thu Oct 4 18:12:48 2018 +0200

    [ARIES-1843] Check if any service is unregistering
    
    If so, don't request a new instance of it.
    
    fixes #ARIES-1843
---
 .../internal/cxf/CxfJaxrsServiceRegistrator.java   | 30 ++++++++++++++++++----
 .../utils/ServiceReferenceResourceProvider.java    | 14 +++++++++-
 .../rs/whiteboard/internal/utils/ServiceTuple.java | 10 +++++++-
 .../jax/rs/whiteboard/internal/utils/Utils.java    | 19 ++++++++++++++
 4 files changed, 66 insertions(+), 7 deletions(-)

diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
index a70fada..d275acc 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/cxf/CxfJaxrsServiceRegistrator.java
@@ -49,7 +49,6 @@ import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
 import org.apache.cxf.jaxrs.impl.ConfigurableImpl;
-import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.model.ApplicationInfo;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.provider.ProviderFactory.ProviderInfoClassComparator;
@@ -76,7 +75,9 @@ public class CxfJaxrsServiceRegistrator {
         rewire();
     }
 
-    public synchronized void add(ResourceProvider resourceProvider) {
+    public synchronized void add(
+        ServiceReferenceResourceProvider resourceProvider) {
+
         if (_closed) {
             return;
         }
@@ -168,7 +169,9 @@ public class CxfJaxrsServiceRegistrator {
         return classes;
     }
 
-    public synchronized void remove(ResourceProvider resourceProvider) {
+    public synchronized void remove(
+        ServiceReferenceResourceProvider resourceProvider) {
+
         if (_closed) {
             return;
         }
@@ -189,7 +192,14 @@ public class CxfJaxrsServiceRegistrator {
     }
 
     protected synchronized void rewire() {
+        if (!_applicationTuple.isAvailable()) {
+            _applicationTuple.dispose();
+
+            return;
+        }
+
         if (_server != null) {
+
             _server.destroy();
 
             _applicationTuple.refresh();
@@ -234,6 +244,10 @@ public class CxfJaxrsServiceRegistrator {
             CachingServiceReference<?> cachingServiceReference =
                 provider.getCachingServiceReference();
 
+            if (!provider.isAvailable()) {
+                continue;
+            }
+
             Object service = provider.getService();
 
             if (service instanceof Feature || service instanceof DynamicFeature) {
@@ -278,7 +292,12 @@ public class CxfJaxrsServiceRegistrator {
             _jaxRsServerFactoryBean.setFeatures(features);
         }
 
-        for (ResourceProvider resourceProvider: _services) {
+        for (ServiceReferenceResourceProvider resourceProvider: _services) {
+            if (!resourceProvider.isAvailable()) {
+
+                continue;
+            }
+
             _jaxRsServerFactoryBean.setResourceProvider(resourceProvider);
         }
 
@@ -312,7 +331,8 @@ public class CxfJaxrsServiceRegistrator {
     private final ServiceTuple<Application> _applicationTuple;
     private final Bus _bus;
     private final Collection<ServiceTuple<?>> _providers;
-    private final Collection<ResourceProvider> _services = new ArrayList<>();
+    private final Collection<ServiceReferenceResourceProvider>
+        _services = new ArrayList<>();
     private volatile boolean _closed = false;
     private JAXRSServerFactoryBean _jaxRsServerFactoryBean;
     private Map<String, Object> _properties;
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceReferenceResourceProvider.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceReferenceResourceProvider.java
index 126b88a..cbaf5ad 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceReferenceResourceProvider.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceReferenceResourceProvider.java
@@ -38,7 +38,12 @@ public class ServiceReferenceResourceProvider
 
     @Override
     public Object getInstance(Message m) {
-        return _serviceObjects.getService();
+        if (isAvailable()) {
+            return _serviceObjects.getService();
+        }
+        else {
+            return null;
+        }
     }
 
     @Override
@@ -50,6 +55,9 @@ public class ServiceReferenceResourceProvider
     @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     public Class<?> getResourceClass() {
+        if (!isAvailable()) {
+            return null;
+        }
         Object service = _serviceObjects.getService();
 
         try {
@@ -69,4 +77,8 @@ public class ServiceReferenceResourceProvider
         return _serviceReference;
     }
 
+    public boolean isAvailable() {
+        return Utils.isAvailable(_serviceObjects.getServiceReference());
+    }
+
 }
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceTuple.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceTuple.java
index 9efd80b..0224ced 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceTuple.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/ServiceTuple.java
@@ -18,7 +18,9 @@
 package org.apache.aries.jax.rs.whiteboard.internal.utils;
 
 import org.apache.aries.component.dsl.CachingServiceReference;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceObjects;
+import org.osgi.framework.ServiceReference;
 
 public class ServiceTuple<T> implements Comparable<ServiceTuple<T>> {
 
@@ -47,7 +49,9 @@ public class ServiceTuple<T> implements Comparable<ServiceTuple<T>> {
     public void refresh() {
         dispose();
 
-        _service = _serviceObjects.getService();
+        if (isAvailable()) {
+            _service = _serviceObjects.getService();
+        }
     }
 
     public T getService() {
@@ -77,4 +81,8 @@ public class ServiceTuple<T> implements Comparable<ServiceTuple<T>> {
         return _serviceReference;
     }
 
+    public boolean isAvailable() {
+        return Utils.isAvailable(_serviceObjects.getServiceReference());
+    }
+
 }
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/Utils.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/Utils.java
index c9fa124..a5e0e99 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/Utils.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/utils/Utils.java
@@ -19,6 +19,7 @@ package org.apache.aries.jax.rs.whiteboard.internal.utils;
 
 import org.apache.aries.component.dsl.CachingServiceReference;
 import org.apache.aries.component.dsl.OSGi;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
@@ -140,6 +141,24 @@ public class Utils {
         );
     }
 
+    public static boolean isAvailable(ServiceReference<?> serviceReference) {
+        Bundle bundle = serviceReference.getBundle();
+
+        if (bundle == null) {
+            return false;
+        }
+
+        for (ServiceReference<?> registeredService :
+            bundle.getRegisteredServices()) {
+
+            if (registeredService.equals(serviceReference)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public static void mergePropertyMaps(
         Map<String, Object> receptor, Map<String, ?> map) {