mirror of
https://github.com/jetty/jetty.project.git
synced 2025-02-28 10:59:19 +00:00
416990 JMX names statically unique
Concurrent access to counter
This commit is contained in:
parent
4d1c7ed28d
commit
423dc1e443
@ -23,6 +23,9 @@ import java.util.HashMap;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import javax.management.InstanceNotFoundException;
|
import javax.management.InstanceNotFoundException;
|
||||||
import javax.management.MBeanRegistrationException;
|
import javax.management.MBeanRegistrationException;
|
||||||
@ -42,8 +45,13 @@ import org.eclipse.jetty.util.log.Logger;
|
|||||||
public class MBeanContainer implements Container.InheritedListener, Dumpable
|
public class MBeanContainer implements Container.InheritedListener, Dumpable
|
||||||
{
|
{
|
||||||
private final static Logger LOG = Log.getLogger(MBeanContainer.class.getName());
|
private final static Logger LOG = Log.getLogger(MBeanContainer.class.getName());
|
||||||
private final static HashMap<String, Integer> _unique = new HashMap<String, Integer>();
|
private final static ConcurrentMap<String, AtomicInteger> __unique = new ConcurrentHashMap<String, AtomicInteger>();
|
||||||
|
|
||||||
|
public static void resetUnique()
|
||||||
|
{
|
||||||
|
__unique.clear();
|
||||||
|
}
|
||||||
|
|
||||||
private final MBeanServer _mbeanServer;
|
private final MBeanServer _mbeanServer;
|
||||||
private final WeakHashMap<Object, ObjectName> _beans = new WeakHashMap<Object, ObjectName>();
|
private final WeakHashMap<Object, ObjectName> _beans = new WeakHashMap<Object, ObjectName>();
|
||||||
private String _domain = null;
|
private String _domain = null;
|
||||||
@ -186,11 +194,16 @@ public class MBeanContainer implements Container.InheritedListener, Dumpable
|
|||||||
buf.append(",").append("name=").append(name);
|
buf.append(",").append("name=").append(name);
|
||||||
|
|
||||||
String basis = buf.toString();
|
String basis = buf.toString();
|
||||||
Integer count = _unique.get(basis);
|
|
||||||
count = count == null ? 0 : 1 + count;
|
AtomicInteger count = __unique.get(basis);
|
||||||
_unique.put(basis, count);
|
if (count==null)
|
||||||
|
{
|
||||||
oname = ObjectName.getInstance(domain + ":" + basis + ",id=" + count);
|
count=__unique.putIfAbsent(basis,new AtomicInteger());
|
||||||
|
if (count==null)
|
||||||
|
count=__unique.get(basis);
|
||||||
|
}
|
||||||
|
|
||||||
|
oname = ObjectName.getInstance(domain + ":" + basis + ",id=" + count.getAndIncrement());
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectInstance oinstance = _mbeanServer.registerMBean(mbean, oname);
|
ObjectInstance oinstance = _mbeanServer.registerMBean(mbean, oname);
|
||||||
|
@ -98,6 +98,7 @@ public class AttrEventTriggerTest
|
|||||||
_handler = new TestHandler();
|
_handler = new TestHandler();
|
||||||
_server.setHandler(_handler);
|
_server.setHandler(_handler);
|
||||||
|
|
||||||
|
MBeanContainer.resetUnique();
|
||||||
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
|
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||||
_mBeanContainer = new MBeanContainer(mBeanServer);
|
_mBeanContainer = new MBeanContainer(mBeanServer);
|
||||||
_server.addBean(_mBeanContainer,true);
|
_server.addBean(_mBeanContainer,true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user