[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