为什么我必须在ejb中使用@Stateless?如果我不使用会怎样?

时间:2018-12-05 11:03:27

标签: ejb stateless

在J2EE Java代码中,我可以看到以下代码

@Stateless
public class PostLabellingDao
    {
    @PersistenceContext(unitName = "tlga")
    protected EntityManager entityManager;

    public void loadRecord(String sKey) throws Exception
        {
        JPAQuery jpaQuery = new JPAQuery(entityManager);
        QSomeEntity q = QSomeEntity.someEntity;

        List<SomeEntity> oList
            = jpaQuery
                .from(q)
                ).list(q);

        ... // some code on Database

如果我删除@Stateless注释,则该应用程序将继续工作!

使用@Stateless批注的效用是什么?

我知道@Stateful@Stateless@Singleton之间的区别,但是我使用Why?搜索了关于When?@Stateless的一些解释,以避免在不需要时使用它。

1 个答案:

答案 0 :(得分:0)

EJB配置模型是基于例外的配置,因此,当您使用@Stateless或@Stateful或@Singletone注释Bean时,将为该Bean激活许多服务,例如事务,安全性,线程安全性等。不需要这些服务。您一定不能用这些注释来注释bean。

EJB 3在实践中有一些好的建议。例如(您的案件是第三起案件):

  

1)如果一切都是会话Bean,则由于以下原因会降低性能   容器开销

     

2)制作实用程序类会话bean并不是很糟糕   有用(实用程序API应该只使用CDI而不是EJB)

     

3)DAO /存储库类。尽管这些对象依赖线程安全   和交易,它们本身不必是会话bean   因为它们很可能会通过EJB应用程序服务使用   层

     

4)您不应直接将EJB用作JSF支持的bean