jbpm session is closed

项目框架:struts1,hibernate3

获取session的方式是opensession,不是getCurrentSession。

连接池:ProxoolConf

莫名的出现了session is closed的问题。

解决方案: 有关jbpm4.4的方法都重新获取jSession,获取完后关闭。

Session jSession = null;
Transaction jbpmts = null;
try {
jSession = JBPMUtil.getJbpmSession(processEngine);// 不论是否是查询,始终获取一下session,进行内部初始化.防止Session is closed.
jbpmts = jSession.getTransaction();
jbpmts.begin();

jbpmts.commit();

} catch (Exception e) {
BugUtil.addBug(e);
e.printStackTrace();
if (jbpmts != null) {
jbpmts.rollback();
}
request.setAttribute("error", StringUtil.alert("系统错误", "back"));
return mapping.findForward("errorPage");
} finally {
JBPMUtil.closeJbpmSession(jSession);
}


public static Session getJbpmSession(ProcessEngine processEngine) {
// 数据库连接的打开,关闭、事务的打开、提交等都属于运行期环境应该做的事情。Environment 作用:线程安全对象,为每个线程维护一系列的资源
EnvironmentImpl environmentImpl = ((EnvironmentFactory) processEngine).openEnvironment(); // 获取运行时环境
DbSessionImpl dbSessionImpl = environmentImpl.getFromCurrent(DbSessionImpl.class);// 我们一般像这样使用Environment获取资源对象,不要使用EnvironmentImpl的static方法,这样获取不到当前的session
return dbSessionImpl.getSession();
}


public static void closeJbpmSession(Session session) {
if (session != null && session.isConnected()) {
session.close();
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值