Bug 454295 - [http] servlet EventListener types are all tracked under
the super class type EventListeners
diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java
index 0b84033..accbc54 100644
--- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java
+++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java
@@ -27,9 +27,14 @@
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.Servlet;
+import javax.servlet.ServletContextAttributeListener;
+import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestAttributeListener;
+import javax.servlet.ServletRequestListener;
import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpSessionAttributeListener;
import junit.framework.TestCase;
@@ -919,7 +924,7 @@
new BaseServletContextListener();
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
- ServiceRegistration<EventListener> registration = getBundleContext().registerService(EventListener.class, scl1, listenerProps);
+ ServiceRegistration<ServletContextListener> registration = getBundleContext().registerService(ServletContextListener.class, scl1, listenerProps);
registration.unregister();
@@ -943,7 +948,7 @@
new BaseServletContextListener();
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
listenerProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=a)");
- ServiceRegistration<EventListener> registration = getBundleContext().registerService(EventListener.class, scl1, listenerProps);
+ ServiceRegistration<ServletContextListener> registration = getBundleContext().registerService(ServletContextListener.class, scl1, listenerProps);
registration.unregister();
Assert.assertTrue(scl1.initialized.get());
@@ -971,7 +976,7 @@
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
listenerProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=a)");
- registrations.add(bundleContext.registerService(EventListener.class, scl1, listenerProps));
+ registrations.add(bundleContext.registerService(ServletContextListener.class, scl1, listenerProps));
Assert.assertTrue(scl1.initialized.get());
}
@@ -992,7 +997,7 @@
Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
try {
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
- registrations.add(getBundleContext().registerService(EventListener.class, scal1, listenerProps));
+ registrations.add(getBundleContext().registerService(ServletContextAttributeListener.class, scal1, listenerProps));
Dictionary<String, String> servletProps1 = new Hashtable<String, String>();
servletProps1.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "S1");
@@ -1034,7 +1039,7 @@
Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
try {
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
- registrations.add(getBundleContext().registerService(EventListener.class, srl1, listenerProps));
+ registrations.add(getBundleContext().registerService(ServletRequestListener.class, srl1, listenerProps));
Dictionary<String, String> servletProps1 = new Hashtable<String, String>();
servletProps1.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "S1");
@@ -1062,7 +1067,7 @@
Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
try {
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
- registrations.add(getBundleContext().registerService(EventListener.class, sral1, listenerProps));
+ registrations.add(getBundleContext().registerService(ServletRequestAttributeListener.class, sral1, listenerProps));
Dictionary<String, String> servletProps1 = new Hashtable<String, String>();
servletProps1.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "S1");
@@ -1092,7 +1097,7 @@
Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
try {
Dictionary<String, String> listenerProps = new Hashtable<String, String>();
- registrations.add(getBundleContext().registerService(EventListener.class, hsal1, listenerProps));
+ registrations.add(getBundleContext().registerService(HttpSessionAttributeListener.class, hsal1, listenerProps));
Dictionary<String, String> servletProps1 = new Hashtable<String, String>();
servletProps1.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "S1");
@@ -1142,7 +1147,7 @@
}
}
- public void test_Listener8() throws Exception {
+ public void test_Async1() throws Exception {
Servlet s1 = new BaseAsyncServlet("test_Listener8");
Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceRuntimeImpl.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceRuntimeImpl.java
index 4186938..0a4f158 100644
--- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceRuntimeImpl.java
+++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceRuntimeImpl.java
@@ -50,6 +50,12 @@
this.trackingContext = trackingContext;
this.consumingContext = consumingContext;
+
+ this.servletServiceFilter = createServletFilter(consumingContext);
+ this.resourceServiceFilter = createResourceFilter(consumingContext);
+ this.filterServiceFilter = createFilterFilter(consumingContext);
+ this.listenerServiceFilter = createListenerFilter(consumingContext);
+
this.parentServletContext = parentServletContext;
this.attributes = Collections.unmodifiableMap(attributes);
this.targetFilter = "(" + Activator.UNIQUE_SERVICE_ID + "=" + attributes.get(Activator.UNIQUE_SERVICE_ID) + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -216,27 +222,6 @@
return null;
}
- public org.osgi.framework.Filter getFilterFilter() {
- StringBuilder sb = new StringBuilder();
-
- sb.append("(&(objectClass="); //$NON-NLS-1$
- sb.append(Filter.class.getName());
- sb.append(")(|("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN);
- sb.append("=*)("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_REGEX);
- sb.append("=*)("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_SERVLET);
- sb.append("=*)))"); //$NON-NLS-1$
-
- try {
- return trackingContext.createFilter(sb.toString());
- }
- catch (InvalidSyntaxException ise) {
- throw new IllegalArgumentException(ise);
- }
- }
-
public Set<Object> getRegisteredObjects() {
return registeredObjects;
}
@@ -247,23 +232,6 @@
HttpServiceRuntimeConstants.HTTP_SERVICE_ENDPOINT_ATTRIBUTE));
}
- public org.osgi.framework.Filter getResourceFilter() {
- StringBuilder sb = new StringBuilder();
-
- sb.append("(&("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX);
- sb.append("=*)("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN);
- sb.append("=*))"); //$NON-NLS-1$
-
- try {
- return trackingContext.createFilter(sb.toString());
- }
- catch (InvalidSyntaxException ise) {
- throw new IllegalArgumentException(ise);
- }
- }
-
@Override
public RuntimeDTO getRuntimeDTO() {
RuntimeDTO runtimeDTO = new RuntimeDTO();
@@ -283,27 +251,6 @@
return runtimeDTO;
}
- public org.osgi.framework.Filter getServletFilter() {
- StringBuilder sb = new StringBuilder();
-
- sb.append("(&(objectClass="); //$NON-NLS-1$
- sb.append(Servlet.class.getName());
- sb.append(")(|("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ERROR_PAGE);
- sb.append("=*)("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN);
- sb.append("=*))(!("); //$NON-NLS-1$
- sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX);
- sb.append("=*)))"); //$NON-NLS-1$
-
- try {
- return trackingContext.createFilter(sb.toString());
- }
- catch (InvalidSyntaxException ise) {
- throw new IllegalArgumentException(ise);
- }
- }
-
public void log(String message, Throwable t) {
parentServletContext.log(message, t);
}
@@ -906,6 +853,101 @@
}
}
+ private static org.osgi.framework.Filter createResourceFilter(BundleContext context) {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("(&("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX);
+ sb.append("=*)("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN);
+ sb.append("=*))"); //$NON-NLS-1$
+
+ try {
+ return context.createFilter(sb.toString());
+ }
+ catch (InvalidSyntaxException ise) {
+ throw new IllegalArgumentException(ise);
+ }
+ }
+
+ private static org.osgi.framework.Filter createServletFilter(BundleContext context) {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("(&(objectClass="); //$NON-NLS-1$
+ sb.append(Servlet.class.getName());
+ sb.append(")(|("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ERROR_PAGE);
+ sb.append("=*)("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN);
+ sb.append("=*))(!("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX);
+ sb.append("=*)))"); //$NON-NLS-1$
+
+ try {
+ return context.createFilter(sb.toString());
+ }
+ catch (InvalidSyntaxException ise) {
+ throw new IllegalArgumentException(ise);
+ }
+ }
+
+ private static org.osgi.framework.Filter createFilterFilter(BundleContext context) {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("(&(objectClass="); //$NON-NLS-1$
+ sb.append(Filter.class.getName());
+ sb.append(")(|("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN);
+ sb.append("=*)("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_REGEX);
+ sb.append("=*)("); //$NON-NLS-1$
+ sb.append(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_SERVLET);
+ sb.append("=*)))"); //$NON-NLS-1$
+
+ try {
+ return context.createFilter(sb.toString());
+ }
+ catch (InvalidSyntaxException ise) {
+ throw new IllegalArgumentException(ise);
+ }
+ }
+
+ private static org.osgi.framework.Filter createListenerFilter(BundleContext context) {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("(|"); //$NON-NLS-1$
+ sb.append("(objectClass=").append(ServletContextListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append("(objectClass=").append(ServletContextAttributeListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append("(objectClass=").append(ServletRequestListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append("(objectClass=").append(ServletRequestAttributeListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append("(objectClass=").append(HttpSessionListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append("(objectClass=").append(HttpSessionAttributeListener.class.getName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append(")"); //$NON-NLS-1$
+
+ try {
+ return context.createFilter(sb.toString());
+ }
+ catch (InvalidSyntaxException ise) {
+ throw new IllegalArgumentException(ise);
+ }
+ }
+
+ public org.osgi.framework.Filter getListenerFilter() {
+ return listenerServiceFilter;
+ }
+
+ public org.osgi.framework.Filter getFilterFilter() {
+ return filterServiceFilter;
+ }
+
+ public org.osgi.framework.Filter getServletFilter() {
+ return servletServiceFilter;
+ }
+
+ public org.osgi.framework.Filter getResourceFilter() {
+ return resourceServiceFilter;
+ }
+
private Map<String, Object> attributes;
private final String targetFilter;
private final ServiceRegistration<ServletContextHelper> defaultContextReg;
@@ -914,6 +956,11 @@
private BundleContext trackingContext;
private BundleContext consumingContext;
+ private final org.osgi.framework.Filter servletServiceFilter;
+ private final org.osgi.framework.Filter resourceServiceFilter;
+ private final org.osgi.framework.Filter filterServiceFilter;
+ private final org.osgi.framework.Filter listenerServiceFilter;
+
// BEGIN of old HttpService support
private Map<HttpContext, HttpContextHelperFactory> httpContextHelperFactories =
Collections.synchronizedMap(new HashMap<HttpContext, HttpContextHelperFactory>());
@@ -993,7 +1040,9 @@
public void ungetService(
Bundle bundle, ServiceRegistration<Filter> registration,
Filter service) {
+ // do nothing
}
}
+
}
diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java
index 2880401..871ce6b 100644
--- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java
+++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java
@@ -127,7 +127,7 @@
listenerServiceTracker = new ServiceTracker<EventListener, AtomicReference<ListenerRegistration>>(
- trackingContext, EventListener.class,
+ trackingContext, httpServiceRuntime.getListenerFilter(),
new ContextListenerTrackerCustomizer(
trackingContext, httpServiceRuntime, this));