[jboss-svn-commits] JBL Code SVN: r7403 - in labs/jbossforums/trunk/forums/src: main/org/jboss/portlet/forums main/org/jboss/portlet/forums/impl main/org/jboss/portlet/forums/model main/org/jboss/portlet/forums/ui main/org/jboss/portlet/forums/ui/view resources/portal-forums-sar/conf/hibernate resources/portal-forums-war/WEB-INF resources/portal-forums-war/views/category

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Nov 4 16:54:01 EST 2006


Author: unibrew
Date: 2006-11-04 16:53:55 -0500 (Sat, 04 Nov 2006)
New Revision: 7403

Modified:
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ForumsPortlet.java
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumImpl.java
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumsModuleImpl.java
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/model/Forum.java
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewCategory.java
   labs/jbossforums/trunk/forums/src/resources/portal-forums-sar/conf/hibernate/hibernate.cfg.xml
   labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml
   labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/category/viewcategory_body.xhtml
Log:
[JBFORUMS-135] More efficient sollution of showing Forums' lastPosts.Together with other smaller improvements.

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ForumsPortlet.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ForumsPortlet.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ForumsPortlet.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -3236,7 +3236,7 @@
                   // Get forum data
                   int currentForumStatus = currentForum.getStatus();
                   Integer currentForumId = currentForum.getId();
-                  Post lastPost = currentForum.getLastPost();
+                  Post lastPost = forumsModule.findLastPost(currentForum);
                   String currentForumDescription = currentForum
                      .getDescription();
                   int currentForumPostSize = currentForum.getPostCount();

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumImpl.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumImpl.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumImpl.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -35,6 +35,7 @@
  * @author <a href="mailto:julien at jboss.org">Julien Viet </a>
  * @author <a href="mailto:theute at jboss.org">Thomas Heute </a>
  * @author <a href="mailto:boleslaw.dawidowicz at jboss.com">Boleslaw Dawidowicz</a>
+ * @author <a href="mailto:ryszard.kozmik at jboss.com">Ryszard Kozmik</a>
  * @version $Revision: 1124 $
  * @hibernate.class table="jbp_forums_forums"
  */
@@ -56,8 +57,8 @@
    //private Post       lastPost;
    private String name;
    private int order;
-   //private int        topicCount;
-   //private int        postCount;
+   private int        topicCount;
+   private int        postCount;
    //private boolean pruneEnable;
    //private int pruneNext;
    private int status;
@@ -130,41 +131,51 @@
       this.id = id;
    }
 
-   /**
+
+    //TODO: This method can be optimized by adding lastPost column in table
+    /**
     * _ at _hibernate.many-to-one
     * _cascade_="all"
     * _column_="jbp_last_post_id"
     * _class_="org.jboss.portlet.forums.impl.PostImpl"
     */
-   public Post getLastPost()
-   {
-       if (fm==null) {
-          initializeForumsModule();
-       }
-       Session session = fm.getHibernate().getSessionFactory().getCurrentSession();
-       Query query =
-          session.createQuery("from PostImpl as p where p.topic.forum.id  = :forumId order by p.createDate desc");
-       query.setInteger("forumId",  getId().intValue());
-       query.setFirstResult(0);
-       query.setMaxResults(1);
-       Post lastPost = (Post)query.uniqueResult();
-       Post post = null;
-       for (Iterator i = getTopics().iterator(); i.hasNext();)
-       {
-       post = ((Topic)i.next()).getLastPost();
-       }
-       return lastPost;
-   }
+    /*public Post getLastPost()
+    {
+                //"select post from ForumImpl as forum" +
+                //"join forum.topics as topic" +
+                //"join topic.posts as post +
+                //"order by topic.lastPostDate");       
+                
+                //"select topic from ForumImpl as forum" +
+                //"join forum.topics as topic" +
+                //"where topic.lastPostDate=(select MIN(t.lastPostDate) from forum.topics t)"
+       Session session = singleton.getCurrentSession();
+                 Query query = session.createQuery(            
+                "select post from ForumImpl as forum " +
+                "join forum.topics as topic " +
+                "join topic.posts as post " +
+                "where forum.id=:forumId " +
+                "AND post.date=(select MIN(t.lastPostDate) from forum.topics t)");
+      
+          query.setString("forumId",getId().toString());
+       Post post2 = (Post)query.uniqueResult();
+      Post post = null; 
+      for (Iterator i = getTopics().iterator(); i.hasNext();)
+      {
+         post = ((Topic)i.next()).getLastPost();
+      }      
+      return post;
+    }*/
 
    /**
     * DOCUMENT_ME
     *
     * @param lastPost DOCUMENT_ME
     */
