Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 6 da Aula 2 - Ciclo de vida dos Session Beans

Estou usando o Java 1.8.0_51 com o WildFly 9.0.0 Final.

Ao logar no sistema o DAO já foi criado:

11:19:22,519 INFO [stdout] (default task-23) [INFO] AutorDao foi criado.

Ao clicar na aba "Autores", foi criado novamente:

11:19:32,009 INFO [stdout] (default task-25) [INFO] AutorDao foi criado.

Ao clicar no botão Salvar do Cadastro de Autores, o método anotado com @PostConstruct foi chamado 8 vezes:

11:20:09,926 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,927 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,933 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,934 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,935 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,936 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,938 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

11:20:09,938 INFO [stdout] (default task-26) [INFO] Salvando o Autor Silvio Silva

Depois dos 20 segundos:

11:20:29,947 INFO [stdout] (default task-26) [INFO] Salvou o Autor Silvio Silva

11:20:29,949 INFO [stdout] (default task-26) [INFO] AutorDao foi criado.

Eu importei o projeto novamente para o Eclipse (estou usando o Eclipse Luna).

Seguem as classes que alterei:

package br.com.caelum.livraria.dao;

import java.util.List;

import javax.annotation.PostConstruct; import javax.ejb.Stateless;

import br.com.caelum.livraria.modelo.Autor;

@Stateless public class AutorDao {

private Banco banco = new Banco();

@PostConstruct void aposCriacao() { System.out.println("[INFO] AutorDao foi criado."); }

public void salva(Autor autor) { System.out.println("[INFO] Salvando o Autor " + autor.getNome());

try { Thread.sleep(20000); // 20 segundos } catch (InterruptedException e) { e.printStackTrace(); }

banco.save(autor); System.out.println("[INFO] Salvou o Autor " + autor.getNome()); }

public List todosAutores() { return banco.listaAutores(); }

public Autor buscaPelaId(Integer autorId) { Autor autor = this.banco.buscaPelaId(autorId); return autor; }

}

package br.com.caelum.livraria.bean;

import java.util.List;

import javax.enterprise.inject.Model; import javax.inject.Inject;

import br.com.caelum.livraria.dao.AutorDao; import br.com.caelum.livraria.dao.LivroDao; import br.com.caelum.livraria.modelo.Autor; import br.com.caelum.livraria.modelo.Livro;

@Model public class LivroBean {

private Livro livro = new Livro(); private Integer autorId;

private LivroDao livroDao = new LivroDao();

@Inject private AutorDao autorDao;

public void cadastra() {

Autor autor = this.autorDao.buscaPelaId(this.autorId); this.livro.setAutor(autor);

this.livroDao.salva(livro);

this.livro = new Livro(); }

public List getAutores() { return autorDao.todosAutores(); }

public Livro getLivro() { return livro; }

public void setAutorId(Integer autorId) { this.autorId = autorId; }

public Integer getAutorId() { return autorId; }

public List getLivros() { return this.livroDao.todosLivros(); } }

2 respostas

Também alterei a classe AutorBean para injetar o dao:

package br.com.caelum.livraria.bean;

import java.util.List;

import javax.enterprise.inject.Model; import javax.inject.Inject;

import br.com.caelum.livraria.dao.AutorDao; import br.com.caelum.livraria.modelo.Autor;

@Model public class AutorBean {

private Autor autor = new Autor();

@Inject private AutorDao dao;

public Autor getAutor() { return autor; }

public void cadastra() { this.dao.salva(autor); this.autor = new Autor(); }

public List getAutores() { return this.dao.todosAutores(); } }

solução!

Encontrei uma discussão a respeito de como habilitar o pool no WildFly:

https://developer.jboss.org/message/881747

Basicamente precisamos alterar o arquivo "\wildfly-9.0.1.Final\standalone\configuration\standalone.xml" na seção acrescentando: