r1102 - in xwiki/trunk/src/main/java/com/xpn/xwiki: . store

Ludovic Dubost ludovic at users.forge.objectweb.org
Mon Jul 31 11:12:05 CEST 2006


Author: ludovic
Date: 2006-07-31 11:12:00 +0200 (Mon, 31 Jul 2006)
New Revision: 1102

Modified:
   xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/XWikiContext.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
Log:
Fixed regression which allowed a deadlock with custom mapping to be back

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java	2006-07-31 00:15:16 UTC (rev 1101)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java	2006-07-31 09:12:00 UTC (rev 1102)
@@ -3487,6 +3487,10 @@
     }
 
     public BaseClass getClass(String fullName, XWikiContext context) throws XWikiException {
+        // Used to avoid recursive loading of documents if there are recursives usage of classes
+        BaseClass bclass = context.getBaseClass(fullName);
+        if (bclass!=null)
+            return bclass;
         return getDocument(fullName, context).getxWikiClass();
     }
 

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/XWikiContext.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/XWikiContext.java	2006-07-31 00:15:16 UTC (rev 1101)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/XWikiContext.java	2006-07-31 09:12:00 UTC (rev 1102)
@@ -26,6 +26,8 @@
 
 import java.net.URL;
 import java.util.Hashtable;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.apache.xmlrpc.XmlRpcServer;
 
@@ -37,6 +39,7 @@
 import com.xpn.xwiki.web.XWikiRequest;
 import com.xpn.xwiki.web.XWikiResponse;
 import com.xpn.xwiki.web.XWikiURLFactory;
+import com.xpn.xwiki.objects.classes.BaseClass;
 
 public class XWikiContext extends Hashtable {
 
@@ -66,7 +69,10 @@
    private XWikiDocument wikiServer;
    private int cacheDuration = 0;
 
-    public XWikiContext() {
+   // Used to avoid recursive loading of documents if there are recursives usage of classes
+   private Map classCache = new HashMap();
+
+   public XWikiContext() {
    }
 
    public XWiki getWiki() {
@@ -171,7 +177,7 @@
         String username = getUser();
         return username.substring(username.indexOf(":") + 1);
     }
-    
+
     public XWikiUser getXWikiUser() {
         return user;
     }
@@ -263,4 +269,15 @@
     public void setMainXWiki(String str) {
         put("mainxwiki", str);
     }
+
+    // Used to avoid recursive loading of documents if there are recursives usage of classes
+    public void addBaseClass(BaseClass bclass) {
+        classCache.put(bclass.getName(), bclass);
+    }
+
+    // Used to avoid recursive loading of documents if there are recursives usage of classes
+    public BaseClass getBaseClass(String name) {
+        return (BaseClass) classCache.get(name);
+    }
+
 }

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java	2006-07-31 00:15:16 UTC (rev 1101)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java	2006-07-31 09:12:00 UTC (rev 1102)
@@ -359,6 +359,10 @@
                 doc.setxWikiClass(bclass);
             }
 
+            // Store this XWikiClass in the context so that we can use it in case of recursive usage of classes
+            context.addBaseClass(bclass);
+
+
             if (doc.hasElement(XWikiDocument.HAS_OBJECTS)) {
                 Query query;
                 query = session.createQuery("from BaseObject as bobject where bobject.name = :name order by bobject.number");





More information about the Xwiki-notifications mailing list