Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMaj

26 respostas
J
Bom dia, pessoal estou com um problema e não consigo resolver. Bom eu criei um projetinho jsf com hibernate e mysql, funcionou perfeitamente, então resolvi migrar esse projeto, usando o postgreSQL, Porem estou recebendo uma mensagem de erro. Aqui é meu hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  
<!--Configurações do hibernate: mapeamento dos objetos -->  
<hibernate-configuration>  
<!--session-factory atraves dele é que eu faço o mapeamento e as configurações do hibernate -->  
    <session-factory>  
       <!--Configuração com o banco mysql e dialecto -->  
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>     
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5433/login</property>    
        <property name="hibernate.connection.username">postgres</property>    
        <property name="hibernate.connection.password">160406</property>    
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>      
        <property name="current_session_context_class">thread</property>    
        <property name="hibernate.hbm2dll.auto">update</property>    
         
         
       <mapping class="com.br.joaoleno.usuario.Usuario"></mapping>  
  
   </session-factory>  
</hibernate-configuration>

Alguem poderia me ajudar a solucionar esse problema?
estou tendo o seguinte erro.

09/07/2012 16:29:27 org.apache.catalina.core.StandardContext filterStart  
    SEVERE: Exception starting filter HibernateFilter  
    java.lang.ExceptionInInitializerError  
        at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:30)  
        at com.br.joaoleno.util.HibernateUtil.<clinit>(HibernateUtil.java:17)  
        at com.br.joaoleno.web.filter.HibernateSessionRequestFilter.init(HibernateSessionRequestFilter.java:22)  
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)  
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)  
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)  
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)  
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584)  
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262)  
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257)  
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)  
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)  
        at java.lang.Thread.run(Thread.java:619)  
    Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I  
        at org.hibernate.engine.jdbc.JdbcSupportLoader.useContextualLobCreation(JdbcSupportLoader.java:78)  
        at org.hibernate.engine.jdbc.JdbcSupportLoader.loadJdbcSupport(JdbcSupportLoader.java:52)  
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:121)  
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)  
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)  
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)  
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)  
        at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)  
        ... 14 more

26 Respostas

J

informações do apache

09/07/2012 16:29:27 org.apache.catalina.core.StandardContext filterStart  
    SEVERE: Exception starting filter HibernateFilter  
    java.lang.ExceptionInInitializerError  
        at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:30)  
        at com.br.joaoleno.util.HibernateUtil.<clinit>(HibernateUtil.java:17)  
        at com.br.joaoleno.web.filter.HibernateSessionRequestFilter.init(HibernateSessionRequestFilter.java:22)  
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)  
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)  
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)  
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)  
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584)  
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262)  
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257)  
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)  
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)  
        at java.lang.Thread.run(Thread.java:619)  
    Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I  
        at org.hibernate.engine.jdbc.JdbcSupportLoader.useContextualLobCreation(JdbcSupportLoader.java:78)  
        at org.hibernate.engine.jdbc.JdbcSupportLoader.loadJdbcSupport(JdbcSupportLoader.java:52)  
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:121)  
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)  
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)  
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)  
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)  
        at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)  
        ... 14 more  



informações do apache

view plaincopy to clipboardprint?

    66111 [Finalizer] INFO org.hibernate.connection.DriverManagerConnectionProvider - cleaning up connection pool: jdbc:postgresql://localhost:5433/login  
    09/07/2012 16:29:24 org.apache.catalina.util.LifecycleBase stop  
    INFO: The stop() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Cad]] after stop() had already been called. The second call will be ignored.  
    09/07/2012 16:29:24 org.apache.catalina.startup.HostConfig checkResources  
    INFO: Undeploying context [/Cad]  
    09/07/2012 16:29:25 org.apache.catalina.startup.HostConfig deployDescriptor  
    INFO: Deploying configuration descriptor Cad.xml from C:\Users\Joao Leno\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost  
    09/07/2012 16:29:26 com.sun.faces.config.ConfigureListener contextInitialized  
    INFO: Inicializando Mojarra 2.1.1 (FCS 20110408) para o contexto '/Cad'  
    09/07/2012 16:29:26 com.sun.faces.spi.InjectionProviderFactory createInstance  
    INFO: JSF1048: Anotações PostConstruct/PreDestroy presentes.  Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.  
    2 [Thread-19] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.2-Final  
    12 [Thread-19] INFO org.hibernate.cfg.Environment - Hibernate 3.5.2-Final  
    13 [Thread-19] INFO org.hibernate.cfg.Environment - hibernate.properties not found  
    15 [Thread-19] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist  
    17 [Thread-19] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling  
    89 [Thread-19] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final  
    95 [Thread-19] INFO org.hibernate.cfg.Configuration - configuring from resource: hibernate.cfg.xml  
    95 [Thread-19] INFO org.hibernate.cfg.Configuration - Configuration resource: hibernate.cfg.xml  
    172 [Thread-19] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null  
    176 [Thread-19] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.  
    208 [Thread-19] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: com.br.joaoleno.usuario.Usuario  
    241 [Thread-19] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity com.br.joaoleno.usuario.Usuario on table usuario  
    278 [Thread-19] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring  
    317 [Thread-19] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)  
    317 [Thread-19] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20  
    317 [Thread-19] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false  
    317 [Thread-19] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost:5433/login  
    344 [Thread-19] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=postgres, password=****}  
    367 [Thread-19] INFO org.hibernate.cfg.SettingsFactory - RDBMS: PostgreSQL, version: 9.1.4  
    367 [Thread-19] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.2 JDBC2 with NO SSL (build 505)  
    391 [Thread-19] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect  
    Criação e inicial do objeto SessionFacotry. Erro.: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I  
    09/07/2012 16:29:27 org.apache.catalina.core.StandardContext startInternal  
    SEVERE: Error filterStart  
    09/07/2012 16:29:27 org.apache.catalina.core.StandardContext startInternal  
    SEVERE: Context [/Cad] startup failed due to previous errors
