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; }
