В качестве продолжения вопроса здесь: 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(), но при переходе по этому маршруту выдается сообщение о том, что транзакция никогда не запускалась.
Спасибо!