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