On Apr 10, 2008, at 6:42 PM, Sergiu Dumitriu wrote:

> Vincent Massol wrote:
>> Hi JV,
>>
>> Are you sure about this patch?
>>
>> It looks like it's adding a synchronize() that was not there before
>> and thus all threads will be waiting on this synchronize. Since
>> checkHibernate is called for all database access I'm worried this
>> could lead to performance issues.
>
> This should not affect performance as the synchronize() will take  
> place
> only during the first request, when hibernate is initialized.

Yes you're right, I hadn't read correctly...

Thanks
-Vincent

>> Has this been tested for performance with a tool like JMeter to
>> simulate multiple users?
>>
>> Note that I haven't analyzed the patch. I'm just worried that we  
>> might
>> be introducing a regression in term of performance.
>>
>> If the session factory is only created once then maybe it should be
>> created on app init?
>
> +1. We need to initialize things on startup, and not on requests.
>
>> Thanks
>> -Vincent
>>
>> On Apr 10, 2008, at 6:21 PM, jvdrean (SVN) wrote:
>>
>>> Author: jvdrean
>>> Date: 2008-04-10 18:21:07 +0200 (Thu, 10 Apr 2008)
>>> New Revision: 9071
>>>
>>> Modified:
>>>  xwiki-platform/core/branches/xwiki-core-1.3/xwiki-core/src/main/
>>> java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
>>> Log:
>>> XWIKI-2300 : HibernateStore synchronization problem
>>>
>>> Applied patch by Raffaello Pelagalli without modification. Added
>>> comment.
>>>
>>> Modified: xwiki-platform/core/branches/xwiki-core-1.3/xwiki-core/ 
>>> src/
>>> main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
>>> ===================================================================
>>> --- xwiki-platform/core/branches/xwiki-core-1.3/xwiki-core/src/main/
>>> java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java       2008-04-10
>>> 14:45:54 UTC (rev 9070)
>>> +++ xwiki-platform/core/branches/xwiki-core-1.3/xwiki-core/src/main/
>>> java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java       2008-04-10
>>> 16:21:07 UTC (rev 9071)
>>> @@ -510,13 +510,18 @@
>>>     */
>>>    public void checkHibernate(XWikiContext context) throws
>>> HibernateException
>>>    {
>>> -
>>> +        // Note : double locking is not a recommended pattern and
>>> is not guaranteed to work on all
>>> +        // machines. See for example 
>>> http://www.ibm.com/developerworks/java/library/j-dcl.html
>>>        if (getSessionFactory() == null) {
>>> -            initHibernate();
>>> -
>>> -            /* Check Schema */
>>> -            if (getSessionFactory() != null) {
>>> -                updateSchema(context);
>>> +            synchronized(this) {
>>> +                if (getSessionFactory() == null) {
>>> +
>>> +                    initHibernate();
>>> +                    /* Check Schema */
>>> +                    if (getSessionFactory() != null) {
>>> +                        updateSchema(context);
>>> +                    }
>>> +                }
>>>            }
>>>        }
>>>    }
>>>
>
> -- 
> Sergiu Dumitriu
> http://purl.org/net/sergiu/
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to