Repository: aries-jax-rs-whiteboard
Updated Branches:
  refs/heads/master [created] 837e00b66


cleanup


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/871ac16e
Tree: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/871ac16e
Diff: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/871ac16e

Branch: refs/heads/master
Commit: 871ac16e4c4056becd90be888e7ac9a450ad1959
Parents: 87965d0
Author: Carlos Sierra <[email protected]>
Authored: Wed Sep 7 14:23:48 2016 +0200
Committer: Carlos Sierra <[email protected]>
Committed: Tue Oct 4 15:46:54 2016 +0200

----------------------------------------------------------------------
 example-jaxrs-application/build/tmp/jar/bnd.bnd |   4 +
 .../portal/rest/example/ExampleApplication.java |   1 -
 .../remote/cxf/common/CXFEndpointPublisher.java |  77 -------
 .../remote/cxf/common/ExtensionManager.java     |  43 ----
 .../remote/cxf/common/ServicesRegistrator.java  |   2 +-
 .../CXFEndpointPublisherConfiguration.java      |  41 ----
 .../.lfrbuild-portal                            |   0
 .../.lfrbuild-static                            |   0
 portal-remote-dependency-manager-tccl/bnd.bnd   |   8 -
 .../build.gradle                                |   4 -
 .../portal-remote-dependency-manager-tccl.iml   |  21 --
 .../ServiceReferenceTCCLServiceDependency.java  |  93 ---------
 .../manager/tccl/TCCLDependencyManager.java     |  39 ----
 .../remote/dependency/manager/tccl/packageinfo  |   1 -
 portal-remote-rest-extender/build.gradle        |   1 -
 .../portal-remote-rest-extender.iml             |   1 -
 .../AddonsServiceTrackerCustomizer.java         | 102 ----------
 .../ApplicationServiceTrackerCustomizer.java    | 151 --------------
 .../activator/BusServiceTrackerCustomizer.java  | 105 ----------
 .../activator/CXFJaxRsBundleActivator.java      |   8 +-
 .../ServicesServiceTrackerCustomizer.java       | 105 ----------
 .../SingletonServiceTrackerCustomizer.java      | 159 ---------------
 .../RestExtenderConfiguration.java              |  41 ----
 .../AddonsServiceTrackerCustomizer.java         | 102 ++++++++++
 .../ApplicationServiceTrackerCustomizer.java    | 140 +++++++++++++
 .../internal/BusServiceTrackerCustomizer.java   | 105 ++++++++++
 .../internal/CXFJaxRsServiceRegistrator.java    | 124 ++++--------
 .../rest/extender/internal/RestExtender.java    | 202 -------------------
 .../ServicesServiceTrackerCustomizer.java       | 104 ++++++++++
 .../SingletonServiceTrackerCustomizer.java      | 159 +++++++++++++++
 settings.gradle                                 |   1 -
 test-cxf/build.gradle                           |   1 -
 32 files changed, 663 insertions(+), 1282 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/example-jaxrs-application/build/tmp/jar/bnd.bnd
----------------------------------------------------------------------
diff --git a/example-jaxrs-application/build/tmp/jar/bnd.bnd 
b/example-jaxrs-application/build/tmp/jar/bnd.bnd
new file mode 100644
index 0000000..37c72f2
--- /dev/null
+++ b/example-jaxrs-application/build/tmp/jar/bnd.bnd
@@ -0,0 +1,4 @@
+#Wed Sep 07 14:15:05 CEST 2016
+Bundle-SymbolicName=com.liferay.portal.rest.example
+Bundle-Version=1.0.0
+Bundle-Name=Example OSGi Rest Application

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/example-jaxrs-application/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
----------------------------------------------------------------------
diff --git 
a/example-jaxrs-application/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
 
b/example-jaxrs-application/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
index 4c09a82..25234b2 100644
--- 
a/example-jaxrs-application/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
+++ 
b/example-jaxrs-application/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
@@ -16,7 +16,6 @@ package com.liferay.portal.rest.example;
 
 import org.osgi.service.component.annotations.Component;
 
-import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.GET;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Application;

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.java
 