D

esse url de conexão postgre ta certa?

T

Você nao precisa fica abrindo vários topicos para resolver seu problema, tenha calma

J

DaniloAndrade , acredito que esteja certa, por que eu tinha um projeto desktop que utilizava o hibvernate e o banco era o postgresql, e a url era essa.

D

vc pode colocar sua classe HibernateUtil pra gente ver

J

DaniloAndrade, Olhe aí a classe

/*
  Class responsavel por fazer a ponte entre o arquivo de configuração e a conexão com o banco.
 */
package com.br.joaoleno.util;

/**
 *
 * @author Joao Leno
 */
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    
     private static final SessionFactory sessionFactory = buildSessionFactory();//Cria uma instancia de SessionFactory 

    private static SessionFactory buildSessionFactory()//Metodo responsavel por configurar o ambiente e retorna uma SessionFactory
    {
       try
       {
           AnnotationConfiguration cfg = new AnnotationConfiguration();
           cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml 
           return cfg.buildSessionFactory();//Configura o hibernate e retorna uma SessionFactory
       }
       catch(Throwable erro)
       {
          System.out.println("Criação e inicial do objeto SessionFacotry. Erro.: "+erro.getMessage());
          throw new ExceptionInInitializerError(erro); //Acionado para indicar que ocorreu uma exceção durante a avaliação de um inicializado estatico ou inicializador para uma váriavel estática.
       }
    }
     public static SessionFactory getSessionFactory()//Metodo responsavel por retornar uma SessionFactory
     {
           
          return sessionFactory;
     }

 
    
}
J

o erro tá dando nessa classe, ele tá caindo no catch, mas é muito estranho no mysql, funciona

J

Ooow e agora quem poderá me defender ?

D

troca

AnnotationConfiguration cfg = new AnnotationConfiguration();  
cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml

por

Configuration cfg = new Configuration();
cfg .configure();

ve se resolve

J

Da erro, por que estou usando notações

Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use

D

coloca sua classe Usuario

J

minha classe Usuario, já estava colocada. Porem ainda recebo aquela mensagem de erro.

D

não coloca o codigo da sua classe Usuario pra gente poder ver

J

Beleza taew o código da minha classe Usuario

package com.br.joaoleno.usuario;



/*
 * @author Joao Leno
 */
import java.io.*;
import javax.persistence.*;
import java.util.*;

@Entity//Entidade
@Table(name = "usuario")

public class Usuario {
    @Id
    @GeneratedValue
    
    private Integer idUsuario;
   // @Column (name="nomeUsuario")nome  e na minha classe fosse outro
    private String nome;
    @org.hibernate.annotations.NaturalId //Siginifica que o campo email, é único, ou seja, não pode haver email repetido.
    private String email;
    private String senha;
    private String idioma;
    private Boolean estatus;
    
  
    
 public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getIdioma() {
        return idioma;
    }

