Weld-000072 Erro usando injeção de dependência no jsf2 (netbeans)

4 respostas
C

Olá a todos,

Tenho um projeto feito em netbeans 6.9 com jsf 2.0 e jpa 2.0. Estou tentando utilizar injeção de dependência com o Weld mas estou parado com um erro que não consegui resolver. Abaixo o erro que aparece e logo depois as minhas classes e o persistence.xml.

Erro gerado…

<blockquote>SEVERE: Exception while loading the app

org.glassfish.deployment.common.DeploymentException: WELD-000072 Managed bean declaring a passivating scope must be passivation capable.  Bean:  org.jboss.weld.bean-/D:/Daniel/Estudos/projEstudos/Netbeans/comprovantesSefazPI/build/web/-ManagedBean-class br.gov.pi.sefaz.comprovantes.convenio115.mb.Convenio115MB

at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:169)

at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125)

at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224)

at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)

at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)

at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)

at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)

at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)

at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)

at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)

at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)

at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)

at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)

at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)

at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)

at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)

at com.sun.grizzly.ContextTask.run(ContextTask.java:69)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)

at java.lang.Thread.run(Thread.java:619)

Caused by: org.jboss.weld.DefinitionException: WELD-000072 Managed bean declaring a passivating scope must be passivation capable.  Bean:  org.jboss.weld.bean-/D:/Daniel/Estudos/projEstudos/Netbeans/comprovantesSefazPI/build/web/-ManagedBean-class br.gov.pi.sefaz.comprovantes.convenio115.mb.Convenio115MB

at org.jboss.weld.bean.ManagedBean.checkType(ManagedBean.java:351)

at org.jboss.weld.bootstrap.BeanDeployment.doAfterBeanDiscovery(BeanDeployment.java:168)

at org.jboss.weld.bootstrap.BeanDeployment.afterBeanDiscovery(BeanDeployment.java:156)

at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:372)

at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:167)

 30 more

</blockquote>

Minha Classe de Entidade

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.gov.pi.sefaz.comprovantes.convenio115.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Nash
 */
@Entity 
@Table(name = "TAB_CONVENIO115_C", catalog = "", schema = "APL_CONV115")
public class TabConvenio115C implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID", nullable = false, length = 15)
    private String id;

    @Column(name = "IE")
    private Long ie;

    @Column(name = "CNPJ", length = 18)
    private String cnpj;

    @Column(name = "RAZAO_SOCIAL", length = 50)
    private String razaoSocial;
    .
    .
    .
    //Restante do código com seus getters e setters.

Minha Classe DAO

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.gov.pi.sefaz.comprovantes.convenio115.dao;

import br.gov.pi.sefaz.comprovantes.convenio115.infra.JPAUtil;
import br.gov.pi.sefaz.comprovantes.convenio115.modelo.TabConvenio115C;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Nash
 */
public class TabConvenio115CDao {


    @SuppressWarnings("unchecked")
    public List&lt;TabConvenio115C&gt; lista(TabConvenio115C convenio115){
        EntityManager em = new JPAUtil().getEntityManager();
        Query query = em.createQuery("From TabConvenio115C c Where c.ie =:pIe and c.chaveReciboEntrega =:pChave");
        query.setParameter("pIe", convenio115.getIe());
        query.setParameter("pChave", convenio115.getChaveReciboEntrega());
        return query.getResultList();
    }

}

Minha Classe Managed Bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.pi.sefaz.comprovantes.convenio115.mb;

import br.gov.pi.sefaz.comprovantes.convenio115.dao.TabConvenio115CDao;
import br.gov.pi.sefaz.comprovantes.convenio115.modelo.TabConvenio115C;
import java.util.List;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Nash
 */
@Named
@ConversationScoped
public class Convenio115MB {

    @Inject
    private TabConvenio115CDao dao;

    @Inject
    private TabConvenio115C conv115;

    private List&lt;TabConvenio115C&gt; convenios;

    public String getListagem() {
        if (this.convenios == null) {
            this.convenios = dao.lista(conv115);
        }
        return "index?faces-redirect=true";
    }

    public TabConvenio115C getConv115() {
        return conv115;
    }

    public List&lt;TabConvenio115C&gt; getConvenios() {
        return convenios;
    }

    public void setConv115(TabConvenio115C conv115) {
        this.conv115 = conv115;
    }

    public void setConvenios(List&lt;TabConvenio115C&gt; convenios) {
        this.convenios = convenios;
    }

    
}

