[ARIES-1821] Use prototype scope HTTP Whiteboard spec recommends using prototype scope when registering servlets and filters to prevent several init/destroy calls to the same servlet/filter instance.
Also avoid CXFNonSpringServlet to destroy a bus whose lifecycle it does not own. 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/96ce3a2e Tree: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/96ce3a2e Diff: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/96ce3a2e Branch: refs/heads/master Commit: 96ce3a2ec84ef5054efe3645e71088198c32e543 Parents: d5e624e Author: Carlos Sierra <csie...@apache.org> Authored: Fri Jul 27 11:38:21 2018 +0200 Committer: Carlos Sierra <csie...@apache.org> Committed: Fri Jul 27 11:38:21 2018 +0200 ---------------------------------------------------------------------- .../jax/rs/whiteboard/internal/Whiteboard.java | 30 ++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/96ce3a2e/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java ---------------------------------------------------------------------- diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java index 73c90c9..6f95123 100644 --- a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java +++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java @@ -33,6 +33,7 @@ import org.osgi.framework.Constants; import org.osgi.framework.Filter; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.PrototypeServiceFactory; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; import org.osgi.framework.wiring.BundleWiring; @@ -1151,8 +1152,16 @@ public class Whiteboard { } private static CXFNonSpringServlet createCXFServlet(Bus bus) { - CXFNonSpringServlet cxfNonSpringServlet = new CXFNonSpringServlet(); + CXFNonSpringServlet cxfNonSpringServlet = new CXFNonSpringServlet() { + + @Override + public void destroyBus() { + } + + }; + cxfNonSpringServlet.setBus(bus); + return cxfNonSpringServlet; } @@ -1277,7 +1286,24 @@ public class Whiteboard { return program.then( register( - Servlet.class, () -> createCXFServlet(bus), + Servlet.class, + new PrototypeServiceFactory<Servlet>() { + @Override + public Servlet getService( + Bundle bundle, + ServiceRegistration<Servlet> registration) { + + return createCXFServlet(bus); + } + + @Override + public void ungetService( + Bundle bundle, + ServiceRegistration<Servlet> registration, + Servlet service) { + + } + }, servletPropertiesSup)); }