2
respostas

Problema quando perde a conexão.

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.

2 respostas

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