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.
> 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