jbpm4中不施用Spring, LazyInitializationException的处置
来源:互联网 发布:易语言取网页源码 编辑:程序博客网 时间:2024/06/11 17:10
在应用jbpm四时, 如若没用运用spring构架, 就会经常出现LazyInitializationException.:42 | could not initialize proxy - no Session 这个异常, 实则, 这个重要是hibernate懒加载促成的
解决方案通常有以次形式,
一.在呼应的配置文件中配备lazy="false"
2. 在亟需预先,采取Hibernate.initialize()先头加载
3. 自各儿写阻截器处置.
至于一,这个是良好处置的, 这边就不说了.
关于3. 这个我临时还写糟糕.., 这个应该是和spring中的那个OpenSessionInViewFilter相仿的.
至于二, 这边就给个简略的事例来干说明
譬如说念, 经过historyActivityInstanceQuery失去HistoryTaskInstanceImpl,再由HistoryTaskInstanceImpl失去HistoryTask.
如若直接获取, 就会报LazyInitializationException异常.
可以经过以次模式取得
Java代码
// 测试事例
// list
HistoryActivityInstanceQuery haiQuery = new
HistoryActivityInstanceQueryImpl().executionId(piId);
List list = processEngine.get(CommandService.class).execute(
new ListLoadImmediately((AbstractQuery) haiQuery) {
private static final long serialVersionUID = 一L;
@Override
public void doLoad(HistoryActivityInstance datum) throws HibernateException {
if (datum instanceof HistoryTaskInstanceImpl) {
Hibernate.initialize(((HistoryTaskInstanceImpl) datum).getHistoryTask()); // 事前加载了
}
}
});
for (HistoryActivityInstance hai : list) {
if (hai instanceof HistoryTaskInstanceImpl) {
HistoryTaskInstanceImpl hti = (HistoryTaskInstanceImpl) hai;
System.out.println(">> " + hti.getHistoryTask().getAssignee());
}
}
// UniqueResult
haiQuery = new HistoryActivityInstanceQueryImpl().executionId(piId).page(零, 一);
HistoryActivityInstance ai= processEngine.get(CommandService.class).execute(
new UniqueLoadImmediately
((AbstractQuery) haiQuery) {
private static final long serialVersionUID = 一L;
@Override
public void doLoad(HistoryActivityInstance datum)
throws HibernateException {
if (datum instanceof HistoryTaskInstanceImpl) {
Hibernate.initialize(
((HistoryTaskInstanceImpl) datum).getHistoryTask());// 头里加载了
}
}
});
if (ai instanceof HistoryTaskInstanceImpl) {
System.out.println(">> " + ((HistoryTaskInstanceImpl) ai).getHistoryTask()
.getAssignee());
} else {
System.out.println("not an instance of HistoryTaskInstance");
}
// 输出
// >> 王总经理
// >> Sun Qi
// >> finance
// >> 张总
// >> 王总经理
// 测试事例
// list
HistoryActivityInstanceQuery haiQuery = new
HistoryActivityInstanceQueryImpl().executionId(piId);
List list = processEngine.get(CommandService.class).execute(
new ListLoadImmediately((AbstractQuery) haiQuery) {
private static final long serialVersionUID = 一L;
@Override
public void doLoad(HistoryActivityInstance datum) throws HibernateException {
if (datum instanceof HistoryTaskInstanceImpl) {
Hibernate.initialize(((HistoryTaskInstanceImpl) datum).getHistoryTask()); // 之前加载了
}
}
});
for (HistoryActivityInstance hai : list) {
if (hai instanceof HistoryTaskInstanceImpl) {
HistoryTaskInstanceImpl hti = (HistoryTaskInstanceImpl) hai;
System.out.println(">> " + hti.getHistoryTask().getAssignee());
}
}
// UniqueResult
haiQuery = new HistoryActivityInstanceQueryImpl().executionId(piId).page(零, 一);
HistoryActivityInstance ai= processEngine.get(CommandService.class).execute(
new UniqueLoadImmediately
((AbstractQuery) haiQuery) {
private static final long serialVersionUID = 一L;
@Override
public void doLoad(HistoryActivityInstance datum)
throws HibernateException {
if (datum instanceof HistoryTaskInstanceImpl) {
Hibernate.initialize(
((HistoryTaskInstanceImpl) datum).getHistoryTask());// 先头加载了
}
}
});
if (ai instanceof HistoryTaskInstanceImpl) {
System.out.println(">> " + ((HistoryTaskInstanceImpl) ai).getHistoryTask()
.getAssignee());
} else {
System.out.println("not an instance of HistoryTaskInstance");
}
// 输出
// >> 王总经理
// >> Sun Qi
// >> finance
// >> 张总
// >> 王总经理
ListLoadImmediately.java
Java代码
public abstract class ListLoadImmediately implements Command> {
private static final long serialVersionUID = 一L;
private AbstractQuery query;
public ListLoadImmediately(AbstractQuery query) {
this.query = query;
}
/* (non-Javadoc)
* @see org.jbpm.api.cmd.Command#execute(org.jbpm.api.cmd.Environment)
*/
@Override
public List execute(Environment environment) throws Exception {
query.setCommandService(null); //
List data = doExecute(environment);
for (T datum : data) {
doLoad(datum);
}
return data;
}
/**
* 处置要加载的数据
*
* @param datum
* @throws HibernateException
*/
public abstract void doLoad(T datum) throws HibernateException;
@SuppressWarnings("unchecked")
public List doExecute(Environment environment) throws Exception {
return (List) query.execute(environment);
}
}
public abstract class ListLoadImmediately implements Command> {
private static final long serialVersionUID = 一L;
private AbstractQuery query;
public ListLoadImmediately(AbstractQuery query) {
this.query = query;
}
/* (non-Javadoc)
* @see org.jbpm.api.cmd.Command#execute(org.jbpm.api.cmd.Environment)
*/
@Override
public List execute(Environment environment) throws Exception {
query.setCommandService(null); //
List data = doExecute(environment);
for (T datum : data) {
doLoad(datum);
}
return data;
}
/**
* 处置要加载的数据
*
* @param datum
* @throws HibernateException
*/
public abstract void doLoad(T datum) throws HibernateException;
@SuppressWarnings("unchecked")
public List doExecute(Environment environment) throws Exception {
return (List) query.execute(environment);
}
}
UniqueLoadImmediately.java
Java代码
/**
* @author yeyong
*/
public abstract class UniqueLoadImmediately implements Command {
private static final long serialVersionUID = 一L;
private AbstractQuery query;
public UniqueLoadImmediately(AbstractQuery query) {
this.query = query;
}
/* (non-Javadoc)
* @see org.jbpm.api.cmd.Command#execute(org.jbpm.api.cmd.Environment)
*/
@Override
public T execute(Environment environment) throws Exception {
query.setCommandService(null); //
T data = doExecute(environment);
doLoad(data);
return data;
}
/**
* 处置要加载的数据
*
* @param data
* @throws HibernateException
*/
public abstract void doLoad(T data) throws HibernateException;
@SuppressWarnings("unchecked")
public T doExecute(Environment environment) throws Exception {
List list = (List) query.execute(environment);
if (list.isEmpty()) {
return null;
}
if (list.size() > 一) {
throw new JbpmException("result not unique: " + list.size());
}
return list.get(零);
}
}
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception
- jbpm4中不施用Spring, LazyInitializationException的处置
- spring mvc 接受多对象的处置
- Android中低电量的处置方法
- CLR 中未处理异常的处置
- IAR6.3 中对 CMSIS 的处置
- 详解ASP.NET MVC中DropDownList的施用
- android viewpage的施用
- Spring 集成 HornetQ Topic 施用
- spring的HibernateTemplate的sessio.load()方式如何避免LazyInitializationException
- 不良资产处置中风险度量存在的问题
- 记要一下子Spring三+hibernate3.3施用从Tomcat迁徙到Jboss的困难进程
- 基于maven的web项目在Eclipse中施用Tomcat调试
- JAVA中施用JSONObject对象必备jar
- JBPM4 使用中碰到的一些问题
- jBPM4中配置MySQL的hibernate方言
- JBPM4中 state 和 task 的不同
- JBPM4中sub-process的使用
- jbpm4.4整合spring过程中问题汇总(追加)
- 图形处理 OpenGL硬件加速
- HOOK专题
- time.h头文件应用
- 如何使得双击开始编辑Flex Tree控件的条目
- AjaxAnyWhere+Struts的一个使用(demo/feature crew)
- jbpm4中不施用Spring, LazyInitializationException的处置
- 传智播客——awt细节
- JAVA临时文件的读写
- 基于代码生成的数据流程兑现模式
- 在.NET 中比较常用的代码
- JAVA SCRIPT 实现读写txt文件
- CreationName for SSIS 2005 and adding components programmatically
- sysctl命令详解
- 软件架构视图