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.
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;
}
}