hibernate'在视图中打开会话'和异步任务

时间:2010-10-18 09:02:25

标签: java android asynchronous android-asynctask open-session-in-view

我在jsf / icesfaces应用程序中使用View模式中的Open Session。 像往常一样,servlet过滤器在“Web服务器线程”的开头和结尾打开和关闭所有hibernate会话。

我现在的问题是我正在使用异步任务。从数据库加载大对象列表。因此,我正在“手动”创建一个执行任务的新线程。

现在我的问题是:处理此类异步任务的hibernate会话的最佳方法是什么?我应该在线程本身手动创建一个会话,还是有类似于线程的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 (...)
                }
}

1 个答案:

答案 0 :(得分:0)

一般来说,“在视图中打开会话”过滤器非常简单:打开会话,将其附加到ThreadLocal,最后关闭它。实现之间的变化是如何到达存储在ThreadLocal中的Session。因此,根据您正在使用的“在视图中打开会话”部分实现,要么存在与您正在使用的过滤器无关的可访问工厂,或者(几乎在所有情况下),您可以查看源的过滤,并模仿其处理“//做要做的事情(...)”。