dataTable Paginacação

quando eu clico nesta opcao

***************consultar.jspx
									<div class="collCenter">
										<h:commandLink rendered="#{ConsultarMatrizMB.auxilioPreenchimento}"
											action="#{ConsultarMatrizMB.selecionarMatriz}"
											title="#{messages['label.selecionar']}" styleClass="imgLink">
											<h:graphicImage id="imgSelecione" url="/assets/images/select-button.png" />
										</h:commandLink>
									</div>	
executo a rotina abaixo 

		Set<Analise> analisesConsultadas = analiseService
				.buscarAnalisesPadraoPorMatriz(matriz);
************************************* retorna 1043 linhas				
		for (Analise analise : analisesConsultadas) {
			
			
		       AnaliseContratada analiseContratada = new AnaliseContratada(analise);			
				
			AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
					itemAtual, analiseContratada);			
			this.todasAnalises.add(analiseItem);
			
		}

Logo apos a rotina acima, ele vai preencher o dataTable, como a paginação no total de 1043 linhas, gerando aproximadamente 10 paginas mais ou menos.
TERIA COMO A PRIMEIRA VEZ QUE CARREGAR A ROTINA ACIMA, CARREGAR OS PRIMEIROS 100 REGISTROS, E QUANDO CLICAR NA PAGINA 2 A PAGINACACAO IRA CARREGAR DE 101 A 200
E SE APERTAR A PAGINA 3 IRA CARREGAR DE 201 ATE 300 ETC

teria como fazer isso ??? alguem teria outra solução, pq a rotina para carregar a rotina abaixo esta demorando cerca de 8 segundos:

AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
					itemAtual, analiseContratada);	
*************************************************************itensorcamento.jspx

 <rich:column>
	                                                    <h:selectOneMenu value="#{analise.metodo}" disabled="#{analise.ensaiosAlocados}"
	                                                    	converter="#{ManterItemOrcamentoMB.metodosConverter}">
	                                                        <t:selectItems value="#{analise.metodosDisponiveis}" var="metodo"
	                                                        	itemLabel="#{metodo.nome}" itemValue="#{metodo}" />
	                                                        <a4j:support action="#{ManterItemOrcamentoMB.trocarMetodo}"
	                                                        	ajaxSingle="true" event="onchange" reRender="panelAnalises, panelTotal" />
	                                                    </h:selectOneMenu>
	                                                </rich:column>
	                                                <rich:column>
	                                                    <h:selectOneMenu value="#{analise.unidade}" disabled="#{analise.ensaiosAlocados}"
	                                                    	converter="#{ManterItemOrcamentoMB.unidadeConverter}">
	                                                        <t:selectItems value="#{analise.unidade.grupo.unidades}" var="unidade"
	                                                        	itemLabel="#{unidade.descricao}" itemValue="#{unidade}" />
	                                                        <a4j:support ajaxSingle="true" event="onchange" reRender="panelAnalises, panelTotal" />
	                                                    </h:selectOneMenu>
	                                                </rich:column>
	                                                <rich:column>
	                                                    <h:outputText value="#{analise.ld}" />
	                                                </rich:column>
	                                                <rich:column>
	                                                    <h:outputText value="#{analise.lq}" />
	                                                </rich:column>
	                                                <rich:column>
	                                                    <h:outputText value="#{analise.preco}" />
	                                                </rich:column>
	                                                <rich:column>
	                                                    <h:outputText value="#{analise.prazo}" />
	                                                </rich:column>
	                                                <rich:column width="20" styleClass="collCenter">
	                                                    <a4j:commandButton reRender="panelAnalises" ajaxSingle="true"
	                                                    	action="#{ManterItemOrcamentoMB.copiarAnalise}" title="#{messages['botao.copiar']}"
	                                                    	value="" styleClass="btCopiar" />
	                                                </rich:column>
	                                                <f:facet name="footer">
	                                                    <rich:datascroller ajaxSingle="true" for="analises" />
	                                                    





***************consultar.jspx
					        <rich:dataTable rows="10" rowClasses="lineOdd,lineEven" footerClass="paginador"
					        	id="resultadoPesquisa" value="#{ConsultarMatrizMB.matrizes}"
					        	var="matrizAtual" styleClass="richDataTable">

					        	<f:facet name="header">
									<rich:columnGroup sytleClass="collCenter">
										<rich:column>
											<h:outputText width="90%" value="#{messages['label.nome']}" />
										</rich:column>
										<rich:column width="10%" styleClass="collCenter">
											<h:outputText value="#{messages['label.opcoes']}" />
										</rich:column>
									</rich:columnGroup>
								</f:facet>
								<h:column>
									<h:outputText value="#{matrizAtual.nome}" />
								</h:column>
								<h:column>
									<div class="collCenter">
										<h:commandLink rendered="#{ConsultarMatrizMB.auxilioPreenchimento}"
											action="#{ConsultarMatrizMB.selecionarMatriz}"
											title="#{messages['label.selecionar']}" styleClass="imgLink">
											<h:graphicImage id="imgSelecione" url="/assets/images/select-button.png" />
										</h:commandLink>
									</div>
								</h:column>

								<f:facet name="footer">
									<rich:datascroller ajaxSingle="true" for="resultadoPesquisa" />
								</f:facet>
					        </rich:dataTable>
					        
