¿Fuga de memoria con el bean ViewScoped?

En nuestroJavaEE6 proyectoEJB3, JSF2) enJBoss 7.1.1Parece que tenemos una pérdida de memoria con SeamFaces.@ViewScoped.

Hicimos un pequeño prototipo para comprobar el hecho:

usamos JMeter para llamar a una página 200 veces;la página contiene y llama a un bean con vistas de vistas que inyecta un EJB con estado;Arreglamos el tiempo de espera de la sesión en 1 minuto.

Al final de la prueba, verificamos el contenido de la memoria con VisualVM, y aquí tenemos lo que tenemos:

con un@ViewScoped frijol, todavía tenemos 200 instancias del estadoMyController - y el@PreDestroy El método nunca se llama;con un@ConversationScoped frijol,@preDestroy Este método se llama final de sesión y luego tenemos una memoria limpia.

¿Utilizamos mal el alcance de la vista, o es realmente un error?

Aquí está la página 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>

Ahora el frijol incluidomyBean. Para el@ConversationScoped Variante, todas las partes comentadas están sin comentar.

@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;
    }
}

Y luego el frijol inyectadoMyController:

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

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta