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