[ 
https://issues.apache.org/jira/browse/POOL-393?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shichao Yuan updated POOL-393:
------------------------------
    Description: 
 

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.
{quote}private ObjectName jmxRegister(BaseObjectPoolConfig config,
 String jmxNameBase, String jmxNamePrefix) {
 ObjectName objectName = null;
 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
 int i = 1;
 boolean registered = false;
 String base = config.getJmxNameBase();
 if (base == null)
Unknown macro: \{ base = jmxNameBase; }
while (!registered) {
 try {
 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: \{ objName = new ObjectName(base + jmxNamePrefix); }
else
Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); }
mbs.registerMBean(this, objName);
 objectName = objName;
 registered = true;
 } catch (MalformedObjectNameException e) {
 if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals(
 jmxNamePrefix) && jmxNameBase.equals(base))
Unknown macro: \{ // Shouldn't happen. Skip registration if it does. registered 
= true; }
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;
 }
{quote}

  was:
 

When creating may 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.



{quote}
     private ObjectName jmxRegister(BaseObjectPoolConfig config,
            String jmxNameBase, String jmxNamePrefix) {
        ObjectName objectName = null;
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        int i = 1;
        boolean registered = false;
        String base = config.getJmxNameBase();
        if (base == null) {
            base = jmxNameBase;
        }
        while (!registered) {
            try {
                ObjectName objName;
                // Skip the numeric suffix for the first pool in case there is
                // only one so the names are cleaner.
                if (i == 1) {
                    objName = new ObjectName(base + jmxNamePrefix);
                } else {
                    objName = new ObjectName(base + jmxNamePrefix + i);
                }
                mbs.registerMBean(this, objName);
                objectName = objName;
                registered = true;
            } catch (MalformedObjectNameException e) {
                if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals(
                        jmxNamePrefix) && jmxNameBase.equals(base)) {
                    // Shouldn't happen. Skip registration if it does.
                    registered = true;
                } else {
                    // Must be an invalid name. Use the defaults instead.
                    jmxNamePrefix =
                            BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX;
                    base = jmxNameBase;
                }
            } catch (InstanceAlreadyExistsException e) {
                // Increment the index and try again
                i++;
            } catch (MBeanRegistrationException e) {
                // Shouldn't happen. Skip registration if it does.
                registered = true;
            } catch (NotCompliantMBeanException e) {
                // Shouldn't happen. Skip registration if it does.
                registered = true;
            }
        }
        return objectName;
    }
{quote}


> BaseGenericObjectPool.jmxRegister may cost too much time
> --------------------------------------------------------
>
>                 Key: POOL-393
>                 URL: https://issues.apache.org/jira/browse/POOL-393
>             Project: Commons Pool
>          Issue Type: Improvement
>    Affects Versions: 2.4.2
>            Reporter: Shichao Yuan
>            Priority: Major
>
>  
> 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.
> {quote}private ObjectName jmxRegister(BaseObjectPoolConfig config,
>  String jmxNameBase, String jmxNamePrefix) {
>  ObjectName objectName = null;
>  MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
>  int i = 1;
>  boolean registered = false;
>  String base = config.getJmxNameBase();
>  if (base == null)
> Unknown macro: \{ base = jmxNameBase; }
> while (!registered) {
>  try {
>  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: \{ objName = new ObjectName(base + jmxNamePrefix); }
> else
> Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); }
> mbs.registerMBean(this, objName);
>  objectName = objName;
>  registered = true;
>  } catch (MalformedObjectNameException e) {
>  if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals(
>  jmxNamePrefix) && jmxNameBase.equals(base))
> Unknown macro: \{ // Shouldn't happen. Skip registration if it does. 
> registered = true; }
> 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;
>  }
> {quote}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to