I'm reverting for now

On Sun, Nov 16, 2008 at 12:20 PM, Thomas Mortagne
<[EMAIL PROTECTED]> wrote:
> On Sun, Nov 16, 2008 at 7:38 AM, Sergiu Dumitriu <[EMAIL PROTECTED]> wrote:
>> tmortagne (SVN) wrote:
>>> Author: tmortagne
>>> Date: 2008-11-14 15:41:52 +0100 (Fri, 14 Nov 2008)
>>> New Revision: 14215
>>>
>>> Added:
>>>    
>>> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/XWikiContextTest.java
>>> Modified:
>>>    
>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWikiContext.java
>>> Log:
>>> XWIKI-2837: Class Cache in context is not database aware
>>> Applied patch from Denis Gervalle (just added the base class's wiki if 
>>> exists)
>>>
>>> Modified: 
>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWikiContext.java
>>> ===================================================================
>>> --- 
>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWikiContext.java
>>>       2008-11-14 14:41:34 UTC (rev 14214)
>>> +++ 
>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWikiContext.java
>>>       2008-11-14 14:41:52 UTC (rev 14215)
>>> @@ -407,16 +407,47 @@
>>>          put("mainxwiki", str);
>>>      }
>>>
>>> -    // Used to avoid recursive loading of documents if there are 
>>> recursives usage of classes
>>> +    /**
>>> +     * Used to avoid recurrent loading of documents if there are recurrent 
>>> usage of classes.
>>> +     *
>>> +     * @param bclass the class to cache.
>>> +     */
>>>      public void addBaseClass(BaseClass bclass)
>>>      {
>>> -        this.classCache.put(bclass.getName(), bclass);
>>> +        String className = bclass.getName();
>>> +        if (bclass.getWiki() != null) {
>>> +            StringBuffer sb = new StringBuffer(bclass.getWiki());
>>> +            sb.append(":");
>>> +            sb.append(className);
>>> +            className = sb.toString();
>>> +        } else if (getDatabase() != null) {
>>> +            StringBuffer sb = new StringBuffer(getDatabase());
>>> +            sb.append(":");
>>> +            sb.append(className);
>>> +            className = sb.toString();
>>> +        }
>>> +
>>> +        this.classCache.put(className, bclass);
>>>      }
>>>
>>> -    // Used to avoid recursive loading of documents if there are 
>>> recursives usage of classes
>>> +    /**
>>> +     * Used to avoid recurrent loading of documents if there are recurrent 
>>> usage of classes.
>>> +     *
>>> +     * @param name the local name (without the wiki identifier) of the 
>>> xclass. The wiki identifier is taken from
>>> +     *            [EMAIL PROTECTED] #getDatabase()}.
>>> +     * @return the cached xclass or null if the cache does not contains 
>>> any xclass.
>>> +     */
>>>      public BaseClass getBaseClass(String name)
>>>      {
>>> -        return this.classCache.get(name);
>>> +        String classname = name;
>>> +        if (getDatabase() != null) {
>>> +            StringBuffer sb = new StringBuffer(getDatabase());
>>> +            sb.append(":");
>>> +            sb.append(name);
>>> +            classname = sb.toString();
>>> +        }
>>> +
>>> +        return this.classCache.get(classname);
>>>      }
>>>
>>>      // Used to avoid recursive loading of documents if there are 
>>> recursives usage of classes
>>>
>>
>> Unfortunately this has a bad side effect:
>>
>> org.hibernate.NonUniqueObjectException: a different object with the same
>> identifier value was already associated with the session:
>> [com.xpn.xwiki.doc.XWikiDocument#-34276813]
>>
>> Lots of errors were displayed when starting the server, caused by
>> http://jira.xwiki.org/jira/browse/XWIKI-2842 and the fact that although
>> the class cache sees XWiki.Tags and xwiki:XWiki.Tags as different
>> entities, in Hibernate they represent the same entity.
>
> There should not be any XWiki.Tags in the class cache, the only way
> for this is to have context.database to null which should not append
> in runtime... But I'm thinking now that there can be another problem
> of this kind in multiwiki where multiples wikis names can goes to the
> same database behind the scene if you use xwiki.db property.
>
>> --
>> Sergiu Dumitriu
>> http://purl.org/net/sergiu/
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
>
>
>
> --
> Thomas Mortagne
>



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

Reply via email to