Java JSF2:使用EJB打开视图中的会话?

Java JSF2:使用EJB打开视图中的会话?,java,architecture,jsf,ejb-3.0,jsf-2,Java,Architecture,Jsf,Ejb 3.0,Jsf 2,在JSF2应用程序中讨论视图中的开放会话模式有意义吗? 我的应用程序有JSF2托管bean调用业务服务EJB,这些EJB完成所有与db相关的工作(有一个DAO层,但现在这并不重要) 拥有OSIV模式意味着托管Bean必须以某种方式确保底层会话已打开 我也在使用JPA。理论上,问题是完全相同的:当实体离开EJB时,它们将变得分离,除非有什么东西使EntityManager的作用域保持打开状态。(这里有一篇关于这个主题的博文:) 我从一本书里读到: 8)视图中没有开放式实体管理器支持。 […]在EJ

在JSF2应用程序中讨论视图中的开放会话模式有意义吗? 我的应用程序有JSF2托管bean调用业务服务EJB,这些EJB完成所有与db相关的工作(有一个DAO层,但现在这并不重要)

拥有OSIV模式意味着托管Bean必须以某种方式确保底层会话已打开


我也在使用JPA。

理论上,问题是完全相同的:当实体离开EJB时,它们将变得分离,除非有什么东西使EntityManager的作用域保持打开状态。(这里有一篇关于这个主题的博文:)

我从一本书里读到:

8)视图中没有开放式实体管理器支持。 […]在EJB3中,当实体离开bean时 使用事务范围EntityManager, 它与持久性分离 您可能不再依赖上下文 延迟加载(实际上是JPA 规范没有指定 在这种情况下的行为,很可能 某些依赖于供应商的异常将被删除 当然,你可以使用 扩展了的EntityManager 持久性上下文,保存 事务和持久性上下文 只要你愿意。但这一特点是 仅适用于SFSB,而DAO 类是 无状态服务,因为它们只是 向持久化进程发送调用 层。此外,有专门的 每个客户机的DAOBean实例 这似乎是一个很大的杀伤力


但我不确定这是真的。据我所知,您应该能够编写一个servlet过滤器,它使用启动和提交事务(如OSIV中的常规过滤器)。然后EJB将参与在过滤器中启动的事务,
EntityManager
将保持打开状态。虽然我还没有测试过,但我的建议是尝试一下。

Caucho有一个过滤器,如您所述: