Problema para carregar Primefaces datatable com conteúdo de tabela MySQL

Estou tentando carregar um datatable do primefaces com uma tabela do MySQL mas não está carregando, não recebo nenhum erro.
Desde já agradeço qualquer ajuda.
Entity:

package itc.systems.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author Cezar Apulchro
 */
@Entity
@Table(name = "tabela_especialidades_medica")
public class Especialidades implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column
    private String especialidade;   
    
    public Especialidades() {
    	
    }
    
    public Especialidades(String especialidade) {
    	
    	this.especialidade = especialidade;
    }
    

    public String getEspecialidade() {
        return especialidade;
    }

    public void setEspecialidade(String especialidade) {
        this.especialidade = especialidade;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + this.id;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Especialidades other = (Especialidades) obj;
        return this.id == other.id;
    }

    
    @Override
    public String toString() {
        return "itc.systems.entity.Especialidades[ id=" + id + " ]";
    }
    
}

Controller:

package itc.systems.controller;

import itc.systems.beans.LstEspecialidades;
import itc.systems.entity.Especialidades;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Cezar Apulchro
 */
@Named(value = "espcont")
@ViewScoped
public class EspecialidadesController implements Serializable {

    private static final long serialVersionUID = 1L;
    
    private List<Especialidades> especialidades;
    
    @Inject
    private LstEspecialidades service;
    
    @PostConstruct
    public void init() {
        
        this.especialidades = service.getEspecialidade();
        
        }
    
    public List<Especialidades> getEspecialidades() {
        return especialidades;
    }

    public void setEspecialidades(List<Especialidades> especialidades) {
        this.especialidades = especialidades;
    }

    public LstEspecialidades getService() {
        return service;
    }

    public void setService(LstEspecialidades service) {
        this.service = service;
    }
    
}

EntityManager:

package itc.systems.beans;

import itc.systems.controller.JpaUtil;
import itc.systems.entity.Especialidades;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Cezar Apulchro
 */
@Stateless
public class LstEspecialidades implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @PersistenceContext
    public List<Especialidades> getEspecialidade() {
        
        EntityManager manager = JpaUtil.getEntityManager();
        Query query = manager.createQuery("select e from Especialidades e", Especialidades.class);
        
        List<Especialidades> especialidades = query.getResultList();
        
        manager.close();
        JpaUtil.close();
        
        return especialidades;
    }
    
}

XHTML:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        
        <h:form id="form">
            
            <p:dataTable id="tbl" var="esp" value="#{espcont.especialidades}">
                <p:column>
                    <f:facet name="Nome">Especialidade</f:facet>
                    <h:outputText value="#{esp.especialidade}"></h:outputText>
                </p:column>
            </p:dataTable>
    	
        </h:form>
    </h:body>
</html>

Você tentou depurar para ver se seus métodos estão sendo chamados?

Olá edpickler, não tentei ainda, alterei a versão do primefaces de 10.0.0 para 8.0 e agora tenho a mensagem de “No records found.”.

Tens que fazer para ver se seus métodos estão sendo chamados e se está tudo indo conforme você espera.

O debug está executando os métodos que marquei como breackpoint mas não mostra nada.

Attaching to tomcat_shared_memory_id
User program running
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init successfully submitted.
LineBreakpoint EspecialidadesController.java : 35 successfully submitted.
LineBreakpoint LstEspecialidades.java : 29 successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init '()' successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.

1 - Quando você depura, existem dados nessa lista?
2 - Tem certeza que é assim que se usa o p:dataTable? (Pergunto pq faz tempo que eu não uso JSF, teria que ver a documentação).

1 - Não existe nenhum dado na lista.
2 - Sim, é assim que se usa.
Eu acho que minha classe controller não está invocando a classe que lê o banco “LstEspecialidades”.

Você tinha dito que os métodos estavam sendo executados.

Sim eu disse, não é isso que mostra essa execução?

Attaching to tomcat_shared_memory_id
User program running
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init successfully submitted.
LineBreakpoint EspecialidadesController.java : 35 successfully submitted.
LineBreakpoint LstEspecialidades.java : 29 successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init '()' successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.

Eu tinha entendido que o erro era no datable.

Voce precisa descobrir por que nao vem nenhum resultado nessa query. Tente outra query. E talvez sua classe JpaUtil tenha problemas.

É o que estou tentando fazer, agora vou testar o datatable nativo do jsf.