首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java EE 6 EJB教程:为什么不使用@Singleton而不是@Stateless

Java EE 6 EJB教程:为什么不使用@Singleton而不是@Stateless
EN

Stack Overflow用户
提问于 2013-04-19 21:57:09
回答 3查看 1.1K关注 0票数 0

我看了Java EE 6教程中的一个EJB示例。在本例中,我想知道是否可以使用@Singleton而不是@Stateless?

代码语言:javascript
复制
package converter.ejb;

import java.math.BigDecimal;
import javax.ejb.*;

    @Stateless
    public class ConverterBean {

        private BigDecimal yenRate = new BigDecimal("83.0602");
        private BigDecimal euroRate = new BigDecimal("0.0093016");

        public BigDecimal dollarToYen(BigDecimal dollars) {
            BigDecimal result = dollars.multiply(yenRate);
            return result.setScale(2, BigDecimal.ROUND_UP);
        }

        public BigDecimal yenToEuro(BigDecimal yen) {
            BigDecimal result = yen.multiply(euroRate);
            return result.setScale(2, BigDecimal.ROUND_UP);
        }
    }

在我看来,这是一个Util方法。

如果我没有使用EJB,我可以在这个ConverterBean上使用静态方法。

还有另一个问题。我知道这是一个简单的示例,但是如果我使用示例中的servlet中的代码,为什么只使用EJB呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 22:01:08

是的,我会说这是EJBs的一个糟糕的用例。这些方法应该明确地在某个声明为静态方法的实用程序类中。对于单例,如果你不需要它,就不要使用它(当然,你可以让这个类成为单例,但是你能得到什么呢?)让你的代码尽可能的简单。

票数 1
EN

Stack Overflow用户

发布于 2013-04-19 22:50:22

因为,有两种方法可以访问@Singleton bean,容器管理和bean管理。默认为容器管理,默认锁为LockType.WRITE。因此同一时间只有一个客户端可以访问该bean,其他客户端将被阻止。

票数 1
EN

Stack Overflow用户

发布于 2013-04-29 04:38:42

如果我只需要一类实用程序,我真的看不出在中使用EJB的原因。我认为您可以将它用作一个简单的最终实用程序类,并在其中使用静态方法。如果您确实需要从容器事务、JPA的使用、一些远程服务或类似的东西中获益,则可以使用EJB。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16106356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档