Bu notu bir Dao sınıfı için başarıyla kullandım. Ve geri alma, testler için çalışır.
Ama şimdi sadece testleri değil, gerçek kodu da geri almam gerekiyor. Testlerde kullanılmak üzere özel açıklamalar vardır. Ancak test dışı kod için hangi ek açıklamalar var? Bu benim için büyük bir soru. Zaten bunun için bir gün geçirdim. Resmi belgeler ihtiyaçlarımı karşılamadı.
class MyClass { // this does not make rollback! And record appears in DB.
EmployeeDaoInterface employeeDao;
public MyClass() {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "HibernateDaoBeans.xml" });
employeeDao = (IEmployeeDao) context.getBean("employeeDao");
}
@Transactional(rollbackFor={Exception.class})
public void doInsert( Employee newEmp ) throws Exception {
employeeDao.insertEmployee(newEmp);
throw new RuntimeException();
}
}
çalışan Dao
@Transactional
public class EmployeeDao implements IEmployeeDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void insertEmployee(Employee emp) {
sessionFactory.getCurrentSession().save(emp);
}
}
Ve işte ek açıklamaların iyi çalıştığı bir test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/HibernateDaoBeans.xml" })
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@Transactional
public class EmployeeDaoTest {
@Autowired
EmployeeDaoInterface empDao;
@Test
public void insert_record() {
...
assertTrue(empDao.insertEmployee(newEmp));
}
Hazırda bekletme incelemeleri
...
<bean id="employeeDao" class="Hibernate.EmployeeDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
...
** EVET, işlemi geri aldım. Servis için BEAN'i ekledim ... ve ardından @Transactional ek açıklama çalışmaya başlar :-) **
<bean id="service" class="main.MyClass">
<property name="employeeDao" ref="employeeDao" />
</bean>
Hepinize teşekkürler, Rusya sizi unutmayacak!