jetty / jetty/jetty.project

testJMXOverTLS fails because of port conflict between RMI registry and server on macOS

Open
#13,430 1 comment 0 reactions 0 assignees View on GitHub
Bug
Dominant language
Java
Stars
4.1k
Forks
2k
Avg merge
3d 56m
Merged PRs (30d)
48

Description

**Jetty version(s)**
Jetty 12.0.x

**Jetty Environment**
core

**Java version/vendor** `(use: java -version)`
openjdk version "21.0.8" 2025-07-15
OpenJDK Runtime Environment Homebrew (build 21.0.8)
OpenJDK 64-Bit Server VM Homebrew (build 21.0.8, mixed mode, sharing)

**OS type/version**
macOS 15.5 (24F74)

**Description**
Hello, the testJMXOverTLS test fails, when I run "mvn install" on my Macbook Air M1 with Homebrew OpenJDK 21, because (differently from Linux) the port binding to 1100 fails on macOS (and neither retries nor changing the hardcoded port to 1101 help; the lsof and netstat also show the port 1100 being free, when the test is not being run):

```
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.458 s <<< FAILURE! -- in org.eclipse.jetty.jmx.ConnectorServerTest
[ERROR] org.eclipse.jetty.jmx.ConnectorServerTest.testJMXOverTLS -- Time elapsed: 0.439 s <<< ERROR!
java.rmi.server.ExportException:
Port already in use: 1100; nested exception is:
java.net.BindException: Address already in use
at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:356)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:251)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:415)
at java.rmi/sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at java.rmi/sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:235)
at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:158)
at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:138)
at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:450)
at org.eclipse.jetty.jmx@12.0.24-SNAPSHOT/org.eclipse.jetty.jmx.ConnectorServer.doStart(ConnectorServer.java:212)
at org.eclipse.jetty.util@12.0.24-SNAPSHOT/org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.jmx@12.0.24-SNAPSHOT/org.eclipse.jetty.jmx.ConnectorServerTest.testJMXOverTLS(ConnectorServerTest.java:248)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.net.BindException: Address already in use
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:565)
at java.base/sun.nio.ch.Net.bind(Net.java:554)
at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:636)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:391)
at java.base/java.net.ServerSocket.(ServerSocket.java:278)
at java.base/javax.net.ssl.SSLServerSocket.(SSLServerSocket.java:179)
at java.base/sun.security.ssl.SSLServerSocketImpl.(SSLServerSocketImpl.java:80)
at java.base/sun.security.ssl.SSLServerSocketFactoryImpl.createServerSocket(SSLServerSocketFactoryImpl.java:87)
at org.eclipse.jetty.util@12.0.24-SNAPSHOT/org.eclipse.jetty.util.ssl.SslContextFactory.newSslServerSocket(SslContextFactory.java:1676)
at org.eclipse.jetty.jmx@12.0.24-SNAPSHOT/org.eclipse.jetty.jmx.ConnectorServer$JMXRMIServerSocketFactory.createServerSocket(ConnectorServer.java:322)
at org.eclipse.jetty.jmx@12.0.24-SNAPSHOT/org.eclipse.jetty.jmx.ConnectorServer$JMXRMIServerSocketFactory.createServerSocket(ConnectorServer.java:297)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:672)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:344)
... 16 more

[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR] ConnectorServerTest.testJMXOverTLS:248 » Export Port already in use: 1100; nested exception is:
java.net.BindException: Address already in use
[INFO]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
```

**How to reproduce?**

```
cd jetty-core/jetty-jmx && mvn clean test -Dtest=ConnectorServerTest#testJMXOverTLS -Dmaven.build.cache.enabled=false
```

Here are the logs (please wait for my upcoming PR):

[testJMXOverTLS-broken.txt](https://github.com/user-attachments/files/21669792/testJMXOverTLS-broken.txt)
[testJMXOverTLS-disabled.txt](https://github.com/user-attachments/files/21670057/testJMXOverTLS-disabled.txt)

Contributor guide

Open the contributing guide

Research direction

Start in jetty-core/jetty-jmx with ConnectorServerTest.testJMXOverTLS, especially ConnectorServerTest.java:248, and reproduce it with the provided Maven command on macOS. Trace the RMI registry and TLS server port setup; done means the test runs successfully without the port conflict while preserving its TLS coverage.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, testing-qa
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.