2012-04-13 3 views
0

У меня есть метод, который использует hibernate для подключения к БД и получения данных. Метод отлично работает при выполнении как автономное приложение java. Однако, когда я пытаюсь развернуть его на tomcat и вызывать в качестве веб-службы, я получаю ошибку, как показано ниже. Мой метод - это первое и единственное место, где устанавливается соединение с БД, то есть я не определяю какие-либо источники данных в tomcat.Спящий режим работает, но не при вызове через веб-службу

No Hibernate Session bound to thread, and configuration does not allow creation 
of non-transactional one here 
at 
org.springframework.orm.hibernate3.LocalSessionFactoryBean$TransactionAwareInvocationHandler.invoke(LocalSessionFactoryBean. 

Мой зимуют конфигурационный файл:

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="exposeTransactionAwareSessionFactory" value="true" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">none</prop> 
      <prop key="hibernate.statement_cache.size">10</prop> 
      <prop key="hibernate.c3p0.min_size">1</prop>     
      <prop key="hibernate.c3p0.max_size">10</prop> 
      <prop key="hibernate.connection.autocommit">false</prop> 
      <prop key="hibernate.default_schema">${mydbSchema}</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop>   
      <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop>     
     </props> 
    </property> 
</bean> 

Я использую следующие модули: Hibernate

Hibernate-аннотаций 3.4.0.GA, зимуют-жильный 3.3.1.GA , hibernate 3.2.6.ga, hibernate-commons-annotations 3.1.0.GA

+0

Что вы делаете для управления сеансом Hibernate для вызовов веб-службы? – MarkOfHall

+0

Не уверен, что я понимаю, но, может быть, мне нужно :). Я использую весну и получаю источник данных, а фабрика сеансов определяется как весенние бобы. Это то, о чем вы просите? –

ответ

0

Ваш метод должен быть вызван в транзакции. Или ваш метод должен использовать транзакцию.

0

Если класс, реализующий серверную веб-службу на стороне сервера, является компонентом Spring, просто используйте метод surround, обращающийся к базе данных с помощью @Transactional. Если это не так, добавьте эту аннотацию к другому весеннему компоненту, который работает как посредник между WS и DAO.

Если @Transactional не подходит для вас, вы всегда можете использовать: TransactionTemplate.

+0

Eric, Tomasz - Я получаю эту ошибку сразу, когда вызываю getCurrentSession() на объекте SessionFactory. Поэтому я даже не могу создать сеанс. И я не могу создать транзакцию без сеанса. –

+0

Tomasz - Я попробовал добавить @Transactional, но не имел никакого эффекта. –

Смежные вопросы