***************************************************ConsultarMatrizMB


public class ConsultarMatrizMB extends AuxilioPreenchimento implements PageMB {

	public void selecionarMatriz() {
		Matriz matrizSelecionada = (Matriz) matrizes.getRowData();
		this.getMbRetorno().setObjetoSelecionado(matrizSelecionada);
		FacesUtils.renderPage(this.getMbRetorno().getUrl());
	}
					        
					        

***************************************************ManterItemOrcamentoMB					        
					        
public class ManterItemOrcamentoMB implements PageMB, OperacaoConfirmavel,
		CallbackableMB {		
		
	@EJB(name = "AnaliseServiceBean/local")
	private AnaliseServiceLocal analiseService;			
		
		
		
	public void selecionarMatriz() {
		// Prepara os elementos da tela que dependem da matriz
		this.carregarElementosConformeMatrizSelecionada();
	}		
		
	private void carregarElementosConformeMatrizSelecionada() {		
					        
		Set<Analise> analisesConsultadas = analiseService
				.buscarAnalisesPadraoPorMatriz(matriz);
		for (Analise analise : analisesConsultadas) {
			
			
				AnaliseContratada analiseContratada = new AnaliseContratada(analise);
			
				
			AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
					itemAtual, analiseContratada);			
			this.todasAnalises.add(analiseItem);

			
		}
		
		}
*****************************************************AnaliseServiceBean

public class AnaliseServiceBean implements AnaliseServiceLocal {

	@PersistenceContext(unitName = "lims-pu")
	EntityManager em;

	@EJB(name = "ExecucaoServiceBean/local")
	private ExecucaoServiceLocal resultadoService;

	@SuppressWarnings("unchecked")
	public Set<Analise> buscarAnalisesPadraoPorMatriz(Matriz matriz) {
		StringBuffer jpql = new StringBuffer();
		jpql.append("select a ");
		jpql.append("from Analise a ");
		jpql.append("where a.padrao = true ");
		jpql.append(" and a.matriz = :matriz ");

		Query query = em.createQuery(jpql.toString());
		query.setParameter("matriz", matriz);
		query.setHint("org.hibernate.cacheable", true);

		Set<Analise> analises = new HashSet<Analise>(query.getResultList());
		return analises;
	}

***************************************************** AnaliseItemHelper

public class AnaliseItemHelper {


	public static AnaliseItem criarAnaliseItem(ItemOrcamento itemOrcamento,
			AnaliseContratada analiseContratada) {
		return new AnaliseItem(analiseContratada, itemOrcamento, getService()
				.buscarMetodosPorEnsaioMatriz(analiseContratada.getEnsaio(),
						analiseContratada.getMatriz()));
	}
	
	
	
*****************************************************
public class ImportadorServiceBean implements ImportadorServiceLocal {

	@PersistenceContext(unitName = "lims-pu")
	private EntityManager em;

	@SuppressWarnings("unchecked")
	public Set<Metodo> buscarMetodosPorEnsaioMatriz(Ensaio ensaio, Matriz matriz) {
		StringBuilder jpql = new StringBuilder("select a.metodo ");
		jpql.append("from Analise a ");
		jpql.append("where a.ensaio = :ensaio ");
		jpql.append("and a.matriz = :matriz ");

		Query query = em.createQuery(jpql.toString());
		query.setParameter("ensaio", ensaio);
		query.setParameter("matriz", matriz);
		return new HashSet<Metodo>(query.getResultList());
	}

	
	
	
	
	
	
	

Cara voce ja tentou

No seu scrollableDataTable

rows="100" // Qauntidade de linhas

No seu dataScroller

fastStep="100" // Quantidade de linhas para avançar

Cara,

Mas o meu problema esta aqui :

 Set<Analise> analisesConsultadas = analiseService  
                .buscarAnalisesPadraoPorMatriz(matriz);  
************************************* retorna 1043 linhas                 
        for (Analise analise : analisesConsultadas) {  
              
              
               AnaliseContratada analiseContratada = new AnaliseContratada(analise);              
                  
            AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(  
                    itemAtual, analiseContratada);            
            this.todasAnalises.add(analiseItem);  
              
        } 

aqui que demora os 8 segundos

            AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(  
                    itemAtual, analiseContratada);           

Esta pensando em carregar os 100 primeiros registros

 Set<Analise> analisesConsultadas = analiseService  
                .buscarAnalisesPadraoPorMatriz(matriz);  

e no jpsx , quando apertasse a pagina 2 , apareceria os registros do 101 ate 200, teria como fazer isso ???

Qual DB, se for mysql usa o limit.