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.

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?

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);
> +                    }
> +                }
>             }
>         }
>     }
>
> _______________________________________________
> notifications mailing list
> [EMAIL PROTECTED]
> http://lists.xwiki.org/mailman/listinfo/notifications

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

Reply via email to