আমি এই টিকাটি কোনও দাও শ্রেণীর জন্য সফলভাবে ব্যবহার করেছি। এবং রোলব্যাক পরীক্ষার জন্য কাজ করে।
তবে এখন আমার কেবল পরীক্ষাগুলি নয়, রিয়েল কোড রোলব্যাক করা দরকার। পরীক্ষাগুলিতে ব্যবহারের জন্য বিশেষ টিকা রয়েছে। কিন্তু কোন টীকা নন-টেস্ট কোডের জন্য? এটা আমার কাছে বড় প্রশ্ন। আমি এর জন্য ইতিমধ্যে একটি দিন কাটিয়েছি। অফিসিয়াল ডকুমেন্টেশন আমার প্রয়োজনীয়তা পূরণ করে নি।
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();
}
}
কর্মচারী দাও
@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);
}
}
এবং এখানে একটি পরীক্ষা দেওয়া হয়েছে যার জন্য টীকাগুলি ভালভাবে কাজ করে:
@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));
}
হাইবারনেটডাওবিন্স.এক্সএমএল
...
<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>
...
** হ্যাঁ, আমি লেনদেনটি ফিরিয়ে দিয়েছি। আমি কেবল পরিষেবাটির জন্য বিয়ান যোগ করেছি ... এবং তারপরে এনটোটেশন @ ট্রানজেকশনাল কাজ শুরু করুন :-) **
<bean id="service" class="main.MyClass">
<property name="employeeDao" ref="employeeDao" />
</bean>
সবাইকে ধন্যবাদ, রাশিয়া আপনাকে ভুলবে না!