ここでの質問のフォローアップとして: Spring 2.0 Annotations and ant
アノテーション (@Transactional) を機能させることができ、トランザクションを手動でコーディングすることも試みました。
どちらの場合も、いくつかの問題が発生しています。これは、新しい Hibernate プロジェクトに手動でアップグレードした appfuse 1.9.4 プロジェクトです。これはSpring 2.0を使用しています。
私がやりたいのは、Web サービス全体をデータベース「トランザクション」にラップして、「呼び出し」全体がアトミックになるようにすることです。これを行う「最も簡単な」方法は @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 を使用していますが、AOP を「構成」していません。
何か案は?
別の方法として、Transaction.commit() を使用してこれを行うこともできますが、そのルートに進むと、トランザクションが開始されないというメッセージがスローされます。
ありがとう!