EJB的简单但良好的模式

Sar*_*ara 4 java design-patterns session-bean ejb-3.0

对于以下解决方案,您会建议一个好的,实用但简单的模式:

  • HTML + JSP(作为视图/演示文稿)
  • Servlet(控制器,请求,会话处理)
  • EJB(持久性,businesslogic)
  • MySQL DB

是否有必要使用自己的DAO层来保持持久性?我使用JPA将对象持久保存到我的数据库中.

我应该从EJB中撤销业务逻辑吗?所有在线资源都告诉我不同​​的事情并让我感到困惑......

Pet*_*ans 5

我肯定会将业务逻辑放在无状态会话Bean中.无状态会话bean很好,因为它们可以很好地捕获事务边界.它将View层与持久层分离.

注意SSB的方法对应于用户想要实现的小业务目标.

另一点是,您必须确保返回的数据包含对象树中的所有数据,并且您不依赖于延迟加载来获取其余数据,因为这会导致所有类型的问题.

尽可能远离有状态会话Bean:它们是坏消息,在Web应用程序的上下文中是一个破碎的概念.

对于长时间运行的事情,请考虑使用通过发送JMS消息触发的消息驱动Bean.这些是进行后台处理的好方法,可以更快地释放业务逻辑,缩短事务处理并更快地将控制权交还给最终用户.


Pas*_*ent 5

对于使用JSP/Servlets + EJB + MySQL的解决方案,您会建议什么是一个优秀且实用但简单的模式

使用您选择的MVC框架,无状态会话Bean用于业务逻辑和事务管理(如果您不需要远程处理,则更喜欢本地接口),持久性实体.

尽可能地注入EJB(如果您使用的是Java EE 6,这意味着在任何地方,您也可以跳过该接口).

是否有必要使用自己的DAO层来保持持久性?我使用JPA将对象持久保存到我的数据库中.

有些人可能会说是,我在大多数情况下都说不.在EntityManager已经实现了域名商店模式,也没有必要将其屏蔽,一个DAO后面简单的需求.

您可能需要阅读以下资源以获取更多有关此内容的意见:

我应该从EJB中撤销业务逻辑吗?

我不会.将您的业务逻辑放在您的(无状态)会话Bean中.EJB3是POJO,它们易于测试,不需要将业务逻辑委托给另一层.