[jboss-user] [JBossCache] - improve s:cache performances

Zerg-Spirit do-not-reply at jboss.com
Fri Dec 7 05:21:10 EST 2007


Hi, I already posted this message in the Seam forums, but I figured it was most probably a topic that would fit here.

I'm currently working on a big page displaying a topic and every of its children hierarchically.
Since these topics can have a lot of children, I figured out I should cache my page to enhance my performances.

I actually managed to cache it, jumping from a poor 40s~ page generation time to a big but-still-not-great enhancement to 6s.
Thanks to a sysout, I've also noticed that when a cached page is rendered, my backing bean is being used!
I actually don't understand why it takes so much time, since as far as I understood, the whole page should be cached, so it should basically result to a 'static page', ie. almost an instant loading.

Here's the code:

Code:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:s="http://jboss.com/products/seam/taglib"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:rich="http://richfaces.ajax4jsf.org/rich"
	xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
	xmlns:c="http://java.sun.com/jstl/core"
	template="/layout/template.xhtml">


	<ui:define name="body">
	<s:cache key="#{topicHome.instance}" region="/Topic" enabled="true">
		<h:form>
			<s:link value="#{messages['lrb.message.back_to_main_list']}" view="/Thesaurus.xhtml"/>
			<h:outputText value=" | " />
			<h:inputText value="#{searchTopic}" />
			<h:commandButton value="#{messages['lrb.action.search']}"
				action="#{thesaurusManager.searchTopic()}" />
			
			
			<h:commandLink action="#{thesaurusManager.showTopic(topicHome.instance)}"
				value="#{topicHome.instance.name}" />
			<h:commandLink
				action="#{thesaurusManager.selectTopic(topicHome.instance)}"
				value="(#{topicHome.instance.relatedBooks} #{messages['lrb.thesaurus.hits']})"
				rendered="#{topicHome.instance.relatedBooks.intValue() != 0}" />
			
			<ui:include src="/layout/alphabetLinks.xhtml"/>
			
			
				
					
						<c:forEach items="#{topicHome.instance.sortedColumnedChildren}"
							var="superList">
							
							<c:forEach items="#{superList}" var="list">
								<c:forEach items="#{list}" var="t">
									
									<f:subview >
										<s:link view="/showTopic" value="#{t.name}" propagation="nest"> <f:param name="topicId" value="#{t.id}" /> </s:link>
										(<s:link value="#{t.relatedBooks} #{messages['lrb.thesaurus.hits']}" view="/showBooks" propagation="nest"> <f:param name="topicId" value="#{t.id}"/> </s:link>)
										<ui:include src="/showChild.xhtml">
											<ui:param name="topic" value="#{t}" />
										</ui:include>
									</f:subview>
								</c:forEach>
								
							</c:forEach>
						</c:forEach>

					
				

			
		</h:form>
		</s:cache>
	</ui:define>

</ui:composition>
	



This page is the main one, the one I surrounded with s:cache tag.
Then showChild is called recursively to load every children:
Code:

	<c:forEach items="#{topic.children}" var="t">
		<f:subview>
			
				<s:link view="/showTopic" value="#{t.name}" propagation="nest"> <f:param name="topicId" value="#{t.id}" /> </s:link> (<s:link value="#{t.relatedBooks} #{messages['lrb.thesaurus.hits']}" view="/showBooks" propagation="nest"> <f:param name="topicId" value="#{t.id}"/> </s:link>)
			
				<ui:include src="/showChild.xhtml">
						<ui:param name="topic" value="#{t}" />
				</ui:include>
				
				
		</f:subview>
	</c:forEach>	




Then, finally, my treecache.xml config file:
Code:

<?xml version="1.0" encoding="UTF-8"?>

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  PojoCache Service Configuration                               -->
<!--                                                                       -->
<!-- ===================================================================== -->



   <!-- Used inside JBoss AS
   
 -->
 
   <!-- ==================================================================== -->
   <!-- Defines configuration                                                -->
   <!-- ==================================================================== -->

   

   	<!-- Used inside JBoss AS -->
   	jboss:service=Naming
   	jboss:service=TransactionManager

   	<!--
   		Configure the TransactionManager
   	org.jboss.cache.DummyTransactionManagerLookup
   	-->

   	<!--
   		Node locking scheme:
   		OPTIMISTIC
   		PESSIMISTIC (default)
   	-->
   	PESSIMISTIC

   	<!--
   		Note that this attribute is IGNORED if your NodeLockingScheme above is OPTIMISTIC.
   		
   		Isolation level : SERIALIZABLE
   		REPEATABLE_READ (default)
   		READ_COMMITTED
   		READ_UNCOMMITTED
   		NONE
   	-->
   	REPEATABLE_READ

   	<!--
   		Valid modes are LOCAL
   		REPL_ASYNC
   		REPL_SYNC
   		INVALIDATION_ASYNC
   		INVALIDATION_SYNC
   	-->
   	LOCAL

   	<!-- Name of cluster. Needs to be the same for all clusters, in order
   		to find each other
   	-->
   	Sample-Cluster

   	<!-- JGroups protocol stack properties. Can also be a URL,
   		e.g. file:/home/bela/default.xml
   		
   	-->

   	
   		
   			<!-- UDP: if you have a multihomed machine,
   				set the bind_addr attribute to the appropriate NIC IP address -->
   			<!-- UDP: On Windows machines, because of the media sense feature
   				being broken with multicast (even after disabling media sense)
   				set the loopback attribute to true -->
   			<UDP mcast_addr="228.1.2.5" mcast_port="45577" ip_ttl="64" ip_mcast="true" mcast_send_buf_size="150000"
   				mcast_recv_buf_size="80000" ucast_send_buf_size="150000" ucast_recv_buf_size="80000" loopback="false" />
   			<PING timeout="2000" num_initial_members="3" up_thread="false" down_thread="false" />
   			<MERGE2 min_interval="10000" max_interval="20000" />
   			<FD shun="true" up_thread="true" down_thread="true" />
   			<VERIFY_SUSPECT timeout="1500" up_thread="false" down_thread="false" />
   			<pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800" up_thread="false" down_thread="false" />
   			<pbcast.STABLE desired_avg_gossip="20000" up_thread="false" down_thread="false" />
   			<UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10" down_thread="false" />
   			<FRAG frag_size="8192" down_thread="false" up_thread="false" />
   			<pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="true" print_local_addr="true" />
   			<pbcast.STATE_TRANSFER up_thread="false" down_thread="false" />
   		
   	


   	<!--
   		The max amount of time (in milliseconds) we wait until the
   		initial state (ie. the contents of the cache) are retrieved from
   		existing members in a clustered environment
   	-->
   	20000

   	<!--
   		Number of milliseconds to wait until all responses for a
   		synchronous call have been received.
   	-->
   	15000

   	<!-- Max number of milliseconds to wait for a lock acquisition -->
   	10000

   	<!-- Name of the eviction policy class. We have commented it off to disable eviction.
   	-->
   		org.jboss.cache.aop.eviction.AopLRUPolicy

   	<!-- Specific eviction policy configurations. This is LRU -->
   	
   		
   			5
   			<!-- Cache wide default -->
   			
   				5000
   				5
   			
   			
   				5
   				4
   			
   			
   				100
   				4
   			
   			
   				5000
   				10000
   				1800
   			
   		
   	
   

		



I guess there's something wrong with my config file or something,

Thanks for your help. 

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

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



More information about the jboss-user mailing list