質問

私は私がRichFacesのおよびTopLinkを使用していますという単純なCRUDプロジェクトを持っています。私はFINEようにTopLinkのログレベルを回したので、私は、ページの一部が負荷にかなり遅いです気づきました。私のページをロードすると、すべての私のコースの豊か内のオブジェクトのリストということ:データテーブルは、TopLinkが表示されますが、すべてのクエリを9回を選択し、同じを実行します。金持ちを使用する場合:datascrollerを50の項目または列のソートの次のセットに移動し、それが再び同じすべてのクエリを選択18回以上を実行します。

ここでのDataTableがあります:

<rich:dataTable value="#{CourseController.courses}"
                        id="table"
                        var="dataTableItem"
                        rendered="#{CourseController.courses.rowCount>0}"
                        rows="50"
                        onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                        onRowMouseOver="this.style.backgroundColor='#dcdcdc'">
            <f:facet name="header">
                <h:outputText value="Courses"/>
            </f:facet> 
            <rich:column sortBy="#{dataTableItem.id}">  
                <f:facet name="header">  
                    <h:outputText  value="ID"/>  
                </f:facet>  
                <h:commandLink action="#{CourseController.viewCourse}">  
                    <h:outputText value="#{dataTableItem.id}" /> 
                    <f:param name="id" value="#{dataTableItem.id}" />  
                </h:commandLink>
            </rich:column> 
            <rich:column sortBy="#{dataTableItem.name}">  
                <f:facet name="header">  
                    <h:outputText  value="Name"/>  
                </f:facet>  
                <h:outputText value="#{dataTableItem.name}" />  
            </rich:column>        
            <rich:column sortBy="#{dataTableItem.owner}">  
                <f:facet name="header">  
                    <h:outputText  value="Owner"/>  
                </f:facet>  
                <h:outputText value="#{dataTableItem.owner}" />  
            </rich:column>
            <rich:column rendered="#{LoginController.inSystemAdminGroup || LoginController.inOperationsManagerGroup || LoginController.inLogisticsCoordinatorGroup}">  
                <f:facet name="header">  
                    <h:outputText  value=""/>  
                </f:facet>  
                <h:commandLink action="#{CourseController.editCourse}">  
                    <h:outputText value="Edit/Delete"/>  
                    <f:param name="id" value="#{dataTableItem.id}" />  
                </h:commandLink>  
            </rich:column>
            <f:facet name="footer">
                <rich:datascroller id="datascroller" />
            </f:facet>
        </rich:dataTable>

テーブルで呼ばれています私のコントローラ内の関数ます:

public DataModel getCourses() {
        System.out.println("Im in getCourses.  Fun Fun Fun.");
        model = new ListDataModel(courseFacade.findAll());
        return model;
    }

)(getCoursesによって呼び出される関数のgetというのが私の豆内の関数ます:

public List<Course> findAll() {
        System.out.println("Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!");
        Query q = em.createQuery("select object(o) from Course as o WHERE o.deleted = FALSE ORDER BY o.name");
        List<Course> courses = q.getResultList();
        return courses;
    }

そして、私のコンソール出力テーブルにページをロードします:

Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
Im in getCourses.  Fun Fun Fun.
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC
        bind => [false]
役に立ちましたか?

解決

JSF仕様は、JSFの仕様では、限り、このメソッドを呼び出すことができ、いけないつまり、クエリを実行し、getCoursesの各呼び出しのデータモデルを作成している(ゲッターで高価なコードを入れて、そのゲッターは一度だけライフサイクルリクエストあたりと呼ばれている保証するものではありません。フレームワークは、リクエストごとに望んでいるとして)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top