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 2019/05/22 07:16:14 UTC

[aries-jax-rs-whiteboard] branch master updated (64c2461 -> 284ecf5)

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 64c2461  [tidy up] bnd 4.2.0, use bundle annotations where possible, etc.
     new b578664  [ARIES-1914] Store extension resolution state per application
     new 284ecf5  Prevent class loader leak

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:
 .../activator/CxfJaxrsBundleActivator.java         |  2 ++
 .../internal/ApplicationExtensionRegistry.java     | 15 ++++++++++++
 .../internal/AriesJaxrsServiceRuntime.java         | 28 ++++++++++++++++------
 .../jax/rs/whiteboard/internal/Whiteboard.java     | 23 ++++++++++++++----
 4 files changed, 57 insertions(+), 11 deletions(-)


[aries-jax-rs-whiteboard] 01/02: [ARIES-1914] Store extension resolution state per application

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 b5786645e2c54517934c57f6868e99d4326a2dc7
Author: Carlos Sierra <cs...@apache.org>
AuthorDate: Wed May 22 09:12:59 2019 +0200

    [ARIES-1914] Store extension resolution state per application
    
    and also clean the state properly when the application goes away.
---
 .../internal/ApplicationExtensionRegistry.java     | 15 ++++++++++++
 .../internal/AriesJaxrsServiceRuntime.java         | 28 ++++++++++++++++------
 .../jax/rs/whiteboard/internal/Whiteboard.java     | 23 ++++++++++++++----
 3 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationExtensionRegistry.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationExtensionRegistry.java
index c399e40..e8322e1 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationExtensionRegistry.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationExtensionRegistry.java
@@ -159,6 +159,21 @@ public class ApplicationExtensionRegistry implements AutoCloseable {
         }
     }
 
+    public void unregisterApplication(String applicationName) {
+        synchronized (ApplicationExtensionRegistry.this) {
+            _applicationRegisteredExtensions.remove(applicationName);
+
+            Collection<FilteredPublisher> publishers =
+                _applicationPublishers.remove(applicationName);
+
+            if (publishers != null) {
+                for (FilteredPublisher publisher : new HashSet<>(publishers)) {
+                    publisher.close();
+                }
+            }
+        }
+    }
+
     private final HashMap
         <String, Collection<FilteredPublisher>>
             _applicationPublishers;
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxrsServiceRuntime.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxrsServiceRuntime.java
index 319797d..ff2cb20 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxrsServiceRuntime.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxrsServiceRuntime.java
@@ -206,10 +206,13 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
         _dependentApplications.add(applicationReference);
     }
 
-    public void addDependentExtension(
+    public void addDependentExtensionInApplication(
+        CachingServiceReference applicationReference,
         CachingServiceReference<?> cachingServiceReference) {
 
-        _dependentExtensions.add(cachingServiceReference);
+        _dependentExtensions.compute(
+            getServiceName(applicationReference::getProperty),
+            merger(cachingServiceReference));
     }
 
     public void addDependentService(
@@ -450,6 +453,13 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
         }
     }
 
+    public void unregisterApplicationExtensions(
+        CachingServiceReference<?> applicationReference) {
+
+        _dependentExtensions.remove(
+            getServiceName(applicationReference::getProperty));
+    }
+
     private ConcurrentHashMap<String, CachingServiceReference<?>>
         _servicesForName = new ConcurrentHashMap<>();
     private Whiteboard _whiteboard;
@@ -573,10 +583,13 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
         _dependentApplications.remove(applicationReference);
     }
 
