Транзакции в Spring/Hibernate/appfuse

В качестве продолжения вопроса здесь: Spring 2.0 Annotations and ant

Нам удалось заставить работать аннотации (@Transactional), а также попытаться вручную закодировать транзакцию.

В обоих случаях мы получаем некоторые проблемы. Это проект appfuse 1.9.4, в котором мы вручную обновили его до более нового проекта Hibernate. Это использует Spring 2.0.

Что я хотел бы сделать, так это обернуть всю веб-службу в базу данных «Транзакция», чтобы весь «вызов» был атомарным. Я понимаю, что «самый простой» способ сделать это с помощью @Transactional?

Для этого мы добавили в наш класс:

import org.springframework.transaction.annotation.Transactional;

И затем, рядом с методом (который является общедоступным), мы сделали:

@Transactional (readOnly = false, rollbackFor=Exception.class)
public List processEmployees(List employees){
  ....
}

В applicationContext-hibernate.xml я добавил:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

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

Теперь, когда я запускаю Tomcat, я получаю эту прекрасную ошибку:

[Scheduler] 2011-08-22 12:57:03,032 ERROR [main] ContextLoader.initWebApplicationContext(205) | Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Line 153 in XML document from ServletContext resource [/WEB-INF/applicationContext-hibernate.xml] is invalid; nested exception is org.xml.sax.SAXParseException: The prefix "tx" for element "tx:annotation-driven" is not bound.
Caused by: 
org.xml.sax.SAXParseException: The prefix "tx" for element "tx:annotation-driven" is not bound.

Мы используем Spring 2.0, но у нас нет «настроенного» АОП.

Любые идеи?

В качестве альтернативы я рад сделать это с помощью Transaction.commit(), но при переходе по этому маршруту выдается сообщение о том, что транзакция никогда не запускалась.

Спасибо!


person Anthony    schedule 22.08.2011    source источник


Ответы (1)


Вы не определили пространство имен "tx" в вашем applicationContext-hibernate.xml. Таким образом, синтаксический анализатор XML не может идентифицировать элемент.

person Ryan Stewart    schedule 22.08.2011
comment
Это также сделало это. Казалось бы, я слишком далек от разработки веб-приложений. Спасибо! - person Anthony; 22.08.2011