我正在试验Hibernate 4.1.2。
写下面的课程来帮助我使用新的ServiceRegistry方法获得会话
=============================================== ==
package com.debaself.samples;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class SessionFetch {
private static SessionFactory sessionFactory = null;
public SessionFactory getSessionFactory(){
if(sessionFactory == null){
Configuration cfg = new AnnotationConfiguration().addResource("hibernate.cfg.xml").configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
}
return sessionFactory ;
}
public Session getSession(){
return getSessionFactory().openSession();
}
}
===============================================
现在我写了一个测试
===============================================
public class SessionFetchTest {
@Test
public void getSessionFactoryTest(){
SessionFetch fetch = new SessionFetch();
SessionFactory factory = fetch.getSessionFactory();
assertNotNull(factory);
assert(!factory.isClosed());
factory.close();
}
@Test
public void getSessionTest(){
SessionFetch fetch = new SessionFetch();
Session session = fetch.getSession();
assert(session.isOpen());
assert(session.isConnected());
}
}
=============================================== ===
奇怪的是
当我单独运行测试方法时,两个测试都成功。但是当我一次运行它们时,getSessionTest()总是失败并抛出UnknownServiceException。
有人能解释一下这种行为吗?
答案 0 :(得分:0)
正如我在评论中所说,工厂已关闭。可能在@AfterClass
部分关闭它?
答案 1 :(得分:0)
您的直接问题已经得到解答,但请注意您的代码会遇到其他问题。单元测试应该是可执行的,没有相互依赖性,但是代码不是这种情况。您可以跨测试重用相同的会话。您也可以重复使用工厂,甚至可以在一次测试中关闭它。此外,测试可能在多个线程中运行,并且您的代码不是线程安全的(工厂引用将无法正确共享)。