-   public void setLastPost(Post lastPost)
+   /*public void setLastPost(Post lastPost)
    {
       //this.lastPost = lastPost;
-   }
+   }*/
 
    /**
     * @hibernate.property column="jbp_name"
@@ -213,8 +224,8 @@
     */
    public int getTopicCount()
    {
-      //return topicCount;
-      return getTopics().size();
+      return topicCount;
+      //return getTopics().size();
    }
 
    /**
@@ -224,7 +235,7 @@
     */
    public void setTopicCount(int size)
    {
-      //this.topicCount = size;
+      this.topicCount = size;
    }
 
    /**
@@ -232,7 +243,7 @@
     */
    public void addTopicSize()
    {
-      //setTopicCount(topicCount + 1);
+      setTopicCount(topicCount + 1);
    }
 
    /**
@@ -242,14 +253,14 @@
     */
    public int getPostCount()
    {
-      int sum = 0;
-      for (Iterator i = getTopics().iterator(); i.hasNext();)
-      {
-         Topic topic = (Topic)i.next();
-         sum += topic.getPosts().size();
-      }
-      return sum;
-      //return postCount;
+      //int sum = 0;
+      //for (Iterator i = getTopics().iterator(); i.hasNext();)
+      //{
+      //   Topic topic = (Topic)i.next();
+      //   sum += topic.getPosts().size();
+      //}
+      //return sum;
+      return postCount;
    }
 
    /**
@@ -259,7 +270,7 @@
     */
    public void setPostCount(int size)
    {
-      //this.postCount = size;
+      this.postCount = size;
    }
 
    /**
@@ -267,7 +278,7 @@
     */
    public void addPostSize()
    {
-      //setPostCount(postCount + 1);
+      setPostCount(postCount + 1);
    }
 
    /**

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumsModuleImpl.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumsModuleImpl.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/impl/ForumsModuleImpl.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -1106,24 +1106,36 @@
 
    public Post findLastPost(Forum forum)
       throws ModuleException
-   {
-      try
-      {
-         Session session = getSession();
-         Query query =
-            session.createQuery("from PostImpl as p where p.topic.forum  = :forumId order by p.createDate desc");
-         query.setString("forumId", "" + forum.getId());
-         query.setFirstResult(0);
-         query.setMaxResults(1);
-         Post lastPost = (Post)query.uniqueResult();
-         return lastPost;
-      }
-      catch (HibernateException e)
-      {
-         e.printStackTrace();
-         return null;
-      }
-   }
+       {
+          try
+          {
+             Session session = getSession();
+             Query query =
+                
+                // This is old query, considered as less efficient
+                //session.createQuery("from PostImpl as p where p.topic.forum  = :forumId order by p.createDate desc");
+                
+                session.createQuery("select p                           " + 
+                                    "from PostImpl as p                 " +
+                                    "join fetch p.poster                " + 
+                                    "where p.createDate = (             " + 
+                                    "   select MAX(topic.lastPostDate)  " + 
+                                    "   from TopicImpl as topic         " + 
+                                    "   where topic.forum = :forumId    " + 
+                                    ")                                  " );
+             query.setString("forumId", "" + forum.getId());
+             query.setFirstResult(0);
+             query.setMaxResults(1);
+             query.setCacheable(true);
+             Post lastPost = (Post)query.uniqueResult();
+             return lastPost;
+          }
+          catch (HibernateException e)
+          {
+             e.printStackTrace();
+             return null;
+          }
+       }
 
    public Post findFirstPost(Topic topic)
       throws ModuleException

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/model/Forum.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/model/Forum.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/model/Forum.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -17,6 +17,7 @@
 /**
  * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  * @author <a href="mailto:boleslaw.dawidowicz at jboss.com">Boleslaw Dawidowicz</a>
+ * @author <a href="mailto:ryszard.kozmik at jboss.com">Ryszard Kozmik</a>
  * @version $Revision: 916 $
  */
 public interface Forum
