WELD-000072 El bean administrado que declara un ámbito de pasivación debe ser capaz de pasivación

89

Escribí un programa simple en formularios web de Java, pero recibo el siguiente error:

WELD-000072 El bean administrado que declara un ámbito de pasivación debe tener capacidad de pasivación. Bean: Bean administrado [clase BeanPakage.DemoBeans] con calificadores [ @Any @Default @Named]

¿Alguien puede decirme de dónde viene este error?

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;


@Named("DemoBeans")
@SessionScoped
public class DemoBeans {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
christina
fuente

Respuestas:

174

Puede hacer que la pasivación de su bean sea capaz de implementar la interfaz serializable:

public class DemoBean implements Serializable { ... }

Tenga en cuenta que existen más requisitos para ser capaz de pasivación. Consulte la documentación de Weld para obtener más información.

Matt Handy
fuente
20

El error puede permanecer aunque el bean CDI sea serializable:

WELD-000072 Managed bean declaring a passivating scope must be passivation capable

Clase de ejemplo:

@Named
@ConversationScoped
public class TransactionMatchController implements Serializable {
    ...
}

Asegúrese de que todos los @Interceptores también sean seializables:

@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
    ...
}
Tim
fuente
¡Gracias, serializable @Interceptorsfue el problema para mí!
Anthony O.4 de
5

Hacer DemoBeans serializado

@Named("DemoBeans")
@SessionScoped
public class DemoBeans  implements Serializable
{

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
Mohd Kose Avase
fuente
2

También puede activar el comportamiento de pasivación de su bean con la anotación:

@Stateful (passivationCapable = verdadero)

En este caso, no es necesario implementar una interfaz serializable.

Saludos. Jorge

Jorge Torres
fuente
1

Verificar importaciones

(algunas veces netbeans usó otras de otras bibliotecas)

Ejemplo. import javax.faces.view.ViewScoped; cámbielo importando javax.faces.bean.ViewScoped;

Fabián Pisani
fuente
En realidad, JSF 2.3 se desaprueba javax.faces.bean.ViewScopeda favor de javax.faces.view.ViewScoped. ¿Significa esto que tengo que revisar todos mis beans de alcance de vista y hacerlos serializables? Desde el javax.faces.bean.ViewScopedjavadoc: @deprecated This has been replaced by {@code javax.faces.view.ViewScoped}. The functionality of this corresponding annotation is identical to this one, but it is implemented as a CDI custom scope.
Vasil Svetoslavov
0

Causado por: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean que declara un alcance pasivante debe ser capaz de pasivación Bean: Bean administrado [clase com.marcos.controller.PersonaBean] con calificadores [@Default @Named @Any]


Lo resolví, aparentemente CDI, no reconocí el bean, solo lo hice más explícito

@Named
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}

la solución para mi:

@Named ("PersonaBean")
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Marcos Chacaliaza Altamirano
fuente