aplicação travando no createEntityManagerFactory

9 respostas
R4izen

Pessoal, estou com um problema muito estranho. Estou utilizando Hibernate+JPA, JSF e TomCat 7.0.
Minha aplicação estava rodando normal, até que a dois dias tentei rodar novamente, mas sem sucesso.
Chega a este ponto no Console e para

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Percebi que é só chegar nesta linha de código, que trava a execução.

EntityManagerFactory factory = Persistence.createEntityManagerFactory("HC");

Não esta passando pelo restante do código.
Se rodar com o TomCat ele da erro, dizendo que é preciso um Timeout maior, pois ele não consegue iniciar por ficar travado nesta parte.

9 Respostas

R

O log diz que a aplicação não conseguiu carregar uma das classes do SLF4J. Você incluiu nas bibliotecas da sua aplicação todos os JAR’s necessários do SLF4J?
http://slf4j.org/download.html

R4izen

Eu adicionei o slf4j-api-1.6.1.jar, que parece ser o arquivo necessário segundo alguns materiais.

O engraçado é que estava funcionando com os mesmos JAR’s, não fiz nenhuma alteração nas bibliotecas.

R

roger_rf:
O log diz que a aplicação não conseguiu carregar uma das classes do SLF4J. Você incluiu nas bibliotecas da sua aplicação todos os JAR’s necessários do SLF4J?
http://slf4j.org/download.html

Essas msgs do SLF4j são apenas warnings,se algum jar estivesse faltando a aplicação nem subiria.

R4izen,posta o codigo completo da classe.

R4izen

Segue o codigo completo da classe

import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;



public class FiltroJPA implements Filter {

	private EntityManagerFactory factory;
	

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.factory = Persistence.createEntityManagerFactory("HC");
	 }
	
	 @Override
	 public void destroy() {
	 this.factory.close();
	 }
	
	 @Override
	 public void doFilter(ServletRequest request, ServletResponse response,
	 FilterChain chain) throws IOException, ServletException {
	
		EntityManager entityManager = this.factory.createEntityManager();
		request.setAttribute("entityManager", entityManager);
		
		entityManager.getTransaction().begin();
			
		chain.doFilter(request, response);

		try {
			System.out.println("commit");
			entityManager.getTransaction().commit();
		} catch (Exception e) {
			entityManager.getTransaction().rollback();
		} finally {
			entityManager.close();
			System.out.println("close");
		}
	 }


}

Fiz um teste colocando em uma main o codigo e aconteceu o mesmo

EntityManagerFactory factory = Persistence.createEntityManagerFactory("HC");
		EntityManager entityManager = factory.createEntityManager();
		entityManager.getTransaction().begin();
                System.out.println("Teste");
Hebert_Coelho

Vc manteve todas as bibliotecas?

Não houve nenhuma modificação?

R4izen

Nenhuma alteração nas bibliotecas.

A unica coisa que alterei acho que foi esta classe, que acrescentei o @Entity e o @Table(name = “TB_PROFISSIONAL”) .

mesmo assim não é muito diferente das outras.

@Entity
@Table(name = "TB_PROFISSIONAL")
public class Profissional implements Serializable{
	
	@Id
	@GeneratedValue
	private Long id;
	@Column(nullable=false)
	private String codigoProfissional;
	@Column(nullable=false)
	private String cpf;
	@Column(nullable=false)
	private String rg;
	@Column(nullable=false)
	private String telefone;
	@Column(nullable=false)
	private String email;
	@ManyToOne
	private ProfissionalOcupacao ocupacao;
	
	@ManyToMany
	private Collection<Paciente> pacientes;

	public enum DiasSemanaTrabalha{
		DOMINGO,
		SEGUNDA,
		TERÇA,
		QUARTA,
		QUINTA,
		SEXTA,
		SABADO;
	}
	
	@Enumerated(EnumType.STRING)
	private DiasSemanaTrabalha diasSemanaTrabalha;
	
	private Integer horasTrabalho;



//Getters e Setters
R

Kd o persistence.xml?

R4izen
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="HC" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		
		<class>com.web.entidades.Areas</class>
		<class>com.web.entidades.CID</class>
		<class>com.web.entidades.Complexidades</class>
		<class>com.web.entidades.EstadoPaciente</class>
		<class>com.web.entidades.Estatistica</class>
		<class>com.web.entidades.Evolucoes</class>
		<class>com.web.entidades.Exames</class>
		<class>com.web.entidades.HistoricoAtendimentos</class>
		<class>com.web.entidades.HistoricoAtualizacoes</class>
		<class>com.web.entidades.HistoricoComunicados</class>
		<class>com.web.entidades.Paciente</class>
		<class>com.web.entidades.Permissoes</class>
		<class>com.web.entidades.Procedimentos</class>
		<class>com.web.entidades.Profissional</class>
		<class>com.web.entidades.ProfissionalOcupacao</class>
		<class>com.web.entidades.Unidades</class>
		<class>com.web.entidades.Usuarios</class>
		<class>com.web.entidades.Controle</class>
		<class>com.web.entidades.Imagem</class>
		
        <properties>
        
        	<property name="hibernate.hbm2ddl.auto" value="update" />
        	<property name="hibernate.format_sql" value="true" />
        
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
            <property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;databaseName=BHC" />
            <property name="hibernate.connection.username" value="aa" />
            <property name="hibernate.connection.password" value="aa" />
            <property name="show_sql" value ="true"/>
            
            
        </properties>
	
	    

			
	</persistence-unit>
</persistence>
R4izen

Pessoal, entrei nas propriedades do meu projeto pelo eclipse, fui nas opções do JPA e resolvi testar a conexão com o banco e logo após clicar no botão “Test Connection” o eclipse parou de responder.
Resolvi trocar o banco, então testei com o postgreSQL e conectou numa boa criando todas as tabelas.

Pelo jeito o problema é o SQL Server 2008 R2.

Criado 2 de novembro de 2011
Ultima resposta 3 de nov. de 2011
Respostas 9
Participantes 4