WELD-000072 Il bean gestito che dichiara un ambito di passivazione deve essere capace di passivazione


90

Ho scritto un semplice programma in moduli web java ma ricevo il seguente errore:

WELD-000072 Il bean gestito che dichiara un ambito di passivazione deve essere compatibile con la passivazione. Bean: Bean gestito [classe BeanPakage.DemoBeans] con qualificazioni [ @Any @Default @Named]

Qualcuno può dirmi da dove viene questo errore?

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

Risposte:


175

Puoi rendere capace la passivazione dei tuoi bean implementando l'interfaccia Serializable:

public class DemoBean implements Serializable { ... }

Notare che ci sono più requisiti per essere capaci di passivazione. Fare riferimento alla documentazione di saldatura per ulteriori informazioni.


21

L'errore potrebbe rimanere anche se il bean CDI è serializzabile:

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

Classe di esempio:

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

Assicurati che anche tutti gli @Interceptor siano seializzabili:

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

Grazie, serializzabile @Interceptorsera il problema per me!
Anthony O.


6

Crea DemoBeans serializzato

@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

Puoi anche attivare il comportamento di passivazione del tuo bean con l'annotazione:

@Stateful (passivationCapable = true)

In questo caso non è necessario implementare l'interfaccia Serializable.

Saluti. Jorge


1

Verifica le importazioni

(alcune volte netbeans ne usava altri da altre librerie)

Esempio. import javax.faces.view.ViewScoped; cambiarlo importando javax.faces.bean.ViewScoped;


In realtà JSF 2.3 depreca javax.faces.bean.ViewScopeda favore di javax.faces.view.ViewScoped. Ciò significa che devo esaminare tutti i bean con scope di visualizzazione e renderli serializzabili? Dal 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

Causato da: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean che dichiara un ambito di passivazione deve essere capace di passivazione. Bean: Managed Bean [class com.marcos.controller.PersonaBean] con qualificazioni [@Default @Named @Any]


L'ho risolto, apparentemente CDI, non ho riconosciuto il fagiolo, l'ho solo reso più esplicito

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

    try {
        service.registrar(null);

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

la soluzione per me:

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

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.