Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NullPointer ao injetar uma classe EJB

Olá,

Estou tendo um problema para logar na aplicação. Funcionava e agora não estou conseguindo encontrar o erro. Estou tomando um erro de NullPointer quando tento injetar na Classe UsuarioDAO o bean Banco anotado com @Singleton. Coloquei o Debug para facilitar e quando chego na linha this.banco.buscaPeloNome(login) do método buscaPeloLogin tomo NullPointer.

Segue meu código : OBS: o parâmetro login chega preenchido corretamente.

@Singleton
@Startup
public class Banco {

    public static List<Livro> livros = new ArrayList<Livro>();
    public static List<Autor> autores = new ArrayList<Autor>();
    public static List<Usuario> usuarios = new ArrayList<Usuario>();

    private static int chave = 1;

    static {
        System.out.println("###### ENTREI AQUI!!!");
        inicializaBanco();
    }

    public void save(Livro livro) {
        livro.setId(chave++);
        livros.add(livro);
    }

    public List<Livro> listaLivros() {
        return livros;
    }

    public void save(Autor autor) {
        autor.setId(chave++);
        autores.add(autor);
    }

    public List<Autor> listaAutores() {
        return autores;
    }

    public Autor buscaPelaId(Integer autorId) {

        for (Autor autor : autores) {
            if(autor.getId().equals(autorId)) {
                return autor;
            }
        }
        return null;
    }

    public Usuario buscaPeloNome(String nome) {
        for (Usuario usuario : usuarios) {
            if(usuario.getLogin().equals(nome)) {
                return usuario;
            }
        }

        return null;
    }

    private static void inicializaBanco() {
        Autor silveira = new Autor(chave++, "Paulo Silveira");
        Autor cordeiro = new Autor(chave++, "Gilliard Cordeiro");
        Autor coelho = new Autor(chave++, "Hébert Coelho ");

        autores.add(silveira);
        autores.add(cordeiro);
        autores.add(coelho);

        livros.add(new Livro("Java 8 prático",silveira));
        livros.add(new Livro("Lógica de Programação",silveira));

        livros.add(new Livro("CDI: Integre as dependências",cordeiro));
        livros.add(new Livro("JSF e JPA",cordeiro));

        livros.add(new Livro("JPA Efficaz",coelho));
        livros.add(new Livro("JSF Efficaz",coelho));

        usuarios.add(new Usuario("admin", "pass"));
    }

}
@Stateless
public class UsuarioDao {

    @Inject
    private Banco banco;

    public Usuario buscaPeloLogin(String login) {
        return this.banco.buscaPeloNome(login);
    }

}
1 resposta
solução!

Consegui resolver!!

Na classe LoginBean do JSF eu estava instanciando a classe UsuarioDAO, quando na verdade eu tinha que passar o gerenciamento para o EJB. Coloquei a anotação @Inject e resolvi o problema.