[jboss-user] [JBoss Portal Users] - Re: JBoss portal performance: (Portal)templatePortal.copy(da

vivek_saini07 do-not-reply at jboss.com
Wed Aug 26 01:42:33 EDT 2009


We have found a work around for this.

Problem further drilled down to following calls of ObjectNode domain object(void addChild(String name, PortalObjectImpl childObject) of org.jboss.portal.core.impl.model.portal.ObjectNode).

  | children.containsKey(name)
  | 
Here children is a MAP(One-to-Many association) that is being loaded lazily. Because of this lazy loading, initially it is loaded as a proxy and whenever any operation performed on it, entire map gets loaded that in-turn fires those multiple select queries.

Proposed Solution

Solution lies in making this collection lazy="extra" instead of lazy="true" in core/src/resources/portal-core-sar/conf/hibernate/portal/domain.hbm.xml


From: 
<class
  |       name="org.jboss.portal.core.impl.model.portal.ObjectNode"
  |       table="JBP_OBJECT_NODE">
  | .....
  | <map
  |          name="children"
  |          inverse="true"
  |          cascade="none"
  |          fetch="select"
  |          lazy="true">
  |          <cache usage="@portal.hibernate.cache.usage@"/>
  |          <key column="PARENT_KEY"/>
  |          <map-key
  |             type="org.jboss.portal.jems.hibernate.MagicString"
  |             column="NAME"/>
  |          <one-to-many class="org.jboss.portal.core.impl.model.portal.ObjectNode"/>
  |       </map>

To: 
 <map
  |          name="children"
  |          inverse="true"
  |          cascade="none"
  |          fetch="select"
  |          lazy="extra">
  |          <cache usage="@portal.hibernate.cache.usage@"/>
  |          <key column="PARENT_KEY"/>
  |          <map-key
  |             type="org.jboss.portal.jems.hibernate.MagicString"
  |             column="NAME"/>
  |          <one-to-many class="org.jboss.portal.core.impl.model.portal.ObjectNode"/>
  |       </map>


The advantage gained by making lazy="extra" to lazy="true", according to hibernate docs,HERE  https://hibernate.bluemars.net/315.html.

anonymous wrote : "...The collection wrapper is now smarter than before. The collection is no longer initialized if you call size(), contains(), or isEmpty()—the database is queried to retrieve the necessary information. If it’s a Map or a List, the operations containsKey() and get() also query the database directly..."


After doing this only one query in being fired instead of plethora of queries.

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4251697#4251697

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4251697




More information about the jboss-user mailing list