annotations - java EJB中的@Singleton

标签 annotations singleton ejb javabeans

我有一个 EJB,它需要是单例和有状态的,因为它将成为一种连接池。我的问题是:

  • 如果我用 @Singleton 定义一个 EJB注释,默认情况下它是有状态的还是我必须用 @Stateful 定义它还?
  • 可以和 @Stateless 一起使用吗?注解?

  • 试图找到一些关于此的文档,但到目前为止还没有运气,所以任何有知识的人请分享你的智慧,也许一两个链接。

    最佳答案

    EJB tutorials表明 EJB 可以是单例的,也可以是有状态的,也可以是无状态的。我从来没有尝试过使用这些注释中的一个以上,但我相当确信正确的做法是只使用其中一个。

    从那个链接:

    Singleton session beans maintain their state between client invocations



    所以,对于你的问题:

    if I define a EJB with @Singleton annotation will it then be stateful by default or do I have to define it with @Stateful also?



    如果对于 Stateful,你的意思是保持其状态的能力,答案是:是的,Singleton 默认是有状态的。

    请记住,在某些特殊情况下,Singleton 的行为与 Singleton 不同,请阅读 article对这个。通常,如果您在集群之外并避免使用默认构造函数,则不会冒这种风险:您需要始终使用 EJB 的引用,方法是将其注入(inject)另一个 EJB 或 Web 客户端,使用:
    @EJB MyEJB myEJB;
    

    最后看看this Java EE 6 教程的一部分,关于 EJB 生命周期,解释了有状态和其他 EJB 之间的主要区别在于容器在其生命周期内被钝化的能力。这种差异是“默认情况下单例是有状态的”语句严格来说不正确的主要原因,但在您的问题的上下文中是正确的。

    关于annotations - java EJB中的@Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9513709/

    相关文章:

    Java AnnotationProcessing - 获取注释的字段

    java - C# 获取扩展基类的类列表

    C# 单例 "GetInstance"方法或 "Instance"属性?

    iphone - 如何在我的iPhone项目中实现Singleton Pattern?

    java - javax.validation.constraints 的注释不起作用(忽略)

    c# - 在 mvc3 服务器端代码上获取显示注释值

    c++ - 使用 std::call_once 实现类似单例的功能

    java - Enterprise Java Bean(EJB) 和 Entity Java Bean 有什么区别?

    java - 动态远程EJB调用

    java - 通过构造函数的依赖注入(inject)不适用于 EJB bean