3

我在View模式中为我的jsf/icesfaces应用程序使用了开放会话。 像往常一样,servlet过滤器打开和关闭“web服务器线程”开始和结束处的所有休眠会话。休眠'在视图中打开会话'和异步任务

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

现在我的问题:处理这种异步任务的休眠会话的最佳方式是什么?我应该在线程本身手动创建一个会话,还是像线程一样有servlet过滤器(当线程启动时会打开会话,并在线程结束时关闭会话)?

我会感谢任何最好的practives或类似。谢谢。

下面是它创建线程的代码:

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 (...) 
       } 
} 

回答

0

一般来说,“打开会话鉴于”过滤器是相当简单:打开会话,它连接到一个ThreadLocal,在年底关闭。这些实现之间的变化是如何访问存储在ThreadLocal中的Session。因此,根据您正在使用的“打开会话视图”parttern实现,无论是否有可访问的工厂与您正在使用的Filter无关,或者(在几乎所有情况下),您都可以查看过滤器,并模仿它的处理“//做事情要做(...)”。