Registered servlet throws java.net.ConnectException or returns 404 after
updating the portnr using Config Admin
---------------------------------------------------------------------------------------------------------------
Key: FELIX-2714
URL: https://issues.apache.org/jira/browse/FELIX-2714
Project: Felix
Issue Type: Bug
Components: HTTP Service
Affects Versions: http-2.0.4
Reporter: Ivo Ladage-van Doorn
When the "org.osgi.service.http.port" property is updated using Config Admin,
without effectively changing it (so setting it to 8080 while the default is
also 8080), it seems that subsequent servlet registrations fail. A HTTP GET to
this servlet either results in a java.net.ConnectException: Connection refused:
connect or it returns a 404. Changing it to any other port number results in
exactly the same error.
Attached is a bundle that reproduces the issue, depending on a HttpService and
ConfigurationAdmin implementation. The issue can be reproduced by using the
Felix httpservice and Felix config admin deployed on a Felix framework.
Summarized this is the use case:
- Start HttpService and wait for it to become available (runs on 8080 by
default)
- Update the "org.osgi.service.http.port" to 8080 using Config Admin (so
effectively nothing is changed)
- Register a servlet
- Open a URL connection to this servlet
Now the very first time, this error appears in the console:
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:525)
at java.net.Socket.connect(Socket.java:475)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at
sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
at
sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
at
sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
at org.amdatu.test.PortSwitchTest.checkURL(PortSwitchTest.java:86)
at org.amdatu.test.PortSwitchTest.test(PortSwitchTest.java:50)
at org.amdatu.test.Activator.addingService(Activator.java:30)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
at
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:871)
at
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:733)
at
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3721)
at org.apache.felix.framework.Felix.access$000(Felix.java:80)
at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:717)
at
org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:107)
at org.apache.felix.framework.Felix.registerService(Felix.java:2842)
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:251)
at
org.apache.felix.http.base.internal.HttpServiceController.register(HttpServiceController.java:64)
at
org.apache.felix.http.base.internal.DispatcherServlet.init(DispatcherServlet.java:41)
at
org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at
org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.apache.felix.http.jetty.internal.JettyService.initializeJetty(JettyService.java:145)
at
org.apache.felix.http.jetty.internal.JettyService.startJetty(JettyService.java:112)
at
org.apache.felix.http.jetty.internal.JettyService.run(JettyService.java:203)
at java.lang.Thread.run(Thread.java:619)
[WARNING] failed org.mortbay.jetty.nio.selectchannelconnecto...@135f44e:
java.io.IOException: Unable to establish loopba
ck connection
[WARNING] failed [email protected]:8080: java.io.IOException:
Unable to establish loopback connection
[WARNING] failed ser...@13a34af: java.io.IOException: Unable to establish
loopback connection
[ERROR] Exception while initializing Jetty.
java.io.IOException: Unable to establish loopback connection
at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:106)
at java.security.AccessController.doPrivileged(Native Method)
at sun.nio.ch.PipeImpl.<init>(PipeImpl.java:122)
at
sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:27)
at java.nio.channels.Pipe.open(Pipe.java:133)
at sun.nio.ch.WindowsSelectorImpl.<init>(WindowsSelectorImpl.java:104)
at
sun.nio.ch.WindowsSelectorProvider.openSelector(WindowsSelectorProvider.java:26)
at java.nio.channels.Selector.open(Selector.java:209)
at
org.mortbay.io.nio.SelectorManager$SelectSet.<init>(SelectorManager.java:302)
at org.mortbay.io.nio.SelectorManager.doStart(SelectorManager.java:224)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:314)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at
org.apache.felix.http.jetty.internal.JettyService.initializeJetty(JettyService.java:145)
at
org.apache.felix.http.jetty.internal.JettyService.startJetty(JettyService.java:112)
at
org.apache.felix.http.jetty.internal.JettyService.run(JettyService.java:203)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.nio.channels.ClosedByInterruptException
at
java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:184)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:518)
at java.nio.channels.SocketChannel.open(SocketChannel.java:146)
at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:78)
... 18 more
[INFO] Started jetty 6.1.x at port 8080
If you update the test bundle, the URL connection returns a 404 instead (yes,
the servlet is first unregistered, then re-registered).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.