hi,

When creating many pools, I find that it tasks too much time to register
jmx.

In the code,  the ObjectName's postfix always starts with 1, so many
InstanceAlreadyExistsExceptions may be thrown before registered
successfully.

Maybe a random number is a better choice, or a atomic long.

https://issues.apache.org/jira/projects/POOL/issues/POOL-393

private ObjectName jmxRegister(BaseObjectPoolConfig config,
String jmxNameBase, String jmxNamePrefix)
Unknown macro: { ObjectName objectName = null; MBeanServer mbs =
ManagementFactory.getPlatformMBeanServer(); int i = 1; boolean registered =
false; String base = config.getJmxNameBase(); if (base == null) Unknown
macro}

while (!registered) {
try
Unknown macro: { ObjectName objName; // Skip the numeric suffix for the
first pool in case there is // only one so the names are cleaner. if (i ==
1) Unknown macro}

else
Unknown macro: { objName = new ObjectName(base + jmxNamePrefix + i); }
mbs.registerMBean(this, objName);
objectName = objName;
registered = true;
} catch (MalformedObjectNameException e)
Unknown macro: { if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals(
jmxNamePrefix) && jmxNameBase.equals(base)) Unknown macro}

else
Unknown macro: { // Must be an invalid name. Use the defaults instead.
jmxNamePrefix = BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX; base =
jmxNameBase; }
} catch (InstanceAlreadyExistsException e)
Unknown macro: { // Increment the index and try again i++; }
catch (MBeanRegistrationException e)
Unknown macro: { // Shouldn't happen. Skip registration if it does.
registered = true; }
catch (NotCompliantMBeanException e)

}
return objectName;
}

Reply via email to