【发布时间】:2014-02-27 21:15:06
【问题描述】:
我有一些 junit 测试用例在 jenkins 上运行,但其中一些在 jenkins 上失败了,但是我让它们在我的本地笔记本电脑上成功运行。org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1688)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at com.test.ui.struts.module.config.ReadAction.executeImpl(ReadAction.java:144)
at com.test.ui.struts.module.config.CrudDataAction.execute(CrudDataAction.java:120)
这是我在 ReadAction.java 中的代码
session = sf.getCurrentSession();
try
{
if (!session.getTransaction().isActive())
session.beginTransaction();
Criteria c = session.createCriteria(metaBean.getEntityName());
setProjection(metaBean, c);
// fetch 1 more row than we can return to see if we have limited the result set
c.setMaxResults(_maxRows + 1);
c.add(getRestrictions(metaBean, reqBean));
List result = c.list();//This is line 144
我看不出有什么理由让会议在这里结束,有什么理想吗?
【问题讨论】:
-
当您使用单元测试来练习您的代码时,您不应该使用休眠连接到一个真实的数据库。相反,应该通过集成测试来执行此类代码。也就是说,您最可能的原因是您的单元测试环境和 jenkins 环境之间存在与休眠相关的配置差异。
-
我认为在 jenkins 服务器上设置数据库并针对数据库运行 junit 测试用例没有任何问题。
-
另外,我认为这不是配置问题,我很确定,如果是配置问题,所有的junit用例都会失败。
-
Jenkins 是否有可能并行运行您的测试并以某种方式在线程之间共享会话?
-
是的,我也有这种感觉,但是根据日志信息,jenkins是异步运行的。
标签: java hibernate junit jenkins hibernate-session