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'
