WELD-000072 Bean gerenciado declarando um escopo de passivação deve ser capaz de passivação


90

Escrevi um programa simples em formulários da web java, mas estou recebendo o seguinte erro:

WELD-000072 O bean gerenciado que declara um escopo de passivação deve ser capaz de passivação. Bean: Managed Bean [classe BeanPakage.DemoBeans] com qualificadores [ @Any @Default @Named]

Alguém pode me dizer de onde vem esse erro?

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

Respostas:


175

Você pode tornar sua passivação de feijão capaz, implementando a interface serializável:

public class DemoBean implements Serializable { ... }

Observe que há mais requisitos para ser capaz de passivação. Consulte a documentação do Weld para obter mais informações.


21

O erro pode permanecer mesmo que o bean CDI seja serializável:

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

Classe de exemplo:

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

Certifique-se de que todos os @Interceptors também sejam inicializáveis:

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

Obrigado, serializável @Interceptorsera o problema para mim!
Anthony O.


6

Faça 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;
    }

}

2

Você também pode ativar o comportamento de passivação do seu bean com a anotação:

@Stateful (passivationCapable = true)

Nesse caso, você não precisa implementar a interface serializável.

Saudações. Jorge


1

Verificar importações

(algumas vezes o netbeans usou outros de outras bibliotecas)

Exemplo. import javax.faces.view.ViewScoped; altere-o import javax.faces.bean.ViewScoped;


Na verdade, o JSF 2.3 é preterido javax.faces.bean.ViewScopedem favor de javax.faces.view.ViewScoped. Isso significa que preciso examinar todos os beans com escopo de visão e torná-los serializáveis? Do 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: O bean que declara um escopo de passivação deve ser capaz de passivação. Bean: Managed Bean [class com.marcos.controller.PersonaBean] com qualificadores [@Default @Named @Any]


Resolvi, aparentemente CDI, não reconheci o bean, apenas deixei mais 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();
    }
  }
}

a solução para mim:

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

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.