kuldeepak bajaj created BEANUTILS-466:
-----------------------------------------

             Summary: Threads are blocked while creating LazyDynaBean objects.
                 Key: BEANUTILS-466
                 URL: https://issues.apache.org/jira/browse/BEANUTILS-466
             Project: Commons BeanUtils
          Issue Type: Improvement
          Components: DynaBean
    Affects Versions: 1.8.3
            Reporter: kuldeepak bajaj


We have extended LazyDynaBean class and using these derived classes as data 
beans. 
Thread dumps of our application shows lot of threads blocking to take lock of 
HashTable as follows
{noformat} 
"[ACTIVE] ExecuteThread: '33' for queue: 'weblogic.kernel.Default 
(self-tuning)'" daemon prio=3 tid=0x0000000119978800 nid=0x96 waiting for 
monitor entry [0xfffffffd2cbfa000]
   java.lang.Thread.State: BLOCKED (on object monitor)
                at java.util.Hashtable.get(Hashtable.java:333)
                - waiting to lock <0xfffffffd7bcea6a0> (a java.util.Hashtable)
                at 
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:233)
                at 
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
                at 
org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
                at 
org.apache.commons.beanutils.LazyDynaBean.<init>(LazyDynaBean.java:119)
 {noformat}
Reasons:-
1)  LazyDynaBean have transient instance type Log object created at 
LazyDynaBean object creation. 
2)  LogFactoryImpl uses Hashtable to cache Log instances.
 
Our Proposal:-
Can we differ creation of Log object until it is actually required? This class 
already have method logger() which creates Log object if it null(required for 
Deserialization). And same method currently is being used whenever Log object 
is required in this class. So we can keep Log object as null at LazyDynaBean 
object creation.  




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to