Hibernate + JSF Erro ao persistir objeto

Olá Pessoal, estou tentando salvar um objeto no banco Mysql com o Hibernate.
Porém quando eu preencho os dados na tela de cadastro eu recebo um erro dizendo que a transação já está ativa
Obs. Percebi que quando eu requisito a url no navegador, o console mostra um sql gerado pelo hibernate. (Apenas requisistando a página)

Outra observação é que a listagem dos objetos já cadastrados funciona normalmente.
(Inclusive a página de cadastro estava funcionando pois foi assim que eu inseri os dados) deu esse erro derepente… já desliguei o pc troquei a versão do tomcat e nada…

Erro no Navegador

  HTTP Status 500 - java.lang.IllegalStateException: Transaction already active

   type Exception report

   message java.lang.IllegalStateException: Transaction already active

   description The server encountered an internal error that prevented it from fulfilling this request.

   exception

    javax.servlet.ServletException: java.lang.IllegalStateException: Transaction already active
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    root cause

    javax.faces.el.EvaluationException: java.lang.IllegalStateException: Transaction already active
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.        java:101)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    root cause

    java.lang.IllegalStateException: Transaction already active
org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:42)
com.gregory.modelo.dao.FuncionarioDao.save(FuncionarioDao.java:21)
com.gregory.modelo.beans.FuncionarioBean.grava(FuncionarioBean.java:25)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.apache.el.parser.AstValue.invoke(AstValue.java:279)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.        java:87)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.72 logs.

Erro no Console

     out 30, 2016 8:34:12 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
    WARNING: #{funcionarioBean.grava}: java.lang.IllegalStateException: Transaction already active
    javax.faces.FacesException: #{funcionarioBean.grava}: java.lang.IllegalStateException: Transaction already active
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
   Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException: Transaction already active
at       javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:       101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 27 more
    Caused by: java.lang.IllegalStateException: Transaction already active
at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:42)
at com.gregory.modelo.dao.FuncionarioDao.save(FuncionarioDao.java:21)
at com.gregory.modelo.beans.FuncionarioBean.grava(FuncionarioBean.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at        javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:        87)
 ... 28 more

  out 30, 2016 8:34:12 PM org.apache.catalina.core.StandardWrapperValve invoke
  SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/TimeControl] threw exception        [java.lang.IllegalStateException: Transaction already active] with root cause
    java.lang.IllegalStateException: Transaction already active
at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:42)
at com.gregory.modelo.dao.FuncionarioDao.save(FuncionarioDao.java:21)
at com.gregory.modelo.beans.FuncionarioBean.grava(FuncionarioBean.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at        javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:        87)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

-----------------------Classe Funcionario Bean-----------------------------------
package com.gregory.modelo.beans;

      import java.util.List;
      import javax.faces.bean.ManagedBean;
      import com.gregory.modelo.Funcionario;
      import com.gregory.modelo.dao.FuncionarioDao;

    @ManagedBean 
    public class FuncionarioBean {
//Variáveis...
private FuncionarioDao dao  = new FuncionarioDao();
private List<Funcionario> funcionarios = this.listaTodos();

public Funcionario getFuncionario() {
	return funcionario;
}


private Funcionario funcionario = new Funcionario();

public void grava(){
	
	dao.save(funcionario);
}

public List<Funcionario> listaTodos(){
	
	return dao.returnAll();
}

public List<Funcionario> getFuncionarios() {
	return funcionarios;
}

}

A Classe FuncionarioDao…

package com.gregory.modelo.dao;

import java.time.Duration;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.gregory.modelo.Funcionario;
import com.gregory.util.DataUtil;
import com.gregory.util.JPAUtil;

 public class FuncionarioDao {

EntityManager em  = JPAUtil.getEntityManager();

public void save(Funcionario f){
	
	em.getTransaction().begin();
	em.persist(f);
	em.getTransaction().commit();
	em.close();
	
	
	
}

public void delete(Funcionario f){
	String jpql = "";
	
	em.getTransaction().begin();
	Query q = em.createQuery(jpql);
	q.executeUpdate();
	em.getTransaction().commit();
	em.close();
	
	
}

public void update(Funcionario f){
	
	
}
// Formato do CPF tem que ser no Padrao 000-000-000.00
@SuppressWarnings("unchecked")
public List<Funcionario> FindsByCpf(String cpf){
	
	String jpql ="select f from Funcionario f where f.CPF='"+cpf+"'";
	List<Funcionario> lista ;
	em.getTransaction().begin();
	Query q  = em.createQuery(jpql);
	
    lista   = 	q.getResultList();
    
	
	return lista;
	
}

@SuppressWarnings("unchecked")
public List<Funcionario> returnAll(){
	String jpql ="select f from Funcionario f";
	List<Funcionario> lista ;
	em.getTransaction().begin();
	Query q  = em.createQuery(jpql);
	
    lista   = 	q.getResultList();
    
	
	return lista;

	
}

Página de cadastro

   <?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:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html" >
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Cadastra Funcionário</title>
   </head>


<h:body>
   <center>
     <h:form>
          <h:panelGrid columns="2">
         Nome: <h:inputText id="name" value="#{funcionarioBean.funcionario.nome}" /> 
         CPF:  <h:inputText id="cpf"  value="#{funcionarioBean.funcionario.CPF}"/> 
         Função: <h:inputText id="function" value="#{funcionarioBean.funcionario.funcao}"/> 
          
          <h:commandButton value="Gravar" action="#{funcionarioBean.grava}" /> <br />
          </h:panelGrid>
     </h:form>
   </center>



</h:body>
`

Página de Listagem – (Essa funciona sem problemas)

 <?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:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>Listagem dos Funcionários</title>
  </head>
   
  <h:body>

                 <h1 style="text-align: center;">Funcionários Cadastrados</h1>
<center>
	<h:dataTable value="#{funcionarioBean.funcionarios}" var="f"
		border="1">

		<h:column>
			<f:facet name="header">cpf</f:facet>
           #{f.CPF}
      </h:column>


		<h:column>
			<f:facet name="header">Nome</f:facet>
           #{f.nome}
      </h:column>

		<h:column>
			<f:facet name="header">Cargo</f:facet>
           #{f.funcao}
      </h:column>

	</h:dataTable>
</center>

</h:body>

 </html>

Agradeço a atenção de Todos!!

Olá! Interessante debugar o fluxo da aplicação pra ver se não está sobrando alguma transação pendente, mas caso queira algo rápido, o que não resolve o problema da transação sobrando, mas reaproveita a mesma, é:

if(!em.getTransaction().isActive())
        em.getTransaction().begin();
em.persist(f);
em.getTransaction().commit();
em.close();