    public void setIdioma(String idioma) {
        this.idioma = idioma;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Boolean getEstatus() {
        return estatus;
    }

    public void setEstatus(Boolean status) {
        this.estatus = status;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if (this.idUsuario != other.idUsuario && (this.idUsuario == null || !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
            return false;
        }
        if ((this.senha == null) ? (other.senha != null) : !this.senha.equals(other.senha)) {
            return false;
        }
        if ((this.idioma == null) ? (other.idioma != null) : !this.idioma.equals(other.idioma)) {
            return false;
        }
        if (this.estatus != other.estatus && (this.estatus == null || !this.estatus.equals(other.estatus))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 13 * hash + (this.idUsuario != null ? this.idUsuario.hashCode() : 0);
        hash = 13 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 13 * hash + (this.email != null ? this.email.hashCode() : 0);
        hash = 13 * hash + (this.senha != null ? this.senha.hashCode() : 0);
        hash = 13 * hash + (this.idioma != null ? this.idioma.hashCode() : 0);
        hash = 13 * hash + (this.estatus != null ? this.estatus.hashCode() : 0);
        return hash;
    }
    
    
  
}
M

provavelmente não tem a ver com o código feito, até por que se fosse esse o caso não funcionaria com o my sql, inclusive o erro que está ocorrendo diz que a classe não está mapeada, por causa do descrito abaixo.

DaniloAndrade:

troca

AnnotationConfiguration cfg = new AnnotationConfiguration();  
cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml

por

Configuration cfg = new Configuration();
cfg .configure();

ve se resolve

fazendo deste jeito o hibernate não vai encontrar o arquivo xml de configuração dele, acredito que nesse caso ele irá procurar um hibernate.properties, que nesse caso não existe, por isso o erro dizendo :


Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use

joaolenosi, eu nunca usei o postgree, mas me parece pela descrição do erro ser alguma coisa no seu driver, procure pegar alguma versão do driver referente a mesma versão do banco de dados e tente com a mais recente, veja se com uma das duas funciona.

D

comenta essa linha @org.hibernate.annotations.NaturalId e faz um teste pra ver

J

maior_abandonado, o que você falou tem plena coerência. Acredito que também seja o drive.
Eu tenho o postgreSQL 8.2 e o postgreSQL 9.1 e todos já vem com o drive, já tentei utilizar as diferentes versões com seus respectivos jdbc e mesmo assim não deu certo,
fico recebendo essa mensagem de erro.

Criação e inicial do objeto SessionFacotry. Erro.: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I
J

Danilo fiz o teste assim, tambem da erro.
Acredito que o problema não seja com o código, até por que esse projeto funciona da mesma forma no mysql. A única coisa que alterei foi os drives e o hibernate.cfg.xml

10/07/2012 10:37:53 org.apache.catalina.core.StandardContext filterStart SEVERE: Exception starting filter HibernateFilter java.lang.ExceptionInInitializerError at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:30) at com.br.joaoleno.util.HibernateUtil.<clinit>(HibernateUtil.java:17) at com.br.joaoleno.web.filter.HibernateSessionRequestFilter.init(HibernateSessionRequestFilter.java:22) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584) at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262) at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619) Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.br.joaoleno.usuario.Usuario"/> at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1692) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1647) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1626) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1600) at org.hibernate.cfg.Configuration.configure(Configuration.java:1520) at org.hibernate.cfg.Configuration.configure(Configuration.java:1506) at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:24) ... 14 more

D

volta esse codigo novamente

AnnotationConfiguration cfg = new AnnotationConfiguration();    
cfg.configure("hibernate.cfg.xml");
D

acho que encontrei o problema

vc mapeou assim

no seu hibernate.cfg.xml
mas sua classe ta no pacote
com.br.joaoleno

coloca assim no seu xml

e faz um teste
D

desconside o que falei

estão iguais os dois

foi mau

J

DaniloAndrade, voltei para a mesma comentei aquela parte, e deu o mesmo erro.
Eu parei pra pensar, e me lembrei que meu campo id e auto_increment no mysql e no postgresql ele é do tipo serial , ja que no postgre não possui o auto_increment.
Mais eu acho que faz a mesma função de incrementar!!

Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I
J

Olha aqui estrar o link do meus dois porjetos :
http://www.4shared.com/rar/3avnx9D-/Projetos_web_JSF_com_Hibernate.html

o do mysql é o projeto usuario que tá funcionando perfeitamente e o do postgre é o projeto cad.
Alguem poderia baixar pra fazer o teste?
Eu ja coloquei a tabela do postgre e a do mysql no arquivo txt, só basta criar o banco login e a tabela que ta no arquivo.
PS. Eu coloquei todos os jdbc para vocês terem acesso, mas eu ja testei todos um a um, e nenhum funciounou.
Estou utilizando uma porta diferente, por que eu tenho dois postgres instalados na minha máquina 8.2 e o 9.1, aí cada um utiliza uma porta diferente, mais neeste caso estou utilizando o 9.1.

D

não consigo fazer download do 4shared onde estou agora.

queria poder ajudar, mas esse ta complicado

J

DaniloAndrade , ah beleza brother!
De qualquer forma obrigado pela ajuda :slight_smile:

M

[quote=joaolenosi]DaniloAndrade, voltei para a mesma comentei aquela parte, e deu o mesmo erro.
Eu parei pra pensar, e me lembrei que meu campo id e auto_increment no mysql e no postgresql ele é do tipo serial , ja que no postgre não possui o auto_increment.
Mais eu acho que faz a mesma função de incrementar!!

Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc2.Jdbc2DatabaseMetaData.getJDBCMajorVersion()I

pelo que dei uma olhada, o tipo serial cria uma sequence e usa ela em baixo dos panos.

sendo assim eu ia te falar para configurar como uma sequence.

o GenerationType default (auto), que está no seu código não vai funcionar com sequence por que não sabe o nome da sequence a usar… o auto no caso do postgree acho que vai tentar com sequence…

enfim…testa ae.

da uma olhada no post do urubatan aqui para pegar de exemplo: http://www.guj.com.br/java/39281-hibernate--annotation--postgree--sequence

Criado 10 de julho de 2012
Ultima resposta 10 de jul. de 2012
Respostas 26
Participantes 4