当前位置: 首页 > 面试题库 >

JavaEE6 DAO:应该是@Stateless还是@ApplicationScoped?

蔺山
2023-03-14
问题内容

我当前正在创建一个EJB3数据访问类,以处理Java EE 6应用程序中的所有数据库操作。现在,由于Java EE
6提供了新的ApplicationScoped注释,所以我想知道EJB应该具有什么状态,或者它应该是无状态的。

让DAO成为@Stateless会话Bean还是@ApplicationScopedBean 会更好?那@Singleton
这些与DAO相关的选项之间有什么区别?

编辑: 我在完整的Java EE 6平台上使用Glassfish 3.0.1


问题答案:

最好让DAO是@Stateless会话Bean或@ApplicationScoped
Bean?那@Singleton呢?这些与DAO相关的选项之间有什么区别?

我不会为DAO使用无状态会话Bean:

  1. EJB由容器池化,因此,如果每个池中有N个实例并有数千个表,那么您将浪费资源(更不用说部署时的成本了)。

  2. 将DAO实施为SLSB会鼓励EJB链接,从可伸缩性的角度来看,这不是一个好习惯。

  3. 我不会将DAO层绑定到EJB API。

@Singleton在EJB
3.1中引入可以让事情更好一点,但我仍然不会实现的DAO作为EJB的。我宁愿使用CDI(也许是自定义构造型,例如,请参见本文)。

否则我根本不会使用DAO。JPA的实体管理器是域存储模式的实现,并且在DAO中包装对域存储的访问不会增加太多价值。



 类似资料:
  • 问题内容: 我发现自己同意返回接口而不是具体的类。 原因很简单,我要松散耦合。 但是还会有其他影响或权衡吗? 问题答案: 对于List或ArrayList之类的类型,不应进行任何编译,并且应将List提升Code返回到接口。 如果这是通过诸如CopyOnWriteArrayList之类的并发包进行的,并且您使用的是addIfAbsent之类的方法(未在List接口中定义),您将发现自己受到限制。

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前

  • 问题内容: 以下两种缓冲方法之间有什么区别(如果有)? 问题答案: 更有效率。在本身不具备大的缓冲。所述可以被设置为具有比较大的缓冲区。将在将作为一个瓶颈。 简而言之:您应该通过漏斗而不是瓶子来读取数据。 更新 :这是一个小基准程序,只需复制“粘贴”即可运行它。您不需要准备文件。 使用Seagate Momentus 7200.3 硬盘在Latitude E5500上的结果:

  • 问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于

  • 我将指向。很好用。之后,解压ant并设置与ant相关的环境变量,在键入后,得到以下错误消息 我搜索了这个论坛。看起来一个解决方案是将Java指向JDK,而不是JRE。我不确定这是否应该是解决办法。换句话说,一般来说,JAVA_HOME应该指向哪一个?JDK还是JRE?