2011-10-28 28 views
3

我刚刚阅读Adam Bien的Why stateful and local anti-facades are KISS,他建议使用带有EntityManager的SFSB在整个客户端交互过程中保留实体。带有不可序列化的EntityManager的有状态会话bean钝化?

  1. 简化版,在集群环境中这种失败不是在评论中提及,而且每当SFSB应该由容器钝化?

  2. 如果我说得对,你会建议什么样的解决方案?我想尽量减少应用程序中的层数,将SFSB绑定到对话范围并直接在我的JSF视图中引用它们会很有用。

+1

我可以回答#1:是的,扩展PC将防止钝化(从而进行故障切换)。我不知道如何回答#2;我不清楚你想要解决什么问题。 –

+0

它涉及到钝化时是交易范围还是扩展?我试图找出用于我的应用程序的EJB 3/CDI/JSF的基本设计。内存消耗可能不会成为问题,所以我认为我会去“有状态”的设计来规避合并实体。 – user953217

+0

我猜Tx或扩展类型**确实很重要。看看* EJB 3.1 FR规范* **“4.2有状态会话Bean的会话状态”**:“一个容器**不能**使用扩展持久化上下文钝化有状态会话Bean,除非下列条件met:1.持久化上下文中的所有实体都是可序列化的。2. EntityManager是可序列化的。“ –

回答

1

通常,拥有基于状态的体系结构是计数器可扩展的。

我已经在EJB 3 SLSBs上工作超过5年了,现在已经在多个项目中工作,并且从未遇到与合并实体有关的实际问题。

如果您希望通过添加一层DTO将您的客户层与持久层分离开来。通过这种方式,您可以根据您的客户想要呈现数据的方式,根据对业务/持久层和DTO最好的方式设计实体模型。

如果你想使用相同的对象,你仍然可以做到这一点,你应该只关注哪些对象是“在会话中”,哪些是分离的,你不会有任何合并问题。