Repository: aries-jax-rs-whiteboard Updated Branches: refs/heads/master bfa66e0b2 -> 77a17072a
Unify handling of tracked CXFJaxRsServiceRegistrator 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/77a17072 Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/77a17072 Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/77a17072 Branch: refs/heads/master Commit: 77a17072a7d7c965cdbf12f2dc0ea7df09191c7b Parents: bfa66e0 Author: Christian Schneider <[email protected]> Authored: Fri Dec 2 11:57:59 2016 +0100 Committer: Christian Schneider <[email protected]> Committed: Fri Dec 2 11:57:59 2016 +0100 ---------------------------------------------------------------------- .../ApplicationServiceTrackerCustomizer.java | 88 ++----------- .../internal/CXFJaxRsServiceRegistrator.java | 17 +++ .../SingletonServiceTrackerCustomizer.java | 129 ++++--------------- .../internal/TrackedJaxRsRegistrator.java | 45 +++++++ 4 files changed, 97 insertions(+), 182 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77a17072/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java index 264a3fd..ccf2165 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java @@ -17,8 +17,6 @@ package org.apache.aries.jax.rs.whiteboard.internal; -import java.util.HashMap; -import java.util.Hashtable; import java.util.Map; import javax.ws.rs.core.Application; @@ -26,107 +24,43 @@ import javax.ws.rs.core.Application; import org.apache.cxf.Bus; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; import org.osgi.util.tracker.ServiceTrackerCustomizer; public class ApplicationServiceTrackerCustomizer - implements ServiceTrackerCustomizer - <Application, ApplicationServiceTrackerCustomizer.Tracked> { + implements ServiceTrackerCustomizer<Application, TrackedJaxRsRegistrator> { private BundleContext _bundleContext; private Bus _bus; - public ApplicationServiceTrackerCustomizer( - BundleContext bundleContext, Bus bus) { - + public ApplicationServiceTrackerCustomizer(BundleContext bundleContext, Bus bus) { _bundleContext = bundleContext; _bus = bus; } @Override - public Tracked addingService( - ServiceReference<Application> serviceReference) { - - Application application = _bundleContext.getService( - serviceReference); - + public TrackedJaxRsRegistrator addingService(ServiceReference<Application> serviceReference) { + Application application = _bundleContext.getService(serviceReference); try { - String[] propertyKeys = serviceReference.getPropertyKeys(); - - Map<String, Object> properties = new HashMap<>( - propertyKeys.length); - - for (String propertyKey : propertyKeys) { - properties.put( - propertyKey, serviceReference.getProperty(propertyKey)); - } - - properties.put( - "CXF_ENDPOINT_ADDRESS", - serviceReference.getProperty("osgi.jaxrs.application.base"). - toString()); - - CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator = - new CXFJaxRsServiceRegistrator(_bus, application, properties); - - ServiceRegistration<CXFJaxRsServiceRegistrator> - cxfJaxRsServiceRegistratorRegistration = - _bundleContext.registerService( - CXFJaxRsServiceRegistrator.class, - cxfJaxRsServiceRegistrator, - new Hashtable<>(properties)); - - return new Tracked( - cxfJaxRsServiceRegistrator, application, - cxfJaxRsServiceRegistratorRegistration); + Map<String, Object> props = CXFJaxRsServiceRegistrator + .getProperties(serviceReference, "osgi.jaxrs.application.base"); + CXFJaxRsServiceRegistrator registrator = new CXFJaxRsServiceRegistrator(_bus, application, props); + return new TrackedJaxRsRegistrator(registrator, _bundleContext, props); } catch (Throwable e) { _bundleContext.ungetService(serviceReference); - throw e; } } @Override - public void modifiedService( - ServiceReference<Application> serviceReference, Tracked tracked) { - + public void modifiedService(ServiceReference<Application> serviceReference, TrackedJaxRsRegistrator tracked) { removedService(serviceReference, tracked); - addingService(serviceReference); } @Override - public void removedService( - ServiceReference<Application> reference, Tracked tracked) { - + public void removedService(ServiceReference<Application> reference, TrackedJaxRsRegistrator tracked) { _bundleContext.ungetService(reference); - - tracked._cxfJaxRsServiceRegistrator.close(); - - tracked._cxfJaxRsServiceRegistratorServiceRegistration.unregister(); - } - - public static class Tracked { - - private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator; - private final Application _application; - private final ServiceRegistration<CXFJaxRsServiceRegistrator> - _cxfJaxRsServiceRegistratorServiceRegistration; - - public Tracked( - CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator, - Application application, - ServiceRegistration<CXFJaxRsServiceRegistrator> - cxfJaxRsServiceRegistratorServiceRegistration) { - - _cxfJaxRsServiceRegistrator = cxfJaxRsServiceRegistrator; - _application = application; - _cxfJaxRsServiceRegistratorServiceRegistration = - cxfJaxRsServiceRegistratorServiceRegistration; - } - + tracked.close(); } } - - http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77a17072/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java index e6ab988..e3e8583 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java @@ -19,6 +19,7 @@ package org.apache.aries.jax.rs.whiteboard.internal; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.Map; import javax.ws.rs.core.Application; @@ -29,6 +30,7 @@ import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; import org.apache.cxf.jaxrs.provider.json.JSONProvider; +import org.osgi.framework.ServiceReference; public class CXFJaxRsServiceRegistrator { @@ -41,6 +43,21 @@ public class CXFJaxRsServiceRegistrator { rewire(); } + + public static Map<String, Object> getProperties(ServiceReference<?> sref, String addressKey) { + String[] propertyKeys = sref.getPropertyKeys(); + Map<String, Object> properties = new HashMap<String, Object>(propertyKeys.length); + + for (String key : propertyKeys) { + if (key.equals("osgi.jaxrs.resource.base")) { + continue; + } + properties.put(key, sref.getProperty(key)); + } + + properties.put("CXF_ENDPOINT_ADDRESS", sref.getProperty(addressKey).toString()); + return properties; + } public void close() { if (_closed) { http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77a17072/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java index e6c2787..2d1264d 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java @@ -17,143 +17,62 @@ package org.apache.aries.jax.rs.whiteboard.internal; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +import javax.ws.rs.core.Application; + import org.apache.cxf.Bus; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; import org.osgi.util.tracker.ServiceTrackerCustomizer; -import javax.ws.rs.core.Application; -import java.util.Collections; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Map; -import java.util.Set; - public class SingletonServiceTrackerCustomizer - implements ServiceTrackerCustomizer - <Object, SingletonServiceTrackerCustomizer.Tracked> { + implements ServiceTrackerCustomizer<Object, TrackedJaxRsRegistrator> { private BundleContext _bundleContext; private Bus _bus; - public SingletonServiceTrackerCustomizer( - BundleContext bundleContext, Bus bus) { - + public SingletonServiceTrackerCustomizer(BundleContext bundleContext, Bus bus) { _bundleContext = bundleContext; _bus = bus; } @Override - public Tracked addingService( + public TrackedJaxRsRegistrator addingService( ServiceReference<Object> serviceReference) { - final Object service = _bundleContext.getService( - serviceReference); - - try { - String[] propertyKeys = serviceReference.getPropertyKeys(); - - Map<String, Object> properties = new HashMap<>( - propertyKeys.length); - - for (String propertyKey : propertyKeys) { - if (propertyKey.equals("osgi.jaxrs.resource.base")) { - continue; - } - properties.put( - propertyKey, serviceReference.getProperty(propertyKey)); + final Object service = _bundleContext.getService(serviceReference); + Application application = new Application() { + @Override + public Set<Object> getSingletons() { + return Collections.singleton(service); } - - properties.put( - "CXF_ENDPOINT_ADDRESS", - serviceReference.getProperty("osgi.jaxrs.resource.base"). - toString()); - - CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator = - new CXFJaxRsServiceRegistrator( - _bus, - new Application() { - @Override - public Set<Object> getSingletons() { - return Collections.singleton(service); - } - }, - properties); - - return new Tracked( - cxfJaxRsServiceRegistrator, service, - _bundleContext.registerService( - CXFJaxRsServiceRegistrator.class, - cxfJaxRsServiceRegistrator, new Hashtable<>(properties))); + }; + try { + Map<String, Object> properties = CXFJaxRsServiceRegistrator + .getProperties(serviceReference, "osgi.jaxrs.resource.base"); + CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator = + new CXFJaxRsServiceRegistrator(_bus, application, properties); + return new TrackedJaxRsRegistrator(cxfJaxRsServiceRegistrator, _bundleContext, properties); } catch (Exception e) { _bundleContext.ungetService(serviceReference); - throw e; } } @Override - public void modifiedService( - ServiceReference<Object> serviceReference, Tracked tracked) { - + public void modifiedService(ServiceReference<Object> serviceReference, TrackedJaxRsRegistrator tracked) { removedService(serviceReference, tracked); - addingService(serviceReference); } @Override - public void removedService( - ServiceReference<Object> reference, Tracked tracked) { - + public void removedService(ServiceReference<Object> reference, TrackedJaxRsRegistrator tracked) { _bundleContext.ungetService(reference); - - Object service = tracked.getService(); - - CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator = - tracked.getCxfJaxRsServiceRegistrator(); - - cxfJaxRsServiceRegistrator.close(); - - tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister(); - } - - public static class Tracked { - - private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator; - private final Object _service; - private final ServiceRegistration<CXFJaxRsServiceRegistrator> - _cxfJaxRsServiceRegistratorServiceRegistration; - - public Object getService() { - return _service; - } - - public CXFJaxRsServiceRegistrator getCxfJaxRsServiceRegistrator() { - return _cxfJaxRsServiceRegistrator; - } - - public ServiceRegistration<CXFJaxRsServiceRegistrator> - getCxfJaxRsServiceRegistratorServiceRegistration() { - - return _cxfJaxRsServiceRegistratorServiceRegistration; - } - - public Tracked( - CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator, - Object service, - ServiceRegistration<CXFJaxRsServiceRegistrator> - cxfJaxRsServiceRegistratorServiceRegistration) { - - _cxfJaxRsServiceRegistrator = cxfJaxRsServiceRegistrator; - _service = service; - _cxfJaxRsServiceRegistratorServiceRegistration = - cxfJaxRsServiceRegistratorServiceRegistration; - } - + tracked.close(); } } - - http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77a17072/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/TrackedJaxRsRegistrator.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/TrackedJaxRsRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/TrackedJaxRsRegistrator.java new file mode 100644 index 0000000..90ed68e --- /dev/null +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/TrackedJaxRsRegistrator.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.aries.jax.rs.whiteboard.internal; + +import java.util.Hashtable; +import java.util.Map; + +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +public class TrackedJaxRsRegistrator { + private final CXFJaxRsServiceRegistrator _registrator; + private final ServiceRegistration<?> _sreg; + + public TrackedJaxRsRegistrator(CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator, + BundleContext bundleContext, + Map<String, Object> properties) { + _registrator = cxfJaxRsServiceRegistrator; + _sreg = bundleContext. + registerService(CXFJaxRsServiceRegistrator.class, + cxfJaxRsServiceRegistrator, + new Hashtable<>(properties)); + } + + + + public void close() { + _registrator.close(); + _sreg.unregister(); + } +} \ No newline at end of file
