EJB session bean não é salvo

3 respostas
R

Meu ejb não é salvo no containter quando atualizo a página. - estou usando Glassfish 3.01
Pelo que entendo, no controller (model), EJB inserido seria sempre o mesmo sessionbean.

import java.io.Serializable;
import javax.ejb.*;
import javax.enterprise.context.SessionScoped;
@Stateful
@SessionScoped
public class SessionBean implements SessionBeanLocal, Serializable {
    private int contador=0;
    public int getContador(){
        contador=contador+1;
        return(contador);
    }
    public void setContador(int contador){
        this.contador=contador;
    }
}

interface

@Local
public interface SessionBeanLocal {
    public int getContador();
    public void setContador(int contador);
}

controller

@Model
public class ControladorSessao {
    @EJB
    private SessionBeanLocal sessionBean;  
    public String getContador(){          
        return "Sessão=" + sessionBean.getContador() + " ["+sessionBean.toString()+"]";
    }
}

O que eu gostaria era fazer um simples contador para estudar ejb, mas a classe SessionBean acima é recriada a cada requisicão, zerando o contador.

3 Respostas

dev.rafael

Primeiro, controller é uma coisa, model é outra. Ñ misture as coisas. E ñ use anotações model em controllers. Quanto aos EJBs, tente o seguinte:

public class JEEResourceProducer {

  @Produces @EJB
  SessionBean sessionBean;

}

E no seu controller:

@Named
@RequestScoped
public class ControladorSessao {
  @Inject SessionBean sessionBean;
}

No EJB 3.1, interfaces p/ EJBs locais ñ são mais necessárias. Use-as apenas se elas forem interessantes p/ a sua arquitetura, por exemplo p/ esconder multiplas implementações.

aikeda

Como é sua aplicação de teste?

R

Desculpe a demora, pensei que o meu e-mail estava vinculado ao guj
Bom, Consegui resolver desta forma:

@ManagedBean(name="ControladorSessao")
@SessionScoped
public  class ControladorSessao {  
     @EJB  
     private SessionBeanLocal sessionBean;    
     public String getContador(){            
         return "Sessão=" + sessionBean.getContador() + " ["+sessionBean.toString()+"]";  
     }  
}

Coloquei @Model porque segui o tutorial da JavaMagazine edicao 80 pagina 32 que diz que @Model é a combinação de @Named e @RequestScoped
Bom quanto a classe de teste é outro problema, estou tentando usar openEJB, segui o tutorial em http://openejb.apache.org/3.0/simple-stateful-example.html e só recebí NammingException porque o framework (acredito) não encontrou a classe, e neste caso tentei variações de ControladorSessao, ControladorSessaoLocal, ControladorSessaoRemote, ControladorSessao, coloquei o caminho completo da classe e nada.
Estou usando Glassfish3.0 e NetBeans 6.8

Criado 22 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 3
Participantes 3