1

updateRecordsボタンをクリックすると、非常に時間がかかる DB 操作が実行されます。DB操作のステータスを表す動的な進行状況バーをユーザーに表示するつもりです。

myfaces.orchestra のアクセス スコープと primefaces のプログレス バーを使用しています。

オーケストラはロックを適用し、 myBean.updateRecords()が完全に実行されるまで myBean.progressMonitor のフェッチを許可しません。

エラーは次のとおりです。

スレッドによってロックされているロック org.apache.myfaces.lib._ReentrantLock@2c93ed へのアクセスを 30000 ミリ秒以上待機しました ..

別のスレッドからの FacesContex へのアクセスを許可しない ReentrantLock があります。そのため、プログレスバー モデルにアクセスできず、部分的なリクエストは完全なリクエストが完了するまでロックされます。ajaxは「false」に設定されていますが。

オーケストラとの同時リクエストを許可するにはどうすればよいですか?

また、スレッドを作成して、そのスレッドで重い操作を実行しようとしました。しかし、私はそこで FacesContext を取得しません。

同じ問題の回避策は何ですか?

サンプル コード スニペット:

 <p:commandButton id="updateRecords" onclick="startProgressBar();" 
     async="true" ajax="false" actionListener="#{myBean.updateRecords}" />

  <h:panelGrid id="progressBarPanel">
         <p:progressBar id="progress" interval="10"  
             rendered="#{myBean.progressBarRendered}" ajax="true" 
             value="#{myBean.progressMonitor}" 
             widgetVar="pbAjax" labelTemplate="{value}%}"/>
   </h:panelGrid>
4

0 に答える 0