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


89

J'ai écrit un programme simple dans des formulaires Web Java mais je reçois l'erreur suivante:

WELD-000072 Le bean géré déclarant une portée passivante doit être capable de passivation. Bean: Bean géré [classe BeanPakage.DemoBeans] avec des qualificatifs [ @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;
    }
}

Réponses:


174

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

public class DemoBean implements Serializable { ... }

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


20

L'erreur peut persister 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 saisissables:

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

Merci, la sérialisable @Interceptorsétait le problème pour moi!
Anthony O.


5

Rendre DemoBeans sérialisé

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

    private String name;

    public String getName() {
        return name;
    }

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

}

2

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

@Stateful (passivationCapable = vrai)

Dans ce cas, vous n'avez pas besoin d'implémenter une interface sérialisable.

Cordialement. Jorge


1

Vérifier les importations

(parfois, netbeans en a utilisé d'autres provenant d'autres bibliothèques)

Exemple. import javax.faces.view.ViewScoped; changez-le par import javax.faces.bean.ViewScoped;


En fait, JSF 2.3 devient obsolète javax.faces.bean.ViewScopeden faveur de javax.faces.view.ViewScoped. Cela signifie-t-il que je dois parcourir tous mes beans à portée de vue et les rendre sérialisables? De la 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

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


Je l'ai résolu, apparemment CDI, je n'ai pas reconnu le haricot, je l'ai juste rendu 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();
    }
  }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.