Skip to content

Commit ed7f4af

Browse files
committed
Fix JMX MBean leak during Jetty restart cycle
Call MBeanContainer.destroy() in MBeanServerTracker.removedService() to unregister all JMX MBeans before removing the event listener. Also move the MBeanServerTracker cleanup in stopJetty() to before server.stop() so MBeans are unregistered while the Server instance is still valid. Without this fix, restarting Jetty leaves stale MBean registrations (e.g. org.eclipse.jetty.server:type=server,id=0) in the platform MBeanServer, causing an InstanceAlreadyExistsException on the next startup cycle.
1 parent 5d90911 commit ed7f4af

4 files changed

Lines changed: 14 additions & 12 deletions

File tree

http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,12 @@ private void stopJetty()
245245
this.loadBalancerCustomizerTracker = null;
246246
}
247247

248+
if (this.mbeanServerTracker != null)
249+
{
250+
this.mbeanServerTracker.close();
251+
this.mbeanServerTracker = null;
252+
}
253+
248254
try
249255
{
250256
this.server.stop();
@@ -255,12 +261,6 @@ private void stopJetty()
255261
{
256262
SystemLogger.LOGGER.error("Exception while stopping Jetty", e);
257263
}
258-
259-
if (this.mbeanServerTracker != null)
260-
{
261-
this.mbeanServerTracker.close();
262-
this.mbeanServerTracker = null;
263-
}
264264
}
265265
}
266266

http/jetty/src/main/java/org/apache/felix/http/jetty/internal/MBeanServerTracker.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void removedService(ServiceReference<MBeanServer> reference, MBeanContain
5959
{
6060
if ( service != null )
6161
{
62+
service.destroy();
6263
this.server.removeEventListener(service);
6364
super.removedService(reference, service);
6465
}

http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,12 @@ private void stopJetty()
255255
this.loadBalancerCustomizerTracker = null;
256256
}
257257

258+
if (this.mbeanServerTracker != null)
259+
{
260+
this.mbeanServerTracker.close();
261+
this.mbeanServerTracker = null;
262+
}
263+
258264
try
259265
{
260266
this.server.stop();
@@ -265,12 +271,6 @@ private void stopJetty()
265271
{
266272
SystemLogger.LOGGER.error("Exception while stopping Jetty", e);
267273
}
268-
269-
if (this.mbeanServerTracker != null)
270-
{
271-
this.mbeanServerTracker.close();
272-
this.mbeanServerTracker = null;
273-
}
274274
}
275275
}
276276

http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/MBeanServerTracker.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void removedService(ServiceReference<MBeanServer> reference, MBeanContain
5959
{
6060
if ( service != null )
6161
{
62+
service.destroy();
6263
this.server.removeEventListener(service);
6364
super.removedService(reference, service);
6465
}

0 commit comments

Comments
 (0)