You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Ivo Ladage-van Doorn (JIRA)" <ji...@apache.org> on 2010/12/01 16:06:10 UTC

[jira] Updated: (FELIX-2714) Registered servlet throws java.net.ConnectException or returns 404 after updating the portnr using Config Admin

     [ https://issues.apache.org/jira/browse/FELIX-2714?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ivo Ladage-van Doorn updated FELIX-2714:
----------------------------------------

    Attachment: portswitchtest.zip

Attached the test bundle reproducing the issue

> 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
>         Attachments: portswitchtest.zip
>
>
> 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.SelectChannelConnector$1@135f44e: java.io.IOException: Unable to establish loopba
> ck connection
> [WARNING] failed SelectChannelConnector@0.0.0.0:8080: java.io.IOException: Unable to establish loopback connection
> [WARNING] failed Server@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.