[RichFaces] Optimisation : ExtendedDataTable et NamedQuery
Bonjour à tous,
j'utilise JSF1.2, Facelet 1.1.14, RichFaces 3.3.2 sur glassfish 2.1.
Pour lister toute une série d'enregistrements, j'utilise un extendedDataTable :
Code:
1 2
|
<rich:extendedDataTable rows="20" noDataLabel="#{activitiesBundle['tab.noDataLabel']}" width="auto" value="#{ActivitiesMB.activitiesDataModel}" selection="#{ActivitiesMB.selection}" selectionMode="multi" var="fant" id="table" rowKeyVar="row"> |
En suite, j'utilise un dataScroller pour paginer ce tableau :
Code:
1 2
|
<rich:datascroller align="center" for="table" page="#{ActivitiesMB.numPage}"/> |
Tout ceci marche très bien mais pour créer mon datamodel je fais appel à des EJB censés récupérer tous mes enregistrements :
Code:
1 2
|
@NamedQuery(name = "Activities.findAll", query = "SELECT a FROM Activities a", hints={@QueryHint(name="toplink.refresh", value="true")}) |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
public ExtendedTableDataModel<Activities> getActivitiesDataModel() {
this.listAct = this.activitiesDAO.findAll(); //appelle simple a la NamedQuery défini au dessus
//if (dataModel == null) {
dataModel = new ExtendedTableDataModel<Activities>(new DataProvider<Activities>(){
private static final long serialVersionUID = 5054087821033164847L;
public Activities getItemByKey(Object key) {
for(Activities a : listAct){
if (key.equals(getKey(a))){
return a;
}
}
return null;
}
public List<Activities> getItemsByRange(int firstRow, int endRow) {
return listAct.subList(firstRow, endRow);
}
public Object getKey(Activities item) {
return item.getId();
}
public int getRowCount() {
return listAct.size();
}
});
//}
return dataModel;
} |
Ma question est simple : Dans le cas ou j'ai, imaginons, 100 000 enregistrements, mon EJB va me créer une liste de 100 000 objets ? Dans ce cas, existe-t-il un moyen de ne récupérer que les enregistrements à afficher histoire de décharger le serveur et ceci en prenant en compte les tris et filtres du extendedDataModel ?