You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2019/12/04 22:22:45 UTC
[aries-cdi] branch master updated: ARIES-1956 Add the concept of
implicit extensions
This is an automated email from the ASF dual-hosted git repository.
rotty3000 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git
The following commit(s) were added to refs/heads/master by this push:
new 16db78d ARIES-1956 Add the concept of implicit extensions
new 6296af0 Merge pull request #19 from rotty3000/ARIES-1956
16db78d is described below
commit 16db78d9945d80d3b7484aef08c988b65beb9b0c
Author: Raymond Augé <ro...@apache.org>
AuthorDate: Wed Dec 4 16:44:21 2019 -0500
ARIES-1956 Add the concept of implicit extensions
Signed-off-by: Raymond Augé <ro...@apache.org>
---
.../internal/container/ExtensionPhase.java | 26 ++++++++++++++++------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java
index 401139b..bb96c21 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java
@@ -14,7 +14,7 @@
package org.apache.aries.cdi.container.internal.container;
-import static org.apache.aries.cdi.container.internal.util.Filters.*;
+import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
import java.util.Iterator;
import java.util.List;
@@ -33,6 +33,7 @@ import org.apache.aries.cdi.container.internal.util.SRs;
import org.apache.aries.cdi.container.internal.util.Syncro;
import org.apache.aries.cdi.container.internal.util.Throw;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cdi.runtime.dto.ExtensionDTO;
@@ -128,13 +129,13 @@ public class ExtensionPhase extends Phase {
StringBuilder sb = new StringBuilder("(&(objectClass=" + Extension.class.getName() + ")");
- if (templates.size() > 1) sb.append("(|");
+ sb.append("(|");
for (ExtensionTemplateDTO tmpl : templates) {
sb.append(tmpl.serviceFilter);
}
- if (templates.size() > 1) sb.append(")");
+ sb.append("(aries.cdi.extension.mode=implicit))");
sb.append(")");
@@ -156,6 +157,8 @@ public class ExtensionPhase extends Phase {
(e1, e2) -> e1.serviceReference.compareTo(e2.serviceReference)
);
+ private final Filter implicitFilter = asFilter("(aries.cdi.extension.mode=implicit)");
+
private class ExtensionPhaseCustomizer implements ServiceTrackerCustomizer<Extension, ExtendedExtensionDTO> {
@Override
@@ -168,7 +171,15 @@ public class ExtensionPhase extends Phase {
t -> (ExtendedExtensionTemplateDTO)t
).filter(
t -> t.filter.match(reference)
- ).findFirst().get();
+ ).findFirst().orElseGet(() -> {
+ if (implicitFilter.match(reference)) {
+ ExtendedExtensionTemplateDTO implicitTemplate = new ExtendedExtensionTemplateDTO();
+ implicitTemplate.filter = asFilter("(&(aries.cdi.extension.mode=implicit)(service.id=%s))", reference.getProperty(Constants.SERVICE_ID));
+ implicitTemplate.serviceFilter = implicitTemplate.filter.toString();
+ return implicitTemplate;
+ }
+ return null;
+ });
ExtendedExtensionDTO snapshot = snapshots().stream().map(
s -> (ExtendedExtensionDTO)s
@@ -203,7 +214,7 @@ public class ExtensionPhase extends Phase {
next.ifPresent(
next -> submit(next.closeOp(), next::close).then(
s -> {
- if (snapshots().size() == extensionTemplates().size()) {
+ if (extensionTemplates().stream().allMatch(tmpl -> snapshots().stream().anyMatch(ext -> ext.template == tmpl))) {
return submit(next.openOp(), next::open).onFailure(
f -> {
_log.error(l -> l.error("CCR Error in extension open TRACKING {} on {}", reference, bundle(), f));
@@ -238,7 +249,8 @@ public class ExtensionPhase extends Phase {
containerState.bundleContext().ungetService(reference);
- if (!snapshots().removeIf(snap -> ((ExtendedExtensionDTO)snap).serviceReference.equals(reference))) {
+ if (!snapshots().removeIf(snap ->
+ ((ExtendedExtensionDTO)snap).serviceReference.equals(reference))) {
return;
}
@@ -258,7 +270,7 @@ public class ExtensionPhase extends Phase {
next -> {
Promise<Boolean> result = submit(next.closeOp(), next::close).then(
s -> {
- if (snapshots().size() == extensionTemplates().size()) {
+ if (extensionTemplates().stream().allMatch(tmpl -> snapshots().stream().anyMatch(ext -> ext.template == tmpl))) {
return submit(next.openOp(), next::open).onFailure(
f -> {
_log.error(l -> l.error("CCR Error in extension open {} on {}", reference, bundle(), f));