r1052 - xwiki/trunk/src/main/java/com/xpn/xwiki/store
Ludovic Dubost
ludovic at users.forge.objectweb.org
Fri Apr 21 12:30:26 CEST 2006
Author: ludovic
Date: 2006-04-21 12:30:25 +0200 (Fri, 21 Apr 2006)
New Revision: 1052
Modified:
xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
Log:
Hibernate config change for flushing allowin major performance boost for documents with a lot of objects
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java 2006-04-20 02:00:55 UTC (rev 1051)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java 2006-04-21 10:30:25 UTC (rev 1052)
@@ -1,9 +1,6 @@
package com.xpn.xwiki.store;
-import org.hibernate.SessionFactory;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import org.hibernate.*;
import org.hibernate.dialect.Dialect;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
import org.hibernate.impl.SessionFactoryImpl;
@@ -136,6 +133,9 @@
*/
public Session getSession(XWikiContext context) {
Session session = (Session) context.get("hibsession");
+ // Make sure we are in this mode
+ if (session!=null)
+ session.setFlushMode(FlushMode.COMMIT);
return session;
}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java 2006-04-20 02:00:55 UTC (rev 1051)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java 2006-04-21 10:30:25 UTC (rev 1052)
@@ -211,6 +211,7 @@
bTransaction = beginTransaction(sfactory, context);
}
Session session = getSession(context);
+ session.setFlushMode(FlushMode.COMMIT);
// These informations will allow to not look for attachments and objects on loading
doc.setElement(XWikiDocument.HAS_ATTACHMENTS, (doc.getAttachmentList().size()!=0));
@@ -256,7 +257,9 @@
// Remove properties planned for removal
if (doc.getObjectsToRemove().size()>0) {
for (int i=0;i<doc.getObjectsToRemove().size();i++) {
- deleteXWikiObject((BaseObject)doc.getObjectsToRemove().get(i), context, false);
+ BaseObject bobj = (BaseObject)doc.getObjectsToRemove().get(i);
+ if (bobj!=null)
+ deleteXWikiObject(bobj, context, false);
}
doc.setObjectsToRemove(new ArrayList());
}
@@ -328,6 +331,7 @@
SessionFactory sfactory = injectCustomMappingsInSessionFactory(doc, context);
bTransaction = bTransaction && beginTransaction(sfactory, false, context);
Session session = getSession(context);
+ session.setFlushMode(FlushMode.NEVER);
try {
session.load(doc, new Long(doc.getId()));
@@ -557,7 +561,9 @@
// Remove properties planned for removal
if (doc.getObjectsToRemove().size()>0) {
for (int i=0;i<doc.getObjectsToRemove().size();i++) {
- deleteXWikiObject((BaseObject)doc.getObjectsToRemove().get(i), context, false);
+ BaseObject bobj = (BaseObject)doc.getObjectsToRemove().get(i);
+ if (bobj!=null)
+ deleteXWikiObject(bobj, context, false);
}
doc.setObjectsToRemove(new ArrayList());
}
@@ -655,7 +661,12 @@
else
session.update((String)"com.xpn.xwiki.objects.BaseObject", (Object)object);
}
-
+/*
+ if (stats)
+ session.saveOrUpdate(object);
+ else
+ session.saveOrUpdate((String)"com.xpn.xwiki.objects.BaseObject", (Object)object);
+*/
BaseClass bclass = object.getxWikiClass(context);
List handledProps = new ArrayList();
if ((bclass!=null)&&(bclass.hasCustomMapping())&&context.getWiki().hasCustomMappings()) {
@@ -669,6 +680,8 @@
dynamicSession.save((String) bclass.getName(), objmap);
else
dynamicSession.update((String) bclass.getName(), objmap);
+
+ // dynamicSession.saveOrUpdate((String) bclass.getName(), objmap);
}
if (!object.getClassName().equals("internal")) {
@@ -778,7 +791,8 @@
HashMap map = new HashMap();
Query query = session.createQuery("select prop.name, prop.classType from BaseProperty as prop where prop.id.id = :id");
query.setInteger("id", object.getId());
- Iterator it = query.list().iterator();
+ List list = query.list();
+ Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
Object[] result = (Object[]) obj;
More information about the Xwiki-notifications
mailing list