Estou com um problema ao usar CDI e @PersistenceContext, que quando meu sistema perde conexão com banco e depois ela volta, ele não consegue reconectar, sempre aparece que a conexão está fechada.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Estou com um problema ao usar CDI e @PersistenceContext, que quando meu sistema perde conexão com banco e depois ela volta, ele não consegue reconectar, sempre aparece que a conexão está fechada.
Olá Eric, Bom Dia! Favor, poderia compartilhas suas classes e configurações para analisarmos? Obrigado.
<persistence-unit name="Teste" transaction-type="JTA">
<jta-data-source>java:/TesteDS</jta-data-source>
<class>br.com.Teste.testeProject.model.entity.Teste</class>
<properties>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>@Entity
@Table(name="SMER_TESTE_TB")
public class Teste implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_TESTE")
private Integer idTeste;
@Column(name = "DESCRICAO")
private String descricao;
public Integer getIdTeste() {
return idTeste;
}
public void setIdTeste(Integer idTeste) {
this.idTeste = idTeste;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}public class BasicoDAO<T> implements Serializable {
private static final long serialVersionUID = 1L;
private final Class<T> classe;
private EntityManager em;
public BasicoDAO(EntityManager manager, Class<T> classe) {
this.em = manager;
this.classe = classe;
}
private void adiciona(T t) {
em.persist(t);
}
public void remove(T t) {
em.remove(em.merge(t));
}
private void atualiza(T t) {
em.merge(t);
}
public List<T> listaTodos() {
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
query.select(query.from(classe));
List<T> lista = em.createQuery(query).getResultList();
return lista;
}
public T buscaPorId(Integer id) {
T instancia = em.find(classe, id);
return instancia;
}
}@Stateless
public class TesteDAO implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceContext
EntityManager em;
private BasicoDAO<Teste> dao;
@PostConstruct
void init() {
this.dao = new BasicoDAO<Teste>(this.em, Teste.class);
}
@Transactional
public void adiciona(Teste t) {
dao.adiciona(t);
}
@Transactional
public void atualiza(Teste t) {
dao.atualiza(t);
}
public void remove(Teste t) {
dao.remove(t);
}
public List<Teste> listaTodos() {
return dao.listaTodos();
}
public Teste buscaPorId(Integer id) {
return dao.buscaPorId(id);
}
}@Named
@ViewScoped
public class TesteBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private TesteDAO dao;
private List<Teste> lstTeste;
@PostConstruct
public void init() {
setTeste(dao.listaTodos());
}
public List<Teste> getLstTeste() {
return lstTeste;
}
public void setLstTeste(List<Teste> lstTeste) {
this.lstTeste = lstTeste;
}
}