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