@@ -89,15 +89,31 @@ public boolean registerService(ServiceEndpoint serviceEndpoint) {
89
89
return putIfAbsent ;
90
90
}
91
91
92
- // TODO: refactor, clean also serviceReferencesByQualifier
93
92
@ Override
94
93
public ServiceEndpoint unregisterService (String endpointId ) {
95
94
ServiceEndpoint serviceEndpoint = serviceEndpoints .remove (endpointId );
96
95
if (serviceEndpoint != null ) {
96
+ // Clean exact-match service references
97
+
97
98
serviceReferencesByQualifier .values ().stream ()
98
99
.flatMap (Collection ::stream )
99
100
.filter (sr -> sr .endpointId ().equals (endpointId ))
100
- .forEach (this ::removeServiceReference );
101
+ .forEach (
102
+ value ->
103
+ serviceReferencesByQualifier .compute (
104
+ value .qualifier (), (key , list ) -> removeServiceReference (value , list )));
105
+
106
+ // Clean dynamic-qualifier service references
107
+
108
+ serviceReferencesByPattern .values ().stream ()
109
+ .flatMap (Collection ::stream )
110
+ .filter (sr -> sr .endpointId ().equals (endpointId ))
111
+ .forEach (
112
+ value ->
113
+ serviceReferencesByPattern .compute (
114
+ value .dynamicQualifier (),
115
+ (key , list ) -> removeServiceReference (value , list )));
116
+
101
117
LOGGER .log (Level .DEBUG , "ServiceEndpoint unregistered: {0}" , serviceEndpoint );
102
118
}
103
119
return serviceEndpoint ;
@@ -217,16 +233,12 @@ private void addServiceReference(ServiceReference sr) {
217
233
}
218
234
}
219
235
220
- // TODO: refactor, clean also serviceReferencesByQualifier
221
- private void removeServiceReference (ServiceReference sr ) {
222
- serviceReferencesByQualifier .compute (
223
- sr .qualifier (),
224
- (key , list ) -> {
225
- if (list == null || list .isEmpty ()) {
226
- return null ;
227
- }
228
- list .remove (sr );
229
- return list .isEmpty () ? null : list ;
230
- });
236
+ private static List <ServiceReference > removeServiceReference (
237
+ ServiceReference value , List <ServiceReference > list ) {
238
+ if (list == null || list .isEmpty ()) {
239
+ return null ;
240
+ }
241
+ list .remove (value );
242
+ return list .isEmpty () ? null : list ;
231
243
}
232
244
}
0 commit comments