@@ -61,14 +62,14 @@
     *
     * @return DOCUMENT_ME
     */
-   Post getLastPost();
+   //Post getLastPost();
 
    /**
     * DOCUMENT_ME
     *
     * @param lastpost DOCUMENT_ME
     */
-   void setLastPost(Post lastpost);
+   //void setLastPost(Post lastpost);
 
    /**
     * DOCUMENT_ME

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -29,7 +29,11 @@
 import javax.portlet.ActionRequest;
 import javax.portlet.PortletRequest;
 
+import org.jboss.portal.core.modules.ModuleException;
 import org.jboss.portal.format.render.bbcodehtml.ToHTMLConfig;
+import org.jboss.portlet.forums.ForumsModule;
+import org.jboss.portlet.forums.model.Forum;
+import org.jboss.portlet.forums.model.Post;
 
 
 /**
@@ -99,4 +103,12 @@
         return dateStr;
     }
     
+    public static Post getLastPost(ForumsModule fm, Forum forum) {
+        try {
+            return fm.findLastPost(forum);    
+        } catch (ModuleException e) {
+            return null;
+        }
+    }
+    
 }

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewCategory.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewCategory.java	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewCategory.java	2006-11-04 21:53:55 UTC (rev 7403)
@@ -27,6 +27,9 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.hibernate.Hibernate;
+
+import org.jboss.portlet.forums.ForumsModule;
 import org.jboss.portlet.forums.model.Category;
 import org.jboss.portlet.forums.model.Forum;
 import org.jboss.portlet.forums.ui.BaseController;
@@ -40,8 +43,7 @@
 
 /**
  * @author <a href="mailto:sohil.shah at jboss.com">Sohil Shah</a>
- *
- * 
+ * @author <a href="mailto:ryszard.kozmik at jboss.com">Ryszard Kozmik</a> 
  */
 public class ViewCategory extends BaseController
 { 
@@ -84,6 +86,10 @@
         return this.forums;
     }
     
