是否可以在一个EJB 3 bean中一起使用@ WebService,@ Stateless和@Singleton?

Jul*_*lia 3 java annotations java-ee-6 ejb-3.1

我正在使用EJB 3和JBoss AS 6.0.0.Final。我有一个带注释@Stateless和的无状态会话bean @WebService。添加批注时@Singleton,部署错误,显示以下消息:

... name = ServiceBean,service = ejb3已安装

如何避免部署错误?

Gon*_*gui 5

您可以在同一bean中使用@WebService和@Stateless或@WebService和@Singleton,如果要将POJO同时公开为Web服务和EJB,这是很有意义的。

在同一个bean中使用@Stateless和@Singleton并没有多大意义。使用@Singleton时,您将创建与所有@EJB完全相同的EJB功能(事务管理,安全性等)。唯一的区别是容器如何管理EJB生命周期:

  • @Stateless:在第一个请求之后立即创建EJB实例,并且在请求结束时,如果有另一个请求进入,则将EJB池化并准备重用。但是,如果在另一个请求进入时正在使用所有池化的实例。对于同一个bean,容器创建一个相同的新实例来满足该新请求。
  • @Singleton:EJB实例是在第一个请求(默认情况下,请参见@Startup重写此行为)进入后创建的,它将是容器创建的唯一实例。如果另一个请求要使用相同的EJB,则容器将永远不会创建该容器的新实例-将使用先前创建的实例。它就像一个池大小为1的@Stateless EJB :)使用并发时,诸如并发性等方面很重要,但这可能超出了本文的范围。