6

JBoss 7.1.1上の JavaEE6プロジェクト ( EJB3JSF2 )では、SeamFacesでメモリ リークが発生しているようです。@ViewScoped

事実を確認するために小さなプロトタイプを作成しました。

  • JMeter を使用してページを 200 回呼び出します。
  • ページには、ステートフル EJB を注入する viewscoped Bean が含まれており、それを呼び出します。
  • セッション タイムアウトを 1 分に固定します。

テストの最後に、VisualVM を使用してメモリの内容を確認すると、次の結果が得られました。

  • Bean を使用し@ViewScopedても、ステートフルの 200 のインスタンスを取得できますMyController@PreDestroyメソッドは呼び出されません。
  • @ConversationScopedBean を使用すると、@preDestroyメソッドがセッション終了と呼ばれ、クリーンなメモリが得られます。

ビュースコープの使い方が悪いのか、それとも本当にバグなのか?


XHTML ページは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"   
   xmlns:s="http://jboss.org/seam/faces">
   <f:metadata>
        <f:viewParam name="u" value="#{myBean.uselessParam}" />
        <s:viewAction action="#{myBean.callService}" />
   </f:metadata>
   <h:body >
        <f:view>
        </f:view>
   </h:body>    
</html>

今含まれている Bean myBean。バリアントの場合@ConversationScoped、コメント化されたすべての部分はコメント化されていません。

@ViewScoped
// @ConversationScoped
@Named
public class MyBean implements Serializable 
{
    @Inject
    MyController myController;
    //@Inject
    //Conversation conversation;

    private String uselessParam;

    public void callService()
    {
        //if(conversation.isTransient())
        //{
        //            conversation.begin();
        //}
        myController.call();
    }

    public String getUselessParam() 
    {
        return uselessParam;
    }

    public void setUselessParam(String uselessParam) 
    {
        this.uselessParam = uselessParam;
    }
}

そして、注入されたステートフル Bean MyController:

@Stateful
@LocalBean
public class MyController
{
   public void call()
   {
         System.out.println("call ");
   }

   @PreDestroy
   public void destroy()
   {
         System.out.println("Destroy");
   }
}
4

3 に答える 3

5

多くの開発者が Myface CODI の @ViewAccessScoped に満足しています。ぜひお試しいただき、フィードバックをお寄せください。

于 2012-08-30T03:25:12.437 に答える
4

これはバグである可能性があります。正直なところ、Seam 3 の実装はそれほど優れたものではなく、CODI の実装 (および DeltaSpike にあるもの) ははるかに優れています。

于 2012-08-29T22:02:26.070 に答える