+    public ForumsModule getModule () throws Exception {
+        return BaseController.getForumsModule();
+    }
+    
         
     /**
      * @return Returns the forumImageDescriptions.
@@ -149,6 +155,9 @@
             Collection cour = BaseController.getForumsModule().findCategories();
             if(cour!=null)
             {
+                if (!Hibernate.isInitialized(cour)) {
+                    Hibernate.initialize(cour);
+                }
                 Iterator iterator = cour.iterator();
                 while (iterator.hasNext())
                 {
@@ -179,7 +188,11 @@
            this.getCategories().add(category);
            
            //process the forums associated with this category
-           Iterator forumsIterator = BaseController.getForumsModule().findForumsByCategoryId(category.getId()).iterator();
+           Collection forums = BaseController.getForumsModule().findForumsByCategoryId(category.getId());
+           if (forums!=null && !Hibernate.isInitialized(forums)) {
+               Hibernate.initialize(forums);
+           }
+           Iterator forumsIterator = forums.iterator();
            Collection categoryForums = new ArrayList();
            while (forumsIterator.hasNext())
            {

Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-sar/conf/hibernate/hibernate.cfg.xml
===================================================================
--- labs/jbossforums/trunk/forums/src/resources/portal-forums-sar/conf/hibernate/hibernate.cfg.xml	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/resources/portal-forums-sar/conf/hibernate/hibernate.cfg.xml	2006-11-04 21:53:55 UTC (rev 7403)
@@ -4,7 +4,8 @@
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
    <session-factory>
-      <property name="connection.datasource">java:@portal.datasource.name@</property>
+      <property name="connection.datasource">java:@portal.datasource.name@</property>
+      <property name="hibernate.cache.use_query_cache">true</property>
       <property name="show_sql">false</property>
 
       <!-- Force the dialect instead of using autodetection -->
@@ -22,4 +23,4 @@
       <mapping resource="org/jboss/portlet/forums/impl/WatchImpl.hbm.xml"/>
       <mapping resource="org/jboss/portlet/forums/impl/AttachmentImpl.hbm.xml"/>
    </session-factory>
-</hibernate-configuration>
\ No newline at end of file
+</hibernate-configuration>

Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml
===================================================================
--- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml	2006-11-04 21:53:55 UTC (rev 7403)
@@ -44,6 +44,16 @@
   		<function-class>org.jboss.portlet.forums.ui.JSFUtil</function-class>
   		<function-signature>java.lang.String getErrorMsg()</function-signature>
 	</function>
+        <!--
+                function retrieves last post of specified in parameter forum
+        -->
+        <function>
+		<function-name>lastPost</function-name>
+  		<function-class>org.jboss.portlet.forums.ui.ForumUtil</function-class>
+  		<function-signature>
+                    org.jboss.portlet.forums.model.Post getLastPost(org.jboss.portlet.forums.ForumsModule,org.jboss.portlet.forums.model.Forum)
+                </function-signature>
+	</function>
 	<!-- 
 		 function retrieves a message if one is found
 		 return null if nothing is found

Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/category/viewcategory_body.xhtml
===================================================================
--- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/category/viewcategory_body.xhtml	2006-11-04 21:30:34 UTC (rev 7402)
+++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/category/viewcategory_body.xhtml	2006-11-04 21:53:55 UTC (rev 7403)
@@ -91,22 +91,22 @@
 		        <td class="row2" align="center" valign="middle" height="50" nowrap="nowrap">
 		        	<span class="gensmall">        	    	
 		        	    <c:choose>
-		        	            <c:when test="#{forumrow.lastPost!=null}">
-			        				#{forums:dateStr(forumrow.lastPost.createDate)}
+		        	            <c:when test="#{(forums:lastPost(category.module,forumrow))!=null}">
+			        				#{forums:dateStr((forums:lastPost(category.module,forumrow)).createDate)}
 			        				<br/>
 			        				<c:choose>
 				        				<c:when test="#{category.anonymous}">
-				        					${forumrow.lastPost.poster.user.userName} 
+				        					${(forums:lastPost(category.module,forumrow)).poster.user.userName} 
 				        				</c:when>
 				        				<c:otherwise>				        				    
 				        					<h:outputLink value="#{forums:outputLink(shared.links['profile'],true)}">
-				        						<f:param name="uid" value="#{forumrow.lastPost.poster.user.id}"/>
-				        						<h:outputText value="${forumrow.lastPost.poster.user.userName}"/>
+				        						<f:param name="uid" value="#{(forums:lastPost(category.module,forumrow)).poster.user.id}"/>
+				        						<h:outputText value="${(forums:lastPost(category.module,forumrow)).poster.user.userName}"/>
 				        					</h:outputLink>
 				        				</c:otherwise>
 			        				</c:choose>			                        
 			        				<h:outputLink value="#{forums:outputLink(shared.links['topic'],true)}" style="text-decoration: none;">
-			        					<f:param name="t" value="#{forumrow.lastPost.topic.id}"/>
+			        					<f:param name="t" value="#{(forums:lastPost(category.module,forumrow)).topic.id}"/>
 			        				    <f:verbatim>
 			        						<img border="0" src="#{forums:themeURL('resourceIconLatestReplyURL')}"/>
 			        					</f:verbatim>




More information about the jboss-svn-commits mailing list