Minha página jsf

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core"&gt;
    &lt;f:view contentType="text/html"/&gt;
    &lt;h:head&gt;
        &lt;title&gt;Facelet Title&lt;/title&gt;
    &lt;/h:head&gt;
    &lt;h:body&gt;
        &lt;h:form id="formConsulta"&gt;
            &lt;p:panel header="Informações"&gt;
                &lt;h:panelGrid columns="2"&gt;
                    &lt;h:outputText value="Inscrição Estadual"/&gt;
                    &lt;h:inputText value="#{convenio115MB.conv115.ie}"/&gt;

                    &lt;h:outputText value="Chave"/&gt;
                    &lt;h:inputText value="#{convenio115MB.conv115.chaveReciboEntrega}"/&gt;

                    &lt;p:commandButton value="Consultar" action="#{convenio115MB.listagem}"&gt;
                        &lt;f:ajax render="@form :formResultado" execute="@form"/&gt;
                    &lt;/p:commandButton&gt;

                &lt;/h:panelGrid&gt;
            &lt;/p:panel&gt;
        &lt;/h:form&gt;
        &lt;h:form id="formResultado"&gt;
            &lt;p:panel&gt;
                &lt;p:dataTable value="#{convenio115MB.convenios}" var="item" selectionMode="single"&gt;
                    &lt;p:column&gt;
                        &lt;f:facet name="header"&gt;
                            &lt;h:outputText value="Inscricão Estadual"/&gt;
                        &lt;/f:facet&gt;
                        &lt;h:outputText value="#{item.ie}"/&gt;
                    &lt;/p:column&gt;
                &lt;/p:dataTable&gt;
            &lt;/p:panel&gt;
        &lt;/h:form&gt;
    &lt;/h:body&gt;
&lt;/html&gt;

E meu persistence.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;
    &lt;persistence-unit name="comprovantesSefazPIPU" transaction-type="RESOURCE_LOCAL"&gt;
        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
        &lt;non-jta-data-source&gt;JNDI/Conv115&lt;/non-jta-data-source&gt;
        &lt;class&gt;br.gov.pi.sefaz.comprovantes.convenio115.modelo.TabConvenio115C&lt;/class&gt;
        &lt;exclude-unlisted-classes&gt;true&lt;/exclude-unlisted-classes&gt;
        &lt;properties&gt;
            &lt;property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/&gt;
            &lt;property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/&gt;
            &lt;property name="javax.persistence.jdbc.user" value="apl_conv115"/&gt;
            &lt;property name="javax.persistence.jdbc.password" value="conv115"/&gt;

            &lt;property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/&gt;
            &lt;property name="hibernate.show_sql" value="true"/&gt;
            &lt;property name="hibernate.format_sql" value="true"/&gt;
        &lt;/properties&gt;
    &lt;/persistence-unit&gt;
&lt;/persistence&gt;

Do que eu já pesquisei, vi algo com a classe managed bean precisar implementar o serializable mas quando faço isso na anotação @named surge um aviso dizendo que a mesma não suporta esta implementação.

Não sei se entendi correto. Aguardo alguma resposta…

4 Respostas

B

eu me surpreenderia se suportasse, tente

public class Convenio115MB implements Serializable
A

Como o weld passiva as coisas no conversation scoped, o seu MB vai ter que implementar Serializable (inclusive as coisas que o MB usam tbm (DAO e modelos)).

J

Collins, pela mensagem de erro eu acredito que seja alguma coisa com esse escopo de conversação. EU achei isso na documentação do weld:

6.6.1. Passivation capable beans

A bean is called passivation capable if the container is able to temporarily transfer the state of any idle instance to secondary storage.

* As defined by the EJB specification, all stateful session beans are passivation capable. Stateless and singleton session beans are not passivation capable.
* A managed bean is passivation capable if and only if the bean class is serializable and all interceptors and decorators of the bean are serializable.
* A producer method is passivation capable if and only if it never returns a value which is not passivation capable at runtime. A producer method with a primitive return type or a return type that implements or extends Serializable is passivation capable. A producer method with a return type that is declared final and does not implement Serializable is not passivation capable.
* A producer field is passivation capable if and only if it never refers to a value which is not passivation capable at runtime. A producer field with a primitive type or a type that implements or extends Serializable is passivation capable. A producer field with a type that is declared final and does not implement Serializable is not passivation capable.

A custom implementation of Bean is passivation capable if it implements the interface PassivationCapable. An implementation of Contextual that is not a bean is passivation capable if it implements both PassivationCapable and Serializable.

Fonte: http://docs.jboss.org/cdi/spec/1.0/html/contexts.html

C

Corretíssimo Adriano. Perdi um certo tempo por uma digitação incorreta que eu não percebi antes, mas o problema estava na falta de serialização das classes.

Obrigado a todos pela ajuda.

Criado 17 de agosto de 2010
Ultima resposta 17 de ago. de 2010
Respostas 4
Participantes 4