試圖在彈簧沒有sucess實施@Transactional,Hibernate項目與模式,在其上使用@Transactional AspectJ的@Transactional不工作
方法。
@Transactional
public void invokeService() throws Exception {
Certificate certificate = (Certificate) domainObjects.get(Constants.CERTIFICATE);
CertActObjRel accOvrRel = (CertActObjRel) domainObjects.get(Constants.CERT_ACC_OBJ_REL);
if (certificate != null) {
dao.insert(certificate);
if (accOvrRel != null) {
dao.insert(accOvrRel);
}
CertObjRel certObjRel = (CertObjRel) domainObjects.get(Constants.CERT_OBJ_REL);
if (certObjRel != null) {
List<CertObjRel> certObjRelArray = certObjRel.getCertObjRelArray();
if (certObjRelArray != null && certObjRelArray.size() > 0) {
dao.insertList(certObjRelArray);
}
}
}
insertReqCertRelation();
insertDistributions();
fieldIssueUOW.fieldIssueCertificate(certificate);
}
方法invokeService()是一個abtsract方法和子類實現(與事務註釋。用於abtsract超級CALSS方法invokeService否@Transactional註解()),並從口水規則引擎呼籲基礎對象refrence 。由於類bean不是spring bean,因此我們使用編譯時編織。對於事務管理
Spring配置文件中的聲明
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj"/>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
彈簧aspect.jar也粘貼在WEB-INF/lib文件夾。用
System.out.println("Transaction active:::: " + TransactionSynchronizationManager.isActualTransactionActive());
總是返回false。如果我們試圖在這個方法中檢索當前會話,則返回null。所以它確定交易沒有運行。我們是否需要用方法invokeservice()聲明類爲@Aspect。 @ Aspect是編譯時間編織的先決條件。即使在反編譯.class文件並查看代碼@Transactional仍然存在之後?