I use here just Pax Web DefaultListenerMapping and DefaultServletMapping without any mods. ListenerMapping and ServletMapping services are tracked by org.ops4j.pax.web.pax-web-extender-whiteboard bundle. And then pax-web-extender bundle publishes listener and servlet in some default http context.
Here is the pax web user guide: https://ops4j1.jira.com/wiki/display/paxweb/Whiteboard+Extender May be, pax-web-extender doesn't publish web elements (listener and servlet) in strict order, because it knows nothing about dependency between them. So this is the question to pax web extender developers, if there is some way to config publishing order in pax web extender. I've tried even with the simplest servlet and listener, the situation is the same: listener and servlet are registered randomly inspite of "depends-on" option in blueprint config. Sample Code: *Listener* package org.foo.bar.servlet; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestListener implements ServletContextListener { private static final Logger logger = LoggerFactory.getLogger(TestListener.class); @Override public void contextInitialized(ServletContextEvent sce) { logger.info("Servlet init caught!"); } @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("Servlet destruction caught!"); } } *Servlet* package org.foo.bar.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(TestServlet.class); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "text/html; charset=UTF-8"); final PrintWriter writer = response.getWriter(); writer.println("<html><body align='center'>"); writer.println("< h1 >TestServlet< /h1 >"); writer.println("</body></html>"); } @Override public void destroy() { super.destroy(); logger.info("Servlet destroyed!"); } @Override public void init() throws ServletException { super.init(); logger.info("Servlet initialized!"); } } *Blueprint* <?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.osgi.org/xmlns/blueprint/v1.0.0 https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> <bean id="listener" class="org.foo.bar.servlet.TestListener" /> <service id="listenerMapping" interface="org.ops4j.pax.web.extender.whiteboard.ListenerMapping"> <bean class="org.ops4j.pax.web.extender.whiteboard.runtime.DefaultListenerMapping"> <property name="listener" ref="listener" /> </bean> </service> <bean id="servlet" class="org.foo.bar.servlet.TestServlet" /> <service interface="org.ops4j.pax.web.extender.whiteboard.ServletMapping" depends-on="listenerMapping"> <bean class="org.ops4j.pax.web.extender.whiteboard.runtime.DefaultServletMapping"> <property name="loadOnStartup" value="1" /> <property name="servlet" ref="servlet" /> <property name="alias" value="/example" /> <property name="urlPatterns"> <array> <value>/example/*</value> </array> </property> </bean> </service> </blueprint> Pavel CLEMENT Jean-Philippe wrote > From this Blueprint the ListenerMapping should be exposed before the > ServletMapping. > > Several thoughts: > * I would suggest to test this with a simple bundle containing a couple of > "reference-list" on ListenerMapping and ServletMapping to be sure > * Maybe the bean handling the ListenerMapping is asynchronous > (configuration?) > * Your ListenerMapping has a setter to the shiroListener bean so may lead > to a NPE (which can be caught somewhere and not traced!) > > JP ----- Pavel -- View this message in context: http://karaf.922171.n3.nabble.com/PAX-WEB-ServletMapping-service-sometimes-starts-before-ServletContextListenerMapping-tp4045660p4045682.html Sent from the Karaf - User mailing list archive at Nabble.com.
