Uploaded image for project: 'Geronimo'
  1. Geronimo
  2. GERONIMO-728

Jetty gives misleading NPE on "port in use" condition

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.0-M3, 1.0-M4, 1.0-M5
    • Fix Version/s: 1.0-M5
    • Component/s: dependencies, web
    • Labels:
      None

      Description

      When Jetty starts up but the port it wants is in use, you get an error like this:

      19 ERROR [GBeanInstance] Problem in doFail of geronimo.server:J2EEApplication=null,J2EEModule=org/apache/geronimo/Server,J2EEServer=geronimo,j2eeType=GBean,name=JettyWebConnector
      java.lang.NullPointerException
      at org.mortbay.util.ThreadedServer.stop(ThreadedServer.java:544)
      at org.mortbay.http.SocketListener.stop(SocketListener.java:211)
      at org.apache.geronimo.jetty.connector.JettyConnector.doFail(JettyConnector.java:102)
      at org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance(GBeanInstance.java:869)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBeanInstanceState.java:328)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceState.java:111)
      at org.apache.geronimo.gbean.runtime.GBeanInstance.start(GBeanInstance.java:486)
      at org.apache.geronimo.gbean.runtime.GBeanSingleReference.attemptFullStart(GBeanSingleReference.java:154)
      at org.apache.geronimo.gbean.runtime.GBeanSingleReference.targetAdded(GBeanSingleReference.java:127)
      at org.apache.geronimo.gbean.runtime.AbstractGBeanReference.addTarget(AbstractGBeanReference.java:242)
      at org.apache.geronimo.gbean.runtime.GBeanSingleReference$1.running(GBeanSingleReference.java:163)
      at org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.fireRunningEvent(BasicLifecycleMonitor.java:155)
      at org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.access$300(BasicLifecycleMonitor.java:38)
      at org.apache.geronimo.kernel.basic.BasicLifecycleMonitor$RawLifecycleBroadcaster.fireRunningEvent(BasicLifecycleMonitor.java:231)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBeanInstanceState.java:352)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceState.java:111)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive(GBeanInstanceState.java:133)
      at org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive(GBeanInstance.java:503)
      at org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean(BasicKernel.java:207)
      at org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive(GBeanInstanceState.java:141)
      at org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive(GBeanInstance.java:503)
      at org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean(BasicKernel.java:207)
      at org.apache.geronimo.system.main.Daemon.doStartup(Daemon.java:247)
      at org.apache.geronimo.system.main.Daemon.<init>(Daemon.java:81)
      at org.apache.geronimo.system.main.Daemon.main(Daemon.java:320)

      Only later does the BindException show up, whereas I believe the BindException should be first (and in fact only – what good does the NPE do?).

      So what I think should happen is that we should trap a BindException, and if it comes up, don't try to stop the SocketListener (or at least don't generate another exception if it doesn't work). Then print an ERROR message including the port number (ERROR: Jetty unable to bind to port 8080). Then throw the BindException if the full stack trace would be useful.

        Attachments

          Activity

            People

            • Assignee:
              kevan Kevan Miller
              Reporter:
              ammulder Aaron Mulder
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: