我正在为我的 jsf/icesfaces 应用程序使用 Open Session in View 模式。像往常一样,servlet 过滤器在“Web 服务器线程”的开始和结束时打开和关闭所有休眠会话。
我现在的问题是我正在使用异步任务,例如。从数据库中加载大量对象。因此,我正在“手动”创建一个执行任务的新线程。
现在我的问题是:为此类异步任务处理休眠会话的最佳方法是什么?我应该在线程本身中手动创建一个会话,还是有类似 servlet 过滤器的线程(线程启动时打开会话并在结束时关闭它的东西)?
我将不胜感激任何最佳实践等。谢谢你。
这是创建线程的代码:
protected static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5,
15, 50, TimeUnit.SECONDS, new LinkedBlockingQueue(20));
// called by action method of a button
private void asyncLoading() {
SessionRenderer.addCurrentSession(this.renderGroup);
threadPool.execute(new Thread() {
// do the thing to do (...)
}
}