2012-04-29 8 views
5

Estoy tratando de ejecutar un hello world para: Spring/Hibernate con HSQLDB y el grupo de conexiones C3PO. el mismo código funciona con mySQL (solo con diferente dialecto y controlador)'hibernate.dialect' debe establecerse cuando no hay conexión disponible

He ejecutado la base de datos y puedo conectarme a ella con la GUI de swing. Pero cuando intento ejecutar mi aplicación, aparece un error de inicio. Aquí están los detalles:

1: el error -

INFORMACIÓN: La inicialización de la primavera WebApplicationContext raíz [ERROR] [piscina-2-hilo-1 05:20:08] (JDBCExceptionReporter.java: logExceptions: 101) ¡Las conexiones no pudieron ser adquiridas de la base de datos subyacente! [ERROR] [pool-2-thread-1 05:20:08] (ContextLoader.java:initWebApplicationContext:220) Falló la inicialización del contexto org.springframework.beans.factory.BeanCreationException: Error al crear bean con el nombre 'sessionFactory' definido en el recurso ServletContext [/WEB-INF/hibernate-context.xml]: Error en la invocación del método init; la excepción anidada es org.hibernate.HibernateException: 'hibernate.dialect' se debe establecer cuando no hay conexión disponible en org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1420) en org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:519) ... ...

2: hibernate-context.xml -

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.gleeb.sample.model" /> 
    <property name="hibernateProperties"> 
     <props> 
      <!-- <prop key="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> --> 
      <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="show_sql">false</prop> 
      <prop key="hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close" p:driverClass="org.hsqldb.jdbc.JDBCDriver" 
    p:jdbcUrl="jdbc:hsqldb:hsql://localhost/testdb" p:user="sa" 
    p:password="" p:acquireIncrement="5" p:idleConnectionTestPeriod="60" 
    p:maxPoolSize="100" p:maxStatements="50" p:minPoolSize="10" /> 

<!-- Declare a transaction manager --> 
<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
    p:sessionFactory-ref="sessionFactory" /> 

Respuesta

0

I tienen propiedades fábrica sesión con hibernate. prefijo.

<property name="hibernateProperties"> 
    <value> 
     hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     hibernate.hbm2ddl.auto=update 
     hibernate.show_sql=false 
     hibernate.format_sql=false 
    </value> 
</property> 
+0

Sorprendentemente hizo algo. no soluciono el problema, pero ahora me sale: [ERROR] [pool-2-thread-1 06:03:04] (JDBCExceptionReporter.java:logExceptions:101) ¡Las conexiones no se pudieron adquirir desde la base de datos subyacente !, pero yo soy seguro que no tiene nada que ver con el problema real que se esconde debajo de allí. – Gleeb

+0

@gleeb Escriba un programa simple usando JDBC para conectarse a su HSQL DB y vea si eso funciona. Eso podría eliminar al menos un problema – Sudhakar

+0

Ejecute el servidor con silent = false y verifique el intento de conexión.Pruebe p: user = "SA" – fredt

1

Por lo que yo puedo decir, no es posible pasar en el dialecto como un valor establecido en el campo hibernateProperties de una sesión de resorte de la fábrica, al menos si también está usando la propiedad configLocation en él.

Mi 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"> 
<hibernate-configuration> 
<session-factory> 

    <property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property> 
    <property name="hibernate.search.autoregister_listeners">false</property> 
    [etc...] 

Mi relevante config contexto fábrica de sesiones:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
    <property name="dataSource" ref="dataSource"/> 
     <property name="hibernateProperties"> 
     <props> 
      <!--<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>--> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics">false</prop> 
      <prop key="hibernate.default_schema">xxx</prop> 
     </props> 
    </property> 
</bean> 

Si Descomentar la hélice dialecto en el archivo de contexto, y como comentario de la hibernate.cfg.xml archivo me encuentro con la misma excepción que el OP:

Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set 

Sin embargo, si corro con th La configuración anterior (comentada en el archivo de contexto, descomentada en hibernate.cfg.xml), funciona, y veo el SQL hibernado formateado, que muestra que las otras propiedades de hibernación están siendo configuradas por el archivo de contexto.

Cuestiones relacionadas