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();
+ }
+}