2015-06-30 6 views
0

Внезапно мой webapp, который использует Spring и Hibernate, прекратил подключение к базе данных Apache Derby.CannotCreateTransactionException: не удалось открыть сеанс Hibernate для транзакции

Интересно, может ли кто-нибудь предложить почему?

Мое приложение использует Spring 4.0.2 и Hibernate 4.3.5. Версии derby.jar и derbyClient.jar, принадлежащие проекту, взяты из Java JDK 1.8.0, и я использую Apache Derby 10.10.1.1. Apache Tomcat 8.0.3.0 - мой сервер.

dispatcherservlet «s детали Hibernate моего проекта заключаются в следующем:

<!-- Hibernate DataSource. --> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">   
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
    <property name="url" value="jdbc:derby://localhost:1527/Library" /> 
    <property name="username" value="username" /> 
    <property name="password" value="password" />    
</bean> 

<!-- Hibernate SessionFactory. -->  
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
    <property name="dataSource" ref="dataSource"></property>     
    <property name="hibernateProperties"> 
     <props>    
      <prop key="hibernate.dialect">org.hibernate.dialect.DerbyTenSixDialect</prop> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop> 

      <!-- What to do with the database schema. --> 
      <prop key="hbm2ddl.auto">update</prop>  
      <!-- validate: validate the schema, makes no changes to the database. 
       update:  update the schema. 
       create:  creates the schema, destroying previous data. 
       create-drop: drop the schema at the end of the session. -->     
     </props>    
    </property>                                                                   
    <property name="packagesToScan"> 
     <list> 
      <value>registration_spring_hibernate.model</value>     
     </list> 
    </property>   
</bean> 

<!-- Hibernate TransactionManagment. --> 
<tx:annotation-driven />     
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

Полный журнал ошибок выглядит следующим образом:

 

INFO|30 06 2015|13 45 25|http-apr-8080-exec-73|registration_spring_hibernate.controller.PersonController| - registration_spring_hibernate.controller.PersonController.getList() method called. 
WARN|30 06 2015|13 45 25|http-apr-8080-exec-73|org.hibernate.engine.jdbc.spi.SqlExceptionHelper| - SQL Error: 0, SQLState: 08001 
ERROR|30 06 2015|13 45 25|http-apr-8080-exec-73|org.hibernate.engine.jdbc.spi.SqlExceptionHelper| - No suitable driver found for jdbc:derby://localhost:1527/Library 
INFO|30 06 2015|13 45 25|http-apr-8080-exec-73|registration_spring_hibernate.controller.PersonController| - registration_spring_hibernate.controller.ExceptionController.exception() method called. 
Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Could not open connection 
org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:515) 
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:420) 
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:257) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 
registration_spring_hibernate.service.PersonService$$EnhancerBySpringCGLIB$$8cd04f.list() 
registration_spring_hibernate.controller.PersonController.getList(PersonController.java:73) 
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:483) 
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74) 
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652) 
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277) 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2451) 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2440) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
java.lang.Thread.run(Thread.java:744) 
 
+0

Можете ли вы опубликовать полный журнал ошибок. Обновление по схеме правильное, но не должно быть ключ = "hibernate.hbm2ddl.auto" ??? Кроме того, пожалуйста, измените имя фабрики сеансов вашего спящего режима на что-то другое, чем sessionFactory, и это сбивает с толку. –

+0

Добавлен вопрос. –

+0

У вас есть ваша ошибка: exec-73 | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | - Поиск подходящего драйвера для jdbc: derby: // localhost: 1527/Library. Ваш драйвер не является частью вашего проекта или нет в вашем пути к классам. Если драйвер доступен как jar на maven, добавьте соответствующую зависимость к maven. –

ответ

1

После долгого обсуждения в чате, вот ответ, где Я просто размещаю новый xml:

<!-- Hibernate DataSource. --> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<!-- property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" /--> 
<property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
<property name="url" value="jdbc:derby://localhost:1527/Library" /> 
<property name="username" value="username" /> 
<property name="password" value="password" /> 
</bean> 

<!-- Hibernate Interceptors. --> 
<bean id="serverInterceptor" class="library.interceptor.ServerInterceptor" /> 

<!-- Hibernate SessionFactory. --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource"></property> 
<property name="hibernateProperties"> 
<props> 
<!-- prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop--> 
<prop key="hibernate.dialect">org.hibernate.dialect.DerbyTenSixDialect</prop> 
<prop key="hibernate.show_sql">false</prop> 

Также не забудьте использовать функцию int которые не являются общими.