-    public void removeDependentExtension(
+    public void removeDependentExtensionFromApplication(
+        CachingServiceReference applicationReference,
         CachingServiceReference<?> cachingServiceReference) {
 
-        _dependentExtensions.remove(cachingServiceReference);
+        _dependentExtensions.compute(
+            getServiceName(applicationReference::getProperty),
+            remover(cachingServiceReference));
     }
 
     public void removeDependentService(
@@ -759,8 +772,8 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
         _defaultApplicationProperties;
     private Set<CachingServiceReference<Application>> _dependentApplications =
         ConcurrentHashMap.newKeySet();
-    private Set<CachingServiceReference<?>> _dependentExtensions =
-        ConcurrentHashMap.newKeySet();
+    private ConcurrentHashMap<String, Collection<CachingServiceReference<?>>>
+        _dependentExtensions = new ConcurrentHashMap<>();
     private Set<CachingServiceReference<?>> _dependentServices =
         ConcurrentHashMap.newKeySet();
     private Collection<CachingServiceReference<Application>>
@@ -1087,7 +1100,8 @@ public class AriesJaxrsServiceRuntime implements JaxrsServiceRuntime {
     }
 
     private Stream<FailedExtensionDTO> dependentExtensionsStreamDTO() {
-        return _dependentExtensions.stream().map(
+        return _dependentExtensions.values().
+            stream().flatMap(Collection::stream).map(
             sr -> buildFailedExtensionDTO(
                 DTOConstants.FAILURE_REASON_REQUIRED_EXTENSIONS_UNAVAILABLE,
                 sr));
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 080304e..df4bfc4 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
@@ -73,7 +73,6 @@ import java.util.stream.Stream;
 
 import static java.lang.String.format;
 import static java.util.stream.Collectors.toMap;
-import static org.apache.aries.component.dsl.OSGi.effect;
 import static org.apache.aries.jax.rs.whiteboard.internal.AriesJaxrsServiceRuntime.getServiceName;
 import static org.apache.aries.jax.rs.whiteboard.internal.utils.LogUtils.ifDebugEnabled;
 import static org.apache.aries.jax.rs.whiteboard.internal.utils.LogUtils.ifErrorEnabled;
@@ -233,8 +232,12 @@ public class Whiteboard {
             service(registratorReference).flatMap(registrator ->
             waitForExtensionDependencies(
                     extensionReference, registratorReference,
-                    _runtime::addDependentExtension,
-                    _runtime::removeDependentExtension).
+                    er ->
+                        _runtime.addDependentExtensionInApplication(
+                            registratorReference, er),
+                    er ->
+                        _runtime.removeDependentExtensionFromApplication(
+                            registratorReference, er)).
                 then(
             safeRegisterExtension(
                 extensionReference, registratorReference::getProperty,
@@ -528,7 +531,10 @@ public class Whiteboard {
                         nothing()
                     )
                 ).
-                flatMap(at ->
+                effects(
+                    __ -> {},
+                    this::clearApplicationState
+            ).flatMap(at ->
             deployApplication(at, application.getContextReference()).foreach(
                 registrator ->
                     _runtime.setApplicationForPath(
@@ -600,6 +606,15 @@ public class Whiteboard {
         return bus;
     }
 
+    private void clearApplicationState(ServiceTuple<Application> tuple) {
+        CachingServiceReference<?>
+            cachingServiceReference = tuple.getCachingServiceReference();
+
+        _runtime.unregisterApplicationExtensions(cachingServiceReference);
+        _applicationExtensionRegistry.unregisterApplication(
+                getServiceName(cachingServiceReference::getProperty));
+    }
+
     private OSGi<CachingServiceReference<CxfJaxrsServiceRegistrator>>
         applicationMatching(String filter) {
 


[aries-jax-rs-whiteboard] 02/02: Prevent class loader leak

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 284ecf55c706299d4f7787cb71c28776bc2615ec
Author: Carlos Sierra <cs...@apache.org>
AuthorDate: Wed May 22 09:13:36 2019 +0200

    Prevent class loader leak
---
 .../aries/jax/rs/whiteboard/activator/CxfJaxrsBundleActivator.java      | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CxfJaxrsBundleActivator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CxfJaxrsBundleActivator.java
index e8bddcf..cc97312 100644
--- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CxfJaxrsBundleActivator.java
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CxfJaxrsBundleActivator.java
@@ -127,6 +127,8 @@ public class CxfJaxrsBundleActivator implements BundleActivator {
         if (_log.isDebugEnabled()) {
             _log.debug("Stopped whiteboard factory");
         }
+
+        RuntimeDelegate.setInstance(null);
     }
     private OSGiResult _defaultOSGiResult;