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

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.


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 {
    ...
}

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

}

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


1

Verificar importaciones

(algunas veces netbeans usó otras de otras bibliotecas)

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


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();
    }
  }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.