JPA/Hibernate com Firebird 2.1

Boa tarde pessoal,

Estou tentando fazer uma aplicação web utilizando JPA com Hibernate e banco de dados Firebird 2.1.

Ao rodar a aplicação recebo o seguinte erro:

HTTP Status 500 -

________________________________

type Exception report

message

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

exception

javax.servlet.ServletException: Servlet.init() for servlet ConceitoServlet threw exception
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	java.lang.Thread.run(Thread.java:619)

root cause

javax.persistence.PersistenceException: [PersistenceUnit: JSVWEBPU] Unable to build EntityManagerFactory
	org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	br.com.pcsbrasil.entities.conceito.ConceitoServlet.init(ConceitoServlet.java:32)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	java.lang.Thread.run(Thread.java:619)

root cause

org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
	org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
	org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
	org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426)
	org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:128)
	org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
	org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	br.com.pcsbrasil.entities.conceito.ConceitoServlet.init(ConceitoServlet.java:32)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	java.lang.Thread.run(Thread.java:619)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.

Segundo pelo que entendi pelo erro org.hibernate.HibernateException: Hibernate Dialect must be explicitly set é preciso setar o dialeto do banco, algo que está impelmentado no web.xml conforme abaixo:

  <persistence-unit name="JSVWEBPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>br.com.pcsbrasil.entities.conceito.Conceito</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.url" value="jdbc:firebirdsql:localhost/3050:C:\\PCS\\DADOS\\LOJA.FDB?charSet=UTF-8/"/>
      <property name="hibernate.connection.password" value="masterkey"/>
      <property name="hibernate.connection.username" value="sysdba"/>
      <property name="hibernate.connection.dialect" value="org.hibernate.dialect.FirebirdDialect"/>
      <property name="hibernate.connection.driver_class" value="org.firebirdsql.jdbc.FBDriver"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>

A título de teste e utilizando dos recursos disponíveis no JPA, fiz um outro persistence-unit conectando no MySQL e roda perfeitamente.

Alguém já conseguiu essa conexão no Firebird 2.1?

Abraços

Eu uso assim

&lt;properties&gt;
      &lt;property name="hibernate.dialect" value="org.hibernate.dialect.FirebirdDialect" /&gt;
      &lt;property name="hibernate.connection.driver_class" value="org.firebirdsql.jdbc.FBDriver" /&gt;
      &lt;property name="hibernate.connection.url" value="jdbc:firebirdsql:localhost/3050:path_to_fdb" /&gt; 
...
&lt;/properties&gt;

De uma olhada no jar do drive que está usando.
Eu to usando o jaybird-2.1.6-full

Edufa,

Passei a noite dando uma olhada no livro Java Persistence with Hibernate e em um dos xml’s de exemplo ele usa:

<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>

Você estava certo e nem era o driver (eu estava usando o mesmo) mas o name é só hibernate.dialect sem a palavra “connection”. Por enquanto tudo funcionando perfeitamente. Valeu mesmo pela ajuda.

Abraços