web-dev-qa-db-fra.com

WELD-000072 Le bean géré déclarant une étendue passivante doit être capable de passivation

J'ai écrit un programme simple dans des formulaires Web Java mais je reçois le message d'erreur suivant:

WELD-000072 Le bean géré déclarant une étendue passivante doit être capable de passivation. Bean: Bean Managed [classe BeanPakage.DemoBeans] avec qualificateurs [@Any@Default@Named]

Quelqu'un peut-il me dire d'où vient cette erreur?

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;
    }
}
70
christina

Vous pouvez rendre votre passivation bean capable en implémentant l'interface Serializable:

public class DemoBean implements Serializable { ... }

Notez qu'il existe davantage d'exigences pour être capable de passivation. Reportez-vous à la documentation Weld pour plus d'informations.

140
Matt Handy

L'erreur peut subsister même si le bean CDI est sérialisable:

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

Exemple de classe:

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

Assurez-vous que tous les @Interceptors sont également lisibles:

@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
    ...
}
19
Tim

Il doit être sérialisable.

Voir cette réponse.

https://community.jboss.org/thread/179828

Mieux, Anders

6
anders.norgaard

Make DemoBeans serialized

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

    private String name;

    public String getName() {
        return name;
    }

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

}
5
Mohd Kose Avase

Vous pouvez également activer le comportement de passivation de votre bean avec l'annotation:

@Stateful (passivationCapable = true)

Dans ce cas, vous n'avez pas besoin d'implémenter l'interface Serializable.

Cordialement ..__ Jorge

2
Jorge Torres

Vérifier les importations

(parfois, les netbeans utilisaient d'autres bibliothèques)

Exemple. importer javax.faces.view.ViewScoped; changez-le en important javax.faces.bean.ViewScoped;

1
Fabian Pisani

Causé par: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Le bean déclarant une étendue passivante doit être capable de passivation. Bean: Bean géré [classe com.marcos.controller.PersonaBean] avec qualificatifs [@Default @Named @Any]


Je l'ai résolu, apparemment CDI, je n'ai pas reconnu le haricot, je viens de le rendre plus explicite

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

    try {
        service.registrar(null);

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

la solution pour moi:

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

    try {
        service.registrar(null);

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