2011-08-22 134 views
0

作为后续行动在这里的问题是:Spring 2.0 Annotations and ant交易在春/休眠/ AppFuse的

我们能够获得工作注释(@事务),也试过手动编码交易。

在这两种情况下,我们都遇到了一些问题。这是一个appfuse 1.9.4项目,我们手动升级到一个更新的Hibernate项目。这是使用Spring 2.0。

我想要做的是将整个Web服务包装在数据库“Transaction”中,以便整个“调用”是原子的。我知道“最简单”的方法是使用@Transactional?

要做到这一点,我们加入到我们的类:

import org.springframework.transaction.annotation.Transactional; 

,然后旁边的方法(这是公开的),我们做了:

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

在对的applicationContext-休眠。 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,但没有任何AOP“配置”。

任何想法?

另外,我很高兴能用Transaction.commit()来做到这一点,但是去那个路由会抛出一个关于永远不会被启动的事务的消息。

谢谢!

回答

2

您没有在您的applicationContext-hibernate.xml中定义"tx" namespace。因此,XML解析器无法识别该元素。

+0

这样做也是如此。我已经远离Web应用程序开发了,它肯定会出现。谢谢! – Anthony