1

データベースに情報を保持するためのアプリケーション スコープ Bean があります。インスタンス化後、データを取得する必要があるため、@PostConstruct でメソッドにアノテーションを付けました。この Bean が参照されている jsf ページをリクエストするとすぐに、サーバー ログが急増します。どういうわけか再帰すると思いますが、取得する唯一のスタックトレースは、repBean.acceptVisitor(Visitor); の実行中にシステム例外が発生したことです。方法。その後、サーバー ログは数 GB 大きくなり、空きディスク領域を確保するために手動で削除する必要があります。@PostConstruct アノテーションを削除すると、例外はありません。update() メソッドを別の Bean から呼び出すと、repositoryContent 変数が適切に更新され、情報が含まれます。唯一の問題は、私のjsfページが奇妙な理由でコンテンツを表示しないことです。

@ManagedBean(eager=true)
@ApplicationScoped
public class IndexBean implements Serializable {

    private ArrayList<ViewFolder> repositoryContent;

    @EJB
    RepositoryService repBean;

    @PostConstruct
    public void update() {
       RepositoryVisitor Visitor = new RepositoryVisitor();
       repBean.acceptVisitor(Visitor);
       repositoryContent = Visitor.getList();
   }
}
4

1 に答える 1

2

これは通常の動作ではありません。

次のいずれかの行

   RepositoryVisitor Visitor = new RepositoryVisitor();
   repBean.acceptVisitor(Visitor);
   repositoryContent = Visitor.getList();

EL式#{indexBean}を間接的に評価しているため、まだ使用されていないため、Beanが再度作成されます。#{indexBean}それは、終了したときにのみ使用可能になります(したがって、コンクリートとして利用可能になります) @PostConstruct。これはすべて無限ループを引き起こします。

EL式で参照される代わりに直接使用できるように、リファクタリングを実行するか、アプリケーションスコープのBeanインスタンス自体をメソッド呼び出しに渡す必要がある場合があります。

于 2012-10-24T21:17:13.567 に答える