b/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.java
deleted file mode 100644
index b49b210..0000000
--- 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.cxf.common;
-
-import aQute.bnd.annotation.metatype.Configurable;
-import 
com.liferay.portal.remote.cxf.common.configuration.CXFEndpointPublisherConfiguration;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.ServiceDependency;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class CXFEndpointPublisher {
-
-       private Component _serviceRegistratorComponent;
-
-       protected void update(
-               Component component, Dictionary<String, Object> properties) {
-
-               _dependencyManager = component.getDependencyManager();
-
-               if (_serviceRegistratorComponent != null) {
-                       _serviceRegistratorComponent.stop();
-
-                       _dependencyManager.remove(_serviceRegistratorComponent);
-               }
-
-               _serviceRegistratorComponent = 
_dependencyManager.createComponent();
-
-               CXFEndpointPublisherConfiguration 
cxfEndpointPublisherConfiguration =
-                       Configurable.createConfigurable(
-                               CXFEndpointPublisherConfiguration.class, 
properties);
-
-               ServicesRegistrator servicesRegistrator = new 
ServicesRegistrator(
-                       _dependencyManager.getBundleContext(), 
(Hashtable)properties);
-
-               
_serviceRegistratorComponent.setImplementation(servicesRegistrator);
-
-               String[] extensions = 
cxfEndpointPublisherConfiguration.extensions();
-
-               if (extensions != null) {
-                       for (String extension : extensions) {
-                               ServiceDependency serviceDependency =
-                                       
_dependencyManager.createServiceDependency();
-
-                               serviceDependency.setCallbacks(
-                                       servicesRegistrator, "addExtension", 
"-");
-                               serviceDependency.setRequired(true);
-                               serviceDependency.setService(Object.class, 
extension);
-
-                               
_serviceRegistratorComponent.add(serviceDependency);
-                       }
-               }
-
-               _dependencyManager.add(_serviceRegistratorComponent);
-       }
-
-       private DependencyManager _dependencyManager;
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ExtensionManager.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ExtensionManager.java
 
b/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ExtensionManager.java
deleted file mode 100644
index 7a16185..0000000
--- 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ExtensionManager.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.cxf.common;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class ExtensionManager {
-
-       public Map<Class<?>, Object> getExtensions() {
-               return _extensions;
-       }
-
-       protected void addExtension(
-               Map<String, Object> properties, Object extension) {
-
-               Class<?> extensionClass = (Class<?>)properties.get(
-                       "soap.extension.class");
-
-               _extensions.put(extensionClass, extension);
-       }
-
-       protected void removeExtension(Object extension) {
-       }
-
-       private final Map<Class<?>, Object> _extensions = new HashMap<>();
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ServicesRegistrator.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ServicesRegistrator.java
 
b/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ServicesRegistrator.java
index d788694..68d79f6 100644
--- 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ServicesRegistrator.java
+++ 
b/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/ServicesRegistrator.java
@@ -155,7 +155,7 @@ public class ServicesRegistrator {
        }
 
        private static final Logger _logger = LoggerFactory.getLogger(
-               CXFEndpointPublisher.class);
+               ServicesRegistrator.class);
 
        private final BundleContext _bundleContext;
        private ServiceRegistration<Bus> _busServiceRegistration;

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.java
 
b/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.java
deleted file mode 100644
index e59b2c0..0000000
--- 
a/portal-remote-cxf-common/src/main/java/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.cxf.common.configuration;
-
-import aQute.bnd.annotation.metatype.Meta;
-
-/**
- * @author Carlos Sierra Andrés
- */
[email protected](
-       factory = true,
-       id = 
"com.liferay.portal.remote.cxf.common.configuration.CXFEndpointPublisherConfiguration",
-       localization = "content/Language", name = 
"cxf.endpoint.configuration.name"
-)
-public interface CXFEndpointPublisherConfiguration {
-
-       @Meta.AD(required = true)
-       public String contextPath();
-
-       @Meta.AD(
-               deflt = 
"auth.verifier.PortalSessionAuthVerifier.urls.includes=*",
-               name = "auth-verifier-properties", required = false
-       )
-       public String[] authVerifierProperties();
-
-       @Meta.AD(name = "%required-extensions", required = false)
-       public String[] extensions();
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/.lfrbuild-portal
----------------------------------------------------------------------
diff --git a/portal-remote-dependency-manager-tccl/.lfrbuild-portal 
b/portal-remote-dependency-manager-tccl/.lfrbuild-portal
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/.lfrbuild-static
----------------------------------------------------------------------
diff --git a/portal-remote-dependency-manager-tccl/.lfrbuild-static 
b/portal-remote-dependency-manager-tccl/.lfrbuild-static
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/bnd.bnd
----------------------------------------------------------------------
diff --git a/portal-remote-dependency-manager-tccl/bnd.bnd 
b/portal-remote-dependency-manager-tccl/bnd.bnd
deleted file mode 100644
index f18acd6..0000000
--- a/portal-remote-dependency-manager-tccl/bnd.bnd
+++ /dev/null
@@ -1,8 +0,0 @@
-Bundle-Name: Liferay Portal Remote Dependency Manager TCCL
-Bundle-SymbolicName: com.liferay.portal.remote.dependency.manager.tccl
-Bundle-Version: 2.0.2
-Export-Package: com.liferay.portal.remote.dependency.manager.tccl
-Fragment-Host: org.apache.felix.dependencymanager
-Import-Package: org.osgi.framework.*
-Liferay-Releng-Module-Group-Description:
-Liferay-Releng-Module-Group-Title: Remote Service Engines
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/build.gradle
----------------------------------------------------------------------
diff --git a/portal-remote-dependency-manager-tccl/build.gradle 
b/portal-remote-dependency-manager-tccl/build.gradle
deleted file mode 100644
index f0a5711..0000000
--- a/portal-remote-dependency-manager-tccl/build.gradle
+++ /dev/null
@@ -1,4 +0,0 @@
-dependencies {
-       compile group: "org.apache.felix", name: 
"org.apache.felix.dependencymanager", version: "3.2.0"
-       compile group: "org.osgi", name: "org.osgi.core", version: "5.0.0"
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/portal-remote-dependency-manager-tccl.iml
----------------------------------------------------------------------
diff --git 
a/portal-remote-dependency-manager-tccl/portal-remote-dependency-manager-tccl.iml
 
b/portal-remote-dependency-manager-tccl/portal-remote-dependency-manager-tccl.iml
deleted file mode 100644
index 0a59f4b..0000000
--- 
a/portal-remote-dependency-manager-tccl/portal-remote-dependency-manager-tccl.iml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.id=":portal-remote-dependency-manager-tccl" 
external.linked.project.path="$MODULE_DIR$" 
external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" 
external.system.module.group="osgi-rest" 
external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/build/classes/main" />
-    <output-test url="file://$MODULE_DIR$/build/classes/test" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" 
isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" 
isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" 
type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" 
type="java-test-resource" />
-      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
-      <excludeFolder url="file://$MODULE_DIR$/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Gradle: 
org.apache.felix:org.apache.felix.dependencymanager:3.2.0" level="project" />
-    <orderEntry type="library" name="Gradle: org.osgi:org.osgi.core:5.0.0" 
level="project" />
-    <orderEntry type="library" name="Gradle: 
org.osgi:org.osgi.compendium:4.2.0" level="project" />
-  </component>
-</module>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/ServiceReferenceTCCLServiceDependency.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/ServiceReferenceTCCLServiceDependency.java
 
b/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/ServiceReferenceTCCLServiceDependency.java
deleted file mode 100644
index c166fb5..0000000
--- 
a/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/ServiceReferenceTCCLServiceDependency.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.dependency.manager.tccl;
-
-import org.apache.felix.dm.DependencyService;
-import org.apache.felix.dm.impl.Logger;
-import org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.wiring.BundleWiring;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class ServiceReferenceTCCLServiceDependency
-       extends ServiceDependencyImpl {
-
-       public ServiceReferenceTCCLServiceDependency(
-               BundleContext bundleContext, Logger logger) {
-
-               super(bundleContext, logger);
-       }
-
-       @Override
-       @SuppressWarnings("rawtypes")
-       public void invoke(
-               Object[] callbackInstances, DependencyService dependencyService,
-               ServiceReference serviceReference, Object service, String name) 
{
-
-               Thread currentThread = Thread.currentThread();
-
-               ClassLoader contextClassLoader = 
currentThread.getContextClassLoader();
-
-               Bundle bundle = serviceReference.getBundle();
-
-               BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
-
-               
currentThread.setContextClassLoader(bundleWiring.getClassLoader());
-
-               try {
-                       super.invoke(
-                               callbackInstances, dependencyService, 
serviceReference, service,
-                               name);
-               }
-               finally {
-                       currentThread.setContextClassLoader(contextClassLoader);
-               }
-       }
-
-       @Override
-       @SuppressWarnings("rawtypes")
-       public void invokeSwappedCallback(
-               Object[] callbackInstances, DependencyService component,
-               ServiceReference previousServiceReference, Object 
previousService,
-               ServiceReference currentServiceReference, Object currentService,
-               String swapCallback) {
-
-               Thread currentThread = Thread.currentThread();
-
-               ClassLoader contextClassLoader = 
currentThread.getContextClassLoader();
-
-               Bundle bundle = currentServiceReference.getBundle();
-
-               BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
-
-               
currentThread.setContextClassLoader(bundleWiring.getClassLoader());
-
-               try {
-                       super.invokeSwappedCallback(
-                               callbackInstances, component, 
previousServiceReference,
-                               previousService, currentServiceReference, 
currentService,
-                               swapCallback);
-               }
-               finally {
-                       currentThread.setContextClassLoader(contextClassLoader);
-               }
-       }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/TCCLDependencyManager.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/TCCLDependencyManager.java
 
b/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/TCCLDependencyManager.java
deleted file mode 100644
index 9aa9264..0000000
--- 
a/portal-remote-dependency-manager-tccl/src/main/java/com/liferay/portal/remote/dependency/manager/tccl/TCCLDependencyManager.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.dependency.manager.tccl;
-
-import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.ServiceDependency;
-import org.apache.felix.dm.impl.Logger;
-
-import org.osgi.framework.BundleContext;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class TCCLDependencyManager extends DependencyManager {
-
-       public TCCLDependencyManager(BundleContext bundleContext) {
-               super(bundleContext);
-       }
-
-       public ServiceDependency createTCCLServiceDependency() {
-               return new ServiceReferenceTCCLServiceDependency(
-                       getBundleContext(), _logger);
-       }
-
-       private final Logger _logger = new Logger(getBundleContext());
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-dependency-manager-tccl/src/main/resources/com/liferay/portal/remote/dependency/manager/tccl/packageinfo
----------------------------------------------------------------------
diff --git 
a/portal-remote-dependency-manager-tccl/src/main/resources/com/liferay/portal/remote/dependency/manager/tccl/packageinfo
 
b/portal-remote-dependency-manager-tccl/src/main/resources/com/liferay/portal/remote/dependency/manager/tccl/packageinfo
deleted file mode 100644
index 5897e96..0000000
--- 
a/portal-remote-dependency-manager-tccl/src/main/resources/com/liferay/portal/remote/dependency/manager/tccl/packageinfo
+++ /dev/null
@@ -1 +0,0 @@
-version 1.0.2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/build.gradle
----------------------------------------------------------------------
diff --git a/portal-remote-rest-extender/build.gradle 
b/portal-remote-rest-extender/build.gradle
index 1a59902..2f601fa 100644
--- a/portal-remote-rest-extender/build.gradle
+++ b/portal-remote-rest-extender/build.gradle
@@ -1,7 +1,6 @@
 dependencies {
        compile group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: 
"3.1.0"
        compile group: "com.liferay", name: 
"com.liferay.portal.remote.cxf.jaxrs.common", version: "2.0.0"
-       compile group: "com.liferay", name: 
"com.liferay.portal.remote.dependency.manager.tccl", version: "2.0.0"
        compile group: "javax.ws.rs", name: "javax.ws.rs-api", version: "2.0.1"
        compile group: "org.apache.cxf", name: "cxf-core", version: "3.1.7"
        compile group: "org.apache.cxf", name: "cxf-rt-frontend-jaxrs", 
version: "3.1.7"

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/portal-remote-rest-extender.iml
----------------------------------------------------------------------
diff --git a/portal-remote-rest-extender/portal-remote-rest-extender.iml 
b/portal-remote-rest-extender/portal-remote-rest-extender.iml
index d376453..16c78d3 100644
--- a/portal-remote-rest-extender/portal-remote-rest-extender.iml
+++ b/portal-remote-rest-extender/portal-remote-rest-extender.iml
@@ -17,7 +17,6 @@
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" name="Gradle: 
biz.aQute.bnd:biz.aQute.bndlib:3.1.0" level="project" />
     <orderEntry type="library" name="Gradle: 
com.liferay:com.liferay.portal.remote.cxf.jaxrs.common:2.0.0" level="project" />
-    <orderEntry type="library" name="Gradle: 
com.liferay:com.liferay.portal.remote.dependency.manager.tccl:2.0.0" 
level="project" />
     <orderEntry type="library" name="Gradle: 
javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
     <orderEntry type="library" name="Gradle: org.apache.cxf:cxf-core:3.1.7" 
level="project" />
     <orderEntry type="library" name="Gradle: 
org.apache.cxf:cxf-rt-frontend-jaxrs:3.1.7" level="project" />

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/AddonsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/AddonsServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/AddonsServiceTrackerCustomizer.java
deleted file mode 100644
index c255313..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/AddonsServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- * <p>
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- * <p>
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.activator;
-
-import 
com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-import javax.ws.rs.ext.Provider;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class AddonsServiceTrackerCustomizer
-       implements ServiceTrackerCustomizer<CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator> {
-
-       private final BundleContext _bundleContext;
-       private final ClassLoader _classLoader;
-       private final Class<?> _serviceClass;
-       private final Object _service;
-
-       public AddonsServiceTrackerCustomizer(
-               BundleContext bundleContext, ClassLoader classLoader,
-               Object service) {
-
-               _bundleContext = bundleContext;
-               _classLoader = classLoader;
-               _service = service;
-
-               _serviceClass = service.getClass();
-       }
-
-       @Override
-       public CXFJaxRsServiceRegistrator addingService(
-               ServiceReference<CXFJaxRsServiceRegistrator> reference) {
-
-               Thread thread = Thread.currentThread();
-
-               ClassLoader contextClassLoader =
-                       thread.getContextClassLoader();
-
-               CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
-                       _bundleContext.getService(reference);
-
-               try {
-                       thread.setContextClassLoader(_classLoader);
-
-                       if (_serviceClass.isAnnotationPresent(Provider.class)) {
-                               
cxfJaxRsServiceRegistrator.addProvider(_service);
-                       } else {
-                               cxfJaxRsServiceRegistrator.addService(_service);
-                       }
-
-                       return cxfJaxRsServiceRegistrator;
-               }
-               catch (Exception e) {
-                       _bundleContext.ungetService(reference);
-
-                       throw e;
-               }
-               finally {
-                       thread.setContextClassLoader(contextClassLoader);
-               }
-       }
-
-       @Override
-       public void modifiedService(
-               ServiceReference<CXFJaxRsServiceRegistrator> reference,
-               CXFJaxRsServiceRegistrator registrator) {
-
-               removedService(reference, registrator);
-
-               addingService(reference);
-       }
-
-       @Override
-       public void removedService(
-               ServiceReference<CXFJaxRsServiceRegistrator> reference,
-               CXFJaxRsServiceRegistrator registrator) {
-
-               if (_serviceClass.isAnnotationPresent(Provider.class)) {
-                       registrator.removeProvider(_service);
-               } else {
-                       registrator.removeService(_service);
-               }
-
-               _bundleContext.ungetService(reference);
-       }
-}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ApplicationServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ApplicationServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ApplicationServiceTrackerCustomizer.java
deleted file mode 100644
index b554cf5..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ApplicationServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- * <p>
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- * <p>
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.activator;
-
-import 
com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
-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.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-import javax.ws.rs.core.Application;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-/**
- * @author Carlos Sierra Andrés
- */
-class ApplicationServiceTrackerCustomizer
-       implements ServiceTrackerCustomizer
-               <Application, ApplicationServiceTrackerCustomizer.Tracked> {
-
-       private BundleContext _bundleContext;
-       private Bus _bus;
-
-       public ApplicationServiceTrackerCustomizer(
-               BundleContext bundleContext, Bus bus) {
-
-               _bundleContext = bundleContext;
-               _bus = bus;
-       }
-
-       @Override
-       public Tracked 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(properties);
-
-                       cxfJaxRsServiceRegistrator.addBus(_bus);
-                       cxfJaxRsServiceRegistrator.addApplication(application);
-
-                       return new Tracked(
-                               cxfJaxRsServiceRegistrator, application,
-                               _bundleContext.registerService(
-                                       CXFJaxRsServiceRegistrator.class,
-                                       cxfJaxRsServiceRegistrator, new 
Hashtable<>(properties)));
-               }
-               catch (Exception e) {
-                       _bundleContext.ungetService(serviceReference);
-
-                       throw e;
-               }
-       }
-
-       @Override
-       public void modifiedService(
-               ServiceReference<Application> serviceReference, Tracked 
tracked) {
-
-               removedService(serviceReference, tracked);
-               addingService(serviceReference);
-       }
-
-       @Override
-       public void removedService(
-               ServiceReference<Application> reference, Tracked tracked) {
-
-               _bundleContext.ungetService(reference);
-
-               Application application = tracked.getApplication();
-
-               CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
-                       tracked.getCxfJaxRsServiceRegistrator();
-
-               cxfJaxRsServiceRegistrator.removeApplication(application);
-
-               cxfJaxRsServiceRegistrator.removeBus(_bus);
-
-               
tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister();
-       }
-
-       public static class Tracked {
-
-               private final CXFJaxRsServiceRegistrator 
_cxfJaxRsServiceRegistrator;
-               private final Application _application;
-               private final ServiceRegistration<CXFJaxRsServiceRegistrator>
-                       _cxfJaxRsServiceRegistratorServiceRegistration;
-
-               public Application getApplication() {
-                       return _application;
-               }
-
-               public CXFJaxRsServiceRegistrator 
getCxfJaxRsServiceRegistrator() {
-                       return _cxfJaxRsServiceRegistrator;
-               }
-
-               public ServiceRegistration<CXFJaxRsServiceRegistrator>
-                       getCxfJaxRsServiceRegistratorServiceRegistration() {
-
-                       return _cxfJaxRsServiceRegistratorServiceRegistration;
-               }
-
-               public Tracked(
-                       CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator,
-                       Application application,
-                       ServiceRegistration<CXFJaxRsServiceRegistrator>
-                               cxfJaxRsServiceRegistratorServiceRegistration) {
-
-                       _cxfJaxRsServiceRegistrator = 
cxfJaxRsServiceRegistrator;
-                       _application = application;
-                       _cxfJaxRsServiceRegistratorServiceRegistration =
-                               cxfJaxRsServiceRegistratorServiceRegistration;
-               }
-
-       }
-}
-
-

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/BusServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/BusServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/BusServiceTrackerCustomizer.java
deleted file mode 100644
index 6832b18..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/BusServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- * <p>
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- * <p>
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.activator;
-
-import org.apache.cxf.Bus;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-import javax.ws.rs.core.Application;
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class BusServiceTrackerCustomizer
-       implements ServiceTrackerCustomizer<Bus, Collection<ServiceTracker<?, 
?>>> {
-
-       private BundleContext _bundleContext;
-
-       public BusServiceTrackerCustomizer(BundleContext bundleContext) {
-               _bundleContext = bundleContext;
-       }
-
-       @Override
-       public Collection<ServiceTracker<?, ?>>
-       addingService(ServiceReference<Bus> serviceReference) {
-
-               Bus bus = _bundleContext.getService(serviceReference);
-
-               try {
-                       ServiceTracker<Application,?> applicationTracker =
-                               new ServiceTracker<>(_bundleContext, 
getApplicationFilter(),
-                                       new ApplicationServiceTrackerCustomizer(
-                                               _bundleContext, bus));
-
-                       applicationTracker.open();
-
-                       ServiceTracker<Object, ?> singletonsServiceTracker =
-                               new ServiceTracker<>(_bundleContext, 
getSingletonsFilter(),
-                                       new 
SingletonServiceTrackerCustomizer(_bundleContext, bus));
-
-                       singletonsServiceTracker.open();
-
-                       return Arrays.asList(applicationTracker, 
singletonsServiceTracker);
-               }
-               catch (InvalidSyntaxException ise) {
-                       throw new RuntimeException(ise);
-               }
-               catch (Exception e) {
-                       _bundleContext.ungetService(serviceReference);
-
-                       throw e;
-               }
-       }
-
-       private Filter getApplicationFilter() throws InvalidSyntaxException {
-               return _bundleContext.createFilter(
-                       "(&(objectClass=" + Application.class.getName() + ")" +
-                               "(osgi.jaxrs.application.base=*))");
-       }
-
-       private Filter getSingletonsFilter() throws InvalidSyntaxException {
-               return 
_bundleContext.createFilter("(osgi.jaxrs.resource.base=*)");
-       }
-
-       @Override
-       public void modifiedService(
-               ServiceReference<Bus> reference,
-               Collection<ServiceTracker<?, ?>> serviceTrackers) {
-
-               removedService(reference, serviceTrackers);
-
-               addingService(reference);
-       }
-
-       @Override
-       public void removedService(
-               ServiceReference<Bus> serviceReference,
-               Collection<ServiceTracker<?, ?>> serviceTrackers) {
-
-               _bundleContext.ungetService(serviceReference);
-
-               for (ServiceTracker<?, ?> serviceTracker : serviceTrackers) {
-                       serviceTracker.close();
-               }
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
index 6950277..04017d6 100644
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
@@ -16,6 +16,8 @@ package com.liferay.portal.remote.rest.extender.activator;
 
 import javax.ws.rs.ext.RuntimeDelegate;
 
+import 
com.liferay.portal.remote.rest.extender.internal.BusServiceTrackerCustomizer;
+import 
com.liferay.portal.remote.rest.extender.internal.ServicesServiceTrackerCustomizer;
 import org.apache.cxf.Bus;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -27,8 +29,8 @@ import org.osgi.util.tracker.ServiceTracker;
  */
 public class CXFJaxRsBundleActivator implements BundleActivator {
 
-       private ServiceTracker<?, ?> _singletonsTracker;
        private ServiceTracker<?, ?> _busServiceTracker;
+       private ServiceTracker<?, ?> _singletonsTracker;
 
        @Override
        public void start(BundleContext bundleContext) throws Exception {
@@ -68,9 +70,9 @@ public class CXFJaxRsBundleActivator implements 
BundleActivator {
 
        @Override
        public void stop(BundleContext context) throws Exception {
-               _singletonsTracker.close();
-
                _busServiceTracker.close();
+
+               _singletonsTracker.close();
        }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesServiceTrackerCustomizer.java
deleted file mode 100644
index df57cc6..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- * <p>
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- * <p>
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.activator;
-
-import 
com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.wiring.BundleWiring;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-/**
- * @author Carlos Sierra Andrés
- */
-class ServicesServiceTrackerCustomizer
-       implements ServiceTrackerCustomizer
-               <Object, ServiceTracker
-                       <CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator>> {
-
-       private final BundleContext _bundleContext;
-
-       public ServicesServiceTrackerCustomizer(BundleContext bundleContext) {
-               _bundleContext = bundleContext;
-       }
-
-       @Override
-       public ServiceTracker
-               <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
-       addingService(ServiceReference<Object> reference) {
-
-               String applicationSelector =
-                       
reference.getProperty("jaxrs.application.select").toString();
-
-               Bundle bundle = reference.getBundle();
-
-               BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
-
-               ClassLoader classLoader = bundleWiring.getClassLoader();
-
-               Object service = _bundleContext.getService(reference);
-
-               try {
-                       Filter filter = _bundleContext.createFilter(
-                               "(&(objectClass=" + 
CXFJaxRsServiceRegistrator.class.getName() + ")" +
-                                       applicationSelector + ")");
-
-                       ServiceTracker
-                               <CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator>
-                               serviceTracker = new ServiceTracker<>(
-                               _bundleContext, filter,
-                               new AddonsServiceTrackerCustomizer(
-                                       _bundleContext, classLoader,
-                                       service));
-
-                       serviceTracker.open();
-
-                       return serviceTracker;
-               }
-               catch (InvalidSyntaxException ise) {
-                       _bundleContext.ungetService(reference);
-
-                       throw new RuntimeException(ise);
-               }
-       }
-
-       @Override
-       public void modifiedService(
-               ServiceReference<Object> reference,
-               ServiceTracker
-                       <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
-                       serviceTracker) {
-
-               removedService(reference, serviceTracker);
-
-               addingService(reference);
-       }
-
-       @Override
-       public void removedService(
-               ServiceReference<Object> reference,
-               ServiceTracker
-                       <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
-                       serviceTracker) {
-
-               serviceTracker.close();
-
-               _bundleContext.ungetService(reference);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/SingletonServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/SingletonServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/SingletonServiceTrackerCustomizer.java
deleted file mode 100644
index e65f3a2..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/SingletonServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- * <p>
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- * <p>
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.activator;
-
-import 
com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
-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;
-
-/**
- * @author Carlos Sierra Andrés
- */
-class SingletonServiceTrackerCustomizer
-       implements ServiceTrackerCustomizer
-               <Object, SingletonServiceTrackerCustomizer.Tracked> {
-
-       private BundleContext _bundleContext;
-       private Bus _bus;
-
-       public SingletonServiceTrackerCustomizer(
-               BundleContext bundleContext, Bus bus) {
-
-               _bundleContext = bundleContext;
-               _bus = bus;
-       }
-
-       @Override
-       public Tracked 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) {
-                               properties.put(
-                                       propertyKey, 
serviceReference.getProperty(propertyKey));
-                       }
-
-                       properties.put(
-                               "CXF_ENDPOINT_ADDRESS",
-                               
serviceReference.getProperty("osgi.jaxrs.resource.base").
-                                       toString());
-
-                       CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
-                               new CXFJaxRsServiceRegistrator(properties);
-
-                       cxfJaxRsServiceRegistrator.addBus(_bus);
-                       cxfJaxRsServiceRegistrator.addApplication(new 
Application() {
-                               @Override
-                               public Set<Object> getSingletons() {
-                                       return Collections.singleton(service);
-                               }
-                       });
-
-                       return new Tracked(
-                               cxfJaxRsServiceRegistrator, service,
-                               _bundleContext.registerService(
-                                       CXFJaxRsServiceRegistrator.class,
-                                       cxfJaxRsServiceRegistrator, new 
Hashtable<>(properties)));
-               }
-               catch (Exception e) {
-                       _bundleContext.ungetService(serviceReference);
-
-                       throw e;
-               }
-       }
-
-       @Override
-       public void modifiedService(
-               ServiceReference<Object> serviceReference, Tracked tracked) {
-
-               removedService(serviceReference, tracked);
-
-               addingService(serviceReference);
-       }
-
-       @Override
-       public void removedService(
-               ServiceReference<Object> reference, Tracked tracked) {
-
-               _bundleContext.ungetService(reference);
-
-               Object service = tracked.getService();
-
-               CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
-                       tracked.getCxfJaxRsServiceRegistrator();
-
-               cxfJaxRsServiceRegistrator.removeService(service);
-
-               cxfJaxRsServiceRegistrator.removeBus(_bus);
-
-               
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;
-               }
-
-       }
-
-}
-
-

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/configuration/RestExtenderConfiguration.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/configuration/RestExtenderConfiguration.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/configuration/RestExtenderConfiguration.java
deleted file mode 100644
index fbd08ce..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/configuration/RestExtenderConfiguration.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.configuration;
-
-import aQute.bnd.annotation.metatype.Meta;
-
-/**
- * @author Carlos Sierra Andrés
- */
[email protected](
-       factory = true,
-       id = 
"com.liferay.portal.remote.rest.extender.configuration.RestExtenderConfiguration",
-       localization = "content/Language", name = 
"rest.extender.configuration.name"
-)
-public interface RestExtenderConfiguration {
-
-       @Meta.AD(required = false)
-       public String[] contextPaths();
-
-       @Meta.AD(name = "jaxrs.applications.filters", required = false)
-       public String[] jaxRsApplicationFilterStrings();
-
-       @Meta.AD(name = "jax.rs.provider.filters", required = false)
-       public String[] jaxRsProviderFilterStrings();
-
-       @Meta.AD(name = "jax.rs.service.filters", required = false)
-       public String[] jaxRsServiceFilterStrings();
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8900ded
--- /dev/null
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import 
com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+public class AddonsServiceTrackerCustomizer
+       implements ServiceTrackerCustomizer<CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator> {
+
+       private final BundleContext _bundleContext;
+       private final ClassLoader _classLoader;
+       private final Class<?> _serviceClass;
+       private final Object _service;
+
+       public AddonsServiceTrackerCustomizer(
+               BundleContext bundleContext, ClassLoader classLoader,
+               Object service) {
+
+               _bundleContext = bundleContext;
+               _classLoader = classLoader;
+               _service = service;
+
+               _serviceClass = service.getClass();
+       }
+
+       @Override
+       public CXFJaxRsServiceRegistrator addingService(
+               ServiceReference<CXFJaxRsServiceRegistrator> reference) {
+
+               Thread thread = Thread.currentThread();
+
+               ClassLoader contextClassLoader =
+                       thread.getContextClassLoader();
+
+               CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+                       _bundleContext.getService(reference);
+
+               try {
+                       thread.setContextClassLoader(_classLoader);
+
+                       if (_serviceClass.isAnnotationPresent(Provider.class)) {
+                               
cxfJaxRsServiceRegistrator.addProvider(_service);
+                       } else {
+                               cxfJaxRsServiceRegistrator.addService(_service);
+                       }
+
+                       return cxfJaxRsServiceRegistrator;
+               }
+               catch (Exception e) {
+                       _bundleContext.ungetService(reference);
+
+                       throw e;
+               }
+               finally {
+                       thread.setContextClassLoader(contextClassLoader);
+               }
+       }
+
+       @Override
+       public void modifiedService(
+               ServiceReference<CXFJaxRsServiceRegistrator> reference,
+               CXFJaxRsServiceRegistrator registrator) {
+
+               removedService(reference, registrator);
+
+               addingService(reference);
+       }
+
+       @Override
+       public void removedService(
+               ServiceReference<CXFJaxRsServiceRegistrator> reference,
+               CXFJaxRsServiceRegistrator registrator) {
+
+               if (_serviceClass.isAnnotationPresent(Provider.class)) {
+                       registrator.removeProvider(_service);
+               } else {
+                       registrator.removeService(_service);
+               }
+
+               _bundleContext.ungetService(reference);
+       }
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
new file mode 100644
index 0000000..2594ac3
--- /dev/null
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+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.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+class ApplicationServiceTrackerCustomizer
+       implements ServiceTrackerCustomizer
+               <Application, ApplicationServiceTrackerCustomizer.Tracked> {
+
+       private BundleContext _bundleContext;
+       private Bus _bus;
+
+       public ApplicationServiceTrackerCustomizer(
+               BundleContext bundleContext, Bus bus) {
+
+               _bundleContext = bundleContext;
+               _bus = bus;
+       }
+
+       @Override
+       public Tracked 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);
+
+                       return new Tracked(
+                               cxfJaxRsServiceRegistrator, application,
+                               _bundleContext.registerService(
+                                       CXFJaxRsServiceRegistrator.class,
+                                       cxfJaxRsServiceRegistrator, new 
Hashtable<>(properties)));
+               }
+               catch (Exception e) {
+                       _bundleContext.ungetService(serviceReference);
+
+                       throw e;
+               }
+       }
+
+       @Override
+       public void modifiedService(
+               ServiceReference<Application> serviceReference, Tracked 
tracked) {
+
+               removedService(serviceReference, tracked);
+
+               addingService(serviceReference);
+       }
+
+       @Override
+       public void removedService(
+               ServiceReference<Application> reference, Tracked tracked) {
+
+               _bundleContext.ungetService(reference);
+
+               tracked.getCxfJaxRsServiceRegistrator().close();
+
+               
tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister();
+       }
+
+       public static class Tracked {
+
+               private final CXFJaxRsServiceRegistrator 
_cxfJaxRsServiceRegistrator;
+               private final Application _application;
+               private final ServiceRegistration<CXFJaxRsServiceRegistrator>
+                       _cxfJaxRsServiceRegistratorServiceRegistration;
+
+               public Application getApplication() {
+                       return _application;
+               }
+
+               public CXFJaxRsServiceRegistrator 
getCxfJaxRsServiceRegistrator() {
+                       return _cxfJaxRsServiceRegistrator;
+               }
+
+               public ServiceRegistration<CXFJaxRsServiceRegistrator>
+                       getCxfJaxRsServiceRegistratorServiceRegistration() {
+
+                       return _cxfJaxRsServiceRegistratorServiceRegistration;
+               }
+
+               public Tracked(
+                       CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator,
+                       Application application,
+                       ServiceRegistration<CXFJaxRsServiceRegistrator>
+                               cxfJaxRsServiceRegistratorServiceRegistration) {
+
+                       _cxfJaxRsServiceRegistrator = 
cxfJaxRsServiceRegistrator;
+                       _application = application;
+                       _cxfJaxRsServiceRegistratorServiceRegistration =
+                               cxfJaxRsServiceRegistratorServiceRegistration;
+               }
+
+       }
+}
+
+

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
new file mode 100644
index 0000000..0281efe
--- /dev/null
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.core.Application;
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+public class BusServiceTrackerCustomizer
+       implements ServiceTrackerCustomizer<Bus, Collection<ServiceTracker<?, 
?>>> {
+
+       private BundleContext _bundleContext;
+
+       public BusServiceTrackerCustomizer(BundleContext bundleContext) {
+               _bundleContext = bundleContext;
+       }
+
+       @Override
+       public Collection<ServiceTracker<?, ?>>
+       addingService(ServiceReference<Bus> serviceReference) {
+
+               Bus bus = _bundleContext.getService(serviceReference);
+
+               try {
+                       ServiceTracker<Application,?> applicationTracker =
+                               new ServiceTracker<>(_bundleContext, 
getApplicationFilter(),
+                                       new ApplicationServiceTrackerCustomizer(
+                                               _bundleContext, bus));
+
+                       applicationTracker.open();
+
+                       ServiceTracker<Object, ?> singletonsServiceTracker =
+                               new ServiceTracker<>(_bundleContext, 
getSingletonsFilter(),
+                                       new 
SingletonServiceTrackerCustomizer(_bundleContext, bus));
+
+                       singletonsServiceTracker.open();
+
+                       return Arrays.asList(applicationTracker, 
singletonsServiceTracker);
+               }
+               catch (InvalidSyntaxException ise) {
+                       throw new RuntimeException(ise);
+               }
+               catch (Exception e) {
+                       _bundleContext.ungetService(serviceReference);
+
+                       throw e;
+               }
+       }
+
+       private Filter getApplicationFilter() throws InvalidSyntaxException {
+               return _bundleContext.createFilter(
+                       "(&(objectClass=" + Application.class.getName() + ")" +
+                               "(osgi.jaxrs.application.base=*))");
+       }
+
+       private Filter getSingletonsFilter() throws InvalidSyntaxException {
+               return 
_bundleContext.createFilter("(osgi.jaxrs.resource.base=*)");
+       }
+
+       @Override
+       public void modifiedService(
+               ServiceReference<Bus> reference,
+               Collection<ServiceTracker<?, ?>> serviceTrackers) {
+
+               removedService(reference, serviceTrackers);
+
+               addingService(reference);
+       }
+
+       @Override
+       public void removedService(
+               ServiceReference<Bus> serviceReference,
+               Collection<ServiceTracker<?, ?>> serviceTrackers) {
+
+               _bundleContext.ungetService(serviceReference);
+
+               for (ServiceTracker<?, ?> serviceTracker : serviceTrackers) {
+                       serviceTracker.close();
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
index 1e9635c..7449ec8 100644
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
@@ -16,8 +16,6 @@ package com.liferay.portal.remote.rest.extender.internal;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.IdentityHashMap;
 import java.util.Map;
 
 import javax.ws.rs.core.Application;
@@ -34,76 +32,80 @@ import org.apache.cxf.jaxrs.provider.json.JSONProvider;
  */
 public class CXFJaxRsServiceRegistrator {
 
-       public CXFJaxRsServiceRegistrator(Map<String, Object> properties) {
-               _properties = properties;
-       }
+       public CXFJaxRsServiceRegistrator(
+               Bus bus, Application application, Map<String, Object> 
properties) {
 
-       public synchronized void addApplication(Application application) {
-               _applications.add(application);
+               _bus = bus;
+               _application = application;
+               _properties = properties;
 
                rewire();
        }
 
-       public synchronized void addBus(Bus bus) {
-               _buses.add(bus);
+       public void close() {
+               if (_closed) {
+                       return;
+               }
 
-               for (Application application : _applications) {
-                       registerApplication(bus, application);
+               if (_server != null) {
+                       _server.destroy();
                }
+
+               _closed = true;
        }
 
-       public synchronized void addProvider(Object provider) {
+       public void addProvider(Object provider) {
+               if (_closed) {
+                       return;
+               }
+
                _providers.add(provider);
 
                rewire();
        }
 
-       public synchronized void addService(Object service) {
+       public void addService(Object service) {
+               if (_closed) {
+                       return;
+               }
+
                _services.add(service);
 
                rewire();
        }
 
-       public synchronized void removeApplication(Application application) {
-               _applications.remove(application);
-
-               remove(application);
-       }
-
-       public synchronized void removeBus(Bus bus) {
-               _buses.remove(bus);
-
-               Map<Object, Server> servers = _busServers.remove(bus);
-
-               if (servers == null) {
+       public void removeProvider(Object provider) {
+               if (_closed) {
                        return;
                }
 
-               for (Server server : servers.values()) {
-                       server.destroy();
-               }
-       }
-
-       public synchronized void removeProvider(Object provider) {
                _providers.remove(provider);
 
                rewire();
        }
 
-       public synchronized void removeService(Object service) {
+       public void removeService(Object service) {
+               if (_closed) {
+                       return;
+               }
+
                _services.remove(service);
 
                rewire();
        }
 
-       protected void registerApplication(Bus bus, Application application) {
+       protected synchronized void rewire() {
+               if (_server != null) {
+                       _server.destroy();
+               }
+
                RuntimeDelegate runtimeDelegate = RuntimeDelegate.getInstance();
 
                JAXRSServerFactoryBean jaxRsServerFactoryBean =
                        runtimeDelegate.createEndpoint(
-                               application, JAXRSServerFactoryBean.class);
+                               _application, JAXRSServerFactoryBean.class);
 
-               jaxRsServerFactoryBean.setBus(bus);
+               jaxRsServerFactoryBean.setBus(_bus);
                jaxRsServerFactoryBean.setProperties(_properties);
 
                JSONProvider<Object> jsonProvider = new JSONProvider<>();
@@ -130,57 +132,17 @@ public class CXFJaxRsServiceRegistrator {
                        jaxRsServerFactoryBean.setAddress(address);
                }
 
-               Server server = jaxRsServerFactoryBean.create();
-
-               server.start();
-
-               store(bus, application, server);
-       }
-
-       protected void registerApplications() {
-               for (Bus bus : _buses) {
-                       for (Application application : _applications) {
-                               registerApplication(bus, application);
-                       }
-               }
-       }
-
-       protected void remove(Object application) {
-               for (Map<Object, Server> servers : _busServers.values()) {
-                       Server server = servers.remove(application);
-
-                       if (server != null) {
-                               server.destroy();
-                       }
-               }
-       }
-
-       protected void rewire() {
-               for (Application application : _applications) {
-                       remove(application);
-               }
-
-               registerApplications();
-       }
-
-       protected void store(Bus bus, Object object, Server server) {
-               Map<Object, Server> servers = _busServers.get(bus);
-
-               if (servers == null) {
-                       servers = new HashMap<>();
-
-                       _busServers.put(bus, servers);
-               }
+               _server = jaxRsServerFactoryBean.create();
 
-               servers.put(object, server);
+               _server.start();
        }
 
-       private final Collection<Application> _applications = new ArrayList<>();
-       private final Collection<Bus> _buses = new ArrayList<>();
-       private final Map<Bus, Map<Object, Server>> _busServers =
-               new IdentityHashMap<>();
+       private volatile boolean _closed = false;
+       private final Application _application;
+       private final Bus _bus;
        private final Map<String, Object> _properties;
        private final Collection<Object> _providers = new ArrayList<>();
+       private Server _server;
        private final Collection<Object> _services = new ArrayList<>();
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/RestExtender.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/RestExtender.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/RestExtender.java
deleted file mode 100644
index b37b8ce..0000000
--- 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/RestExtender.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it 
under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
-
-package com.liferay.portal.remote.rest.extender.internal;
-
-import aQute.bnd.annotation.metatype.Configurable;
-import com.liferay.portal.remote.dependency.manager.tccl.TCCLDependencyManager;
-import 
com.liferay.portal.remote.rest.extender.configuration.RestExtenderConfiguration;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import javax.ws.rs.core.Application;
-
-import org.apache.cxf.Bus;
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.ServiceDependency;
-
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
-
-/**
- * @author Carlos Sierra Andrés
- */
-public class RestExtender {
-
-       public RestExtenderConfiguration getRestExtenderConfiguration() {
-               return _restExtenderConfiguration;
-       }
-
-       public RestExtender() {
-               System.out.println("Constructor");
-       }
-
-       protected void update(Dictionary<String, Object> properties) {
-               _dependencyManager =
-                       
(TCCLDependencyManager)_component.getDependencyManager();
-
-               if (_registratorComponent != null) {
-                       _registratorComponent.stop();
-
-                       _dependencyManager.remove(_registratorComponent);
-               }
-
-               _restExtenderConfiguration = Configurable.createConfigurable(
-                       RestExtenderConfiguration.class, properties);
-
-               _registratorComponent = _dependencyManager.createComponent();
-
-               CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
-                       new CXFJaxRsServiceRegistrator((Hashtable)properties);
-
-               
_registratorComponent.setImplementation(cxfJaxRsServiceRegistrator);
-
-               addBusDependencies();
-               addJaxRsApplicationDependencies();
-               addJaxRsProviderServiceDependencies();
-               addJaxRsServiceDependencies();
-
-               _dependencyManager.add(_registratorComponent);
-
-               _registratorComponent.start();
-       }
-
-       protected void addBusDependencies() {
-               RestExtenderConfiguration restExtenderConfiguration =
-                       getRestExtenderConfiguration();
-
-               String[] contextPaths = 
restExtenderConfiguration.contextPaths();
-
-               if (contextPaths == null) {
-                       return;
-               }
-
-               for (String contextPath : contextPaths) {
-                       if (contextPath == null || contextPath.isEmpty()) {
-                               continue;
-                       }
-
-                       addTCCLServiceDependency(
-                               true, Bus.class,
-                               "(" + 
HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH +
-                                       "=" + contextPath + ")",
-                               "addBus", "removeBus");
-               }
-       }
-
-       protected void addJaxRsApplicationDependencies() {
-               RestExtenderConfiguration restExtenderConfiguration =
-                       getRestExtenderConfiguration();
-
-               String[] jaxRsApplicationFilterStrings =
-                       
restExtenderConfiguration.jaxRsApplicationFilterStrings();
-
-               if (jaxRsApplicationFilterStrings == null) {
-                       addTCCLServiceDependency(
-                               false, Application.class, null, 
"addApplication",
-                               "removeApplication");
-
-                       return;
-               }
-
-               for (String jaxRsApplicationFilterString :
-                               jaxRsApplicationFilterStrings) {
-
-                       addTCCLServiceDependency(
-                               false, Application.class, 
jaxRsApplicationFilterString,
-                               "addApplication", "removeApplication");
-               }
-       }
-
-       protected void addJaxRsProviderServiceDependencies() {
-               RestExtenderConfiguration soapExtenderConfiguration =
-                       getRestExtenderConfiguration();
-
-               String[] jaxRsProviderFilterStrings =
-                       soapExtenderConfiguration.jaxRsProviderFilterStrings();
-
-               if (jaxRsProviderFilterStrings == null) {
-                       return;
-               }
-
-               for (String jaxRsProviderFilterString : 
jaxRsProviderFilterStrings) {
-                       if (jaxRsProviderFilterString == null ||
-                               jaxRsProviderFilterString.isEmpty()) {
-
-                               continue;
-                       }
-
-                       addTCCLServiceDependency(
-                               false, null, jaxRsProviderFilterString, 
"addProvider",
-                               "removeProvider");
-               }
-       }
-
-       protected void addJaxRsServiceDependencies() {
-               RestExtenderConfiguration soapExtenderConfiguration =
-                       getRestExtenderConfiguration();
-
-               String[] jaxRsServiceFilterStrings =
-                       soapExtenderConfiguration.jaxRsServiceFilterStrings();
-
-               if (jaxRsServiceFilterStrings == null) {
-                       return;
-               }
-
-               for (String jaxRsServiceFilterString : 
jaxRsServiceFilterStrings) {
-                       if (jaxRsServiceFilterString == null ||
-                               jaxRsServiceFilterString.isEmpty()) {
-
-                               continue;
-                       }
-
-                       addTCCLServiceDependency(
-                               false, null, jaxRsServiceFilterString, 
"addService",
-                               "removeService");
-               }
-       }
-
-       protected ServiceDependency addTCCLServiceDependency(
-               boolean required, Class<?> clazz, String filter, String addName,
-               String removeName) {
-
-               ServiceDependency serviceDependency =
-                       _dependencyManager.createTCCLServiceDependency();
-
-               serviceDependency.setCallbacks(addName, removeName);
-               serviceDependency.setRequired(required);
-
-               if (clazz == null) {
-                       serviceDependency.setService(filter);
-               }
-               else {
-                       if (filter == null) {
-                               serviceDependency.setService(clazz);
-                       }
-                       else {
-                               serviceDependency.setService(clazz, filter);
-                       }
-               }
-
-               _component.add(serviceDependency);
-
-               return serviceDependency;
-       }
-
-       private Component _component;
-       private Component _registratorComponent;
-       private TCCLDependencyManager _dependencyManager;
-       private RestExtenderConfiguration _restExtenderConfiguration;
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
new file mode 100644
index 0000000..433f70c
--- /dev/null
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+public class ServicesServiceTrackerCustomizer
+       implements ServiceTrackerCustomizer
+               <Object, ServiceTracker
+                       <CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator>> {
+
+       private final BundleContext _bundleContext;
+
+       public ServicesServiceTrackerCustomizer(BundleContext bundleContext) {
+               _bundleContext = bundleContext;
+       }
+
+       @Override
+       public ServiceTracker
+               <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+       addingService(ServiceReference<Object> reference) {
+
+               String applicationSelector =
+                       
reference.getProperty("jaxrs.application.select").toString();
+
+               Bundle bundle = reference.getBundle();
+
+               BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
+
+               ClassLoader classLoader = bundleWiring.getClassLoader();
+
+               Object service = _bundleContext.getService(reference);
+
+               try {
+                       Filter filter = _bundleContext.createFilter(
+                               "(&(objectClass=" + 
CXFJaxRsServiceRegistrator.class.getName() + ")" +
+                                       applicationSelector + ")");
+
+                       ServiceTracker
+                               <CXFJaxRsServiceRegistrator, 
CXFJaxRsServiceRegistrator>
+                               serviceTracker = new ServiceTracker<>(
+                                       _bundleContext, filter,
+                                       new AddonsServiceTrackerCustomizer(
+                                               _bundleContext, classLoader,
+                                               service));
+
+                       serviceTracker.open();
+
+                       return serviceTracker;
+               }
+               catch (InvalidSyntaxException ise) {
+                       _bundleContext.ungetService(reference);
+
+                       throw new RuntimeException(ise);
+               }
+       }
+
+       @Override
+       public void modifiedService(
+               ServiceReference<Object> reference,
+               ServiceTracker
+                       <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+                       serviceTracker) {
+
+               removedService(reference, serviceTracker);
+
+               addingService(reference);
+       }
+
+       @Override
+       public void removedService(
+               ServiceReference<Object> reference,
+               ServiceTracker
+                       <CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+                       serviceTracker) {
+
+               serviceTracker.close();
+
+               _bundleContext.ungetService(reference);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git 
a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8645504
--- /dev/null
+++ 
b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it 
under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+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;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+class SingletonServiceTrackerCustomizer
+       implements ServiceTrackerCustomizer
+               <Object, SingletonServiceTrackerCustomizer.Tracked> {
+
+       private BundleContext _bundleContext;
+       private Bus _bus;
+
+       public SingletonServiceTrackerCustomizer(
+               BundleContext bundleContext, Bus bus) {
+
+               _bundleContext = bundleContext;
+               _bus = bus;
+       }
+
+       @Override
+       public Tracked 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));
+                       }
+
+                       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)));
+               }
+               catch (Exception e) {
+                       _bundleContext.ungetService(serviceReference);
+
+                       throw e;
+               }
+       }
+
+       @Override
+       public void modifiedService(
+               ServiceReference<Object> serviceReference, Tracked tracked) {
+
+               removedService(serviceReference, tracked);
+
+               addingService(serviceReference);
+       }
+
+       @Override
+       public void removedService(
+               ServiceReference<Object> reference, Tracked 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;
+               }
+
+       }
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index 18c8d34..cfc5db4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -2,7 +2,6 @@ include(
        'example-jaxrs-application',
        'portal-remote-cxf-common',
        'portal-remote-cxf-jaxrs-common',
-       'portal-remote-dependency-manager-tccl',
        'portal-remote-rest-extender',
        'test-cxf'
 )

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/871ac16e/test-cxf/build.gradle
----------------------------------------------------------------------
diff --git a/test-cxf/build.gradle b/test-cxf/build.gradle
index 0c0d5f4..82d4055 100644
--- a/test-cxf/build.gradle
+++ b/test-cxf/build.gradle
@@ -22,7 +22,6 @@ dependencies {
        compile project(path: ':example-jaxrs-application', transitive: false)
        compile project(path: ':portal-remote-cxf-common', transitive: false)
        compile project(path: ':portal-remote-cxf-jaxrs-common', transitive: 
false)
-       compile project(path: ':portal-remote-dependency-manager-tccl', 
transitive: false)
        compile project(path: ':portal-remote-rest-extender', transitive: false)
     compile group: "biz.aQute.bnd", name: "biz.aQute.bndlib", transitive: 
false, version: "3.1.0"
     compile group: 'commons-fileupload', name: 'commons-fileupload', version: 
'1.3.2'

Reply via email to