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

Shichao Yuan updated POOL-393:
------------------------------
    Summary: BaseGenericObjectPool.jmxRegister may cost too much time  (was: 
BaseGenericObjectPool.jmxRegister may cost too much time when creating many 
pools)

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



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

Reply via email to