You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2016/11/24 10:53:09 UTC

[05/50] [abbrv] aries-jax-rs-whiteboard git commit: New tracker for filter targeting singleton services

New tracker for filter targeting singleton services

The current impl will not make any distinction between a filter, an
interceptor or any other @Provider registered. It has a naive matching
of startWith().


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

Branch: refs/heads/master
Commit: ccba12244fab1c16e168d5d026e8bdfc9248a8bb
Parents: f50f916
Author: Carlos Sierra <ca...@liferay.com>
Authored: Tue Oct 11 19:02:25 2016 +0200
Committer: Carlos Sierra <ca...@liferay.com>
Committed: Tue Oct 11 19:02:25 2016 +0200

----------------------------------------------------------------------
 .../internal/BusServiceTrackerCustomizer.java   |  11 ++
 ...AndInterceptorsServiceTrackerCustomizer.java | 123 +++++++++++++++++++
 2 files changed, 134 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/ccba1224/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
index 0281efe..8440196 100644
--- 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
@@ -58,6 +58,13 @@ public class BusServiceTrackerCustomizer
 
 			singletonsServiceTracker.open();
 
+			ServiceTracker<Object, ?> filtersAndInterceptorsServiceTracker =
+				new ServiceTracker<>(_bundleContext, getFiltersFilter(),
+					new FiltersAndInterceptorsServiceTrackerCustomizer(
+						_bundleContext));
+
+			filtersAndInterceptorsServiceTracker.open();
+
 			return Arrays.asList(applicationTracker, singletonsServiceTracker);
 		}
 		catch (InvalidSyntaxException ise) {
@@ -70,6 +77,10 @@ public class BusServiceTrackerCustomizer
 		}
 	}
 
+	private Filter getFiltersFilter() throws InvalidSyntaxException {
+		return _bundleContext.createFilter("(osgi.jaxrs.filter.base=*)");
+	}
+
 	private Filter getApplicationFilter() throws InvalidSyntaxException {
 		return _bundleContext.createFilter(
 			"(&(objectClass=" + Application.class.getName() + ")" +

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/ccba1224/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..07e8c7a
--- /dev/null
+++ b/portal-remote-rest-extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
@@ -0,0 +1,123 @@
+/**
+ * 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.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class FiltersAndInterceptorsServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer<Object, ServiceTracker<?, ?>> {
+
+	private BundleContext _bundleContext;
+
+	public FiltersAndInterceptorsServiceTrackerCustomizer(
+		BundleContext bundleContext) {
+
+		_bundleContext = bundleContext;
+	}
+
+	@Override
+	public ServiceTracker<?, ?> addingService(final ServiceReference<Object> reference) {
+		final String filterBase =
+			reference.getProperty("osgi.jaxrs.filter.base").toString();
+
+		final Object service = _bundleContext.getService(reference);
+
+		ServiceTracker<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator> serviceTracker = new ServiceTracker<>(
+			_bundleContext, CXFJaxRsServiceRegistrator.class,
+			new ServiceTrackerCustomizer
+				<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>() {
+
+				@Override
+				public CXFJaxRsServiceRegistrator addingService(
+					ServiceReference<CXFJaxRsServiceRegistrator> cxfReference) {
+
+					Object resourceBaseObject =
+						cxfReference.getProperty("CXF_ENDPOINT_ADDRESS");
+
+					if (resourceBaseObject == null) {
+						return null;
+					}
+
+					String resourceBase = resourceBaseObject.toString();
+
+					if (resourceBase.startsWith(filterBase)) {
+						CXFJaxRsServiceRegistrator serviceRegistrator =
+							_bundleContext.getService(cxfReference);
+						try {
+							serviceRegistrator.addProvider(service);
+
+							return serviceRegistrator;
+						}
+						finally {
+							_bundleContext.ungetService(reference);
+						}
+					}
+
+					return null;
+				}
+
+				@Override
+				public void modifiedService(
+					ServiceReference<CXFJaxRsServiceRegistrator> reference,
+					CXFJaxRsServiceRegistrator service) {
+
+					removedService(reference, service);
+					addingService(reference);
+				}
+
+				@Override
+				public void removedService(
+					ServiceReference<CXFJaxRsServiceRegistrator> reference,
+					CXFJaxRsServiceRegistrator service) {
+
+					CXFJaxRsServiceRegistrator serviceRegistrator =
+						_bundleContext.getService(reference);
+					try {
+						serviceRegistrator.removeProvider(service);
+					}
+					finally {
+						_bundleContext.ungetService(reference);
+					}
+				}
+			});
+
+		serviceTracker.open();
+
+		return serviceTracker;
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Object> reference, ServiceTracker<?, ?> serviceTracker) {
+
+		removedService(reference, serviceTracker);
+		addingService(reference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Object> reference, ServiceTracker<?, ?> serviceTracker) {
+
+		_bundleContext.ungetService(reference);
+
+		serviceTracker.close